配置内部队列编辑

Packetbeat 使用内部队列来存储事件,然后再将它们发布出去。该队列负责将事件缓冲和组合成批次,以便输出端可以消费。输出端将使用批量操作来在一个事务中发送一批事件。

您可以通过在 packetbeat.yml 配置文件的 queue 部分设置选项或在输出端的 queue 部分设置选项来配置内部队列的类型和行为。只能配置一种队列类型。

此示例配置将内存队列设置为缓冲最多 4096 个事件

queue.mem:
  events: 4096

配置内存队列编辑

内存队列将所有事件保存在内存中。

内存队列等待输出端确认或丢弃事件。如果队列已满,则无法将新事件插入到内存队列中。只有在收到来自输出端的信号后,队列才会释放空间以便接受更多事件。

内存队列由参数 flush.min_eventsflush.timeout 控制。 flush.min_events 限制了单个批次中可以包含的事件数量,而 flush.timeout 指定了队列应该等待多长时间才能完全填充事件请求。如果输出端支持 bulk_max_size 参数,则最大批次大小将是 bulk_max_sizeflush.min_events 中较小的一个。

flush.min_events 是一个遗留参数,新配置应该优先使用 bulk_max_size 来控制批次大小。从 8.13 开始,使用 flush.min_events 而不是 bulk_max_size 来限制批次大小永远不会有性能优势。

在同步模式下,只要有事件可用,事件请求就会立即被填充,即使没有足够的事件来填充请求的批次也是如此。这在必须将延迟降到最低时很有用。要使用同步模式,请将 flush.timeout 设置为 0。

为了向后兼容,还可以通过将 flush.min_events 设置为 0 或 1 来激活同步模式。在这种情况下,批次大小将被限制为队列容量的一半。

在异步模式下,事件请求将等待指定的超时时间,以尝试完全填充请求的批次。如果超时时间过期,队列将返回一个包含所有可用事件的部分批次。要使用异步模式,请将 flush.timeout 设置为正持续时间,例如 5s

此示例配置在有足够的事件来填充输出端的请求(通常由 bulk_max_size 控制,并由 flush.min_events 限制为最多 512 个事件)时,或在事件等待 5 秒后仍未填充请求的大小的情况下,将事件转发到输出端

queue.mem:
  events: 4096
  flush.min_events: 512
  flush.timeout: 5s

配置选项编辑

您可以在 packetbeat.yml 配置文件的 queue.mem 部分指定以下选项

events编辑

队列可以存储的事件数。

默认值为 3200 个事件。

flush.min_events编辑

如果大于 1,则指定每个批次的事件最大数量。在这种情况下,输出端必须等到队列累积了请求的事件数量或 flush.timeout 过期后才能发布。

如果为 0 或 1,则将每个批次的事件最大数量设置为队列大小的一半,并将队列设置为同步模式(相当于 flush.timeout 为 0)。

默认值为 1600。

flush.timeout编辑

来自输出端的事件请求要完成的最大等待时间。如果设置为 0s,则事件会立即返回。

默认值为 10 秒。

配置磁盘队列编辑

磁盘队列将待处理的事件存储在磁盘上,而不是主内存中。这允许 Beats 队列的事件数量超过内存队列所能容纳的数量,并在 Beat 或设备重新启动时保存事件。这种更高的可靠性是以性能为代价的,因为每个传入的事件都必须写入设备的磁盘并从磁盘读取。但是,对于磁盘不是主要瓶颈的设置,磁盘队列提供了一种简单且开销相对较低的方法,可以为传入的事件数据添加一层健壮性。

要使用默认设置启用磁盘队列,请指定最大大小

queue.disk:
  max_size: 10GB

队列将使用磁盘上指定的最大大小。它只会使用所需的空间。例如,如果队列只存储 1GB 的事件,那么它将只占用磁盘上的 1GB 空间,无论最大值是多少。队列数据在成功发送到输出端后,将从磁盘中删除。

配置选项编辑

您可以在 packetbeat.yml 配置文件的 queue.disk 部分指定以下选项

path编辑

磁盘队列应该存储其数据文件的目录的路径。该目录将在启动时创建,如果它不存在的话。

默认值为 "${path.data}/diskqueue"

max_size (必需)编辑

队列应该在磁盘上使用的最大大小。超过此最大值的事件将暂停其输入或被丢弃,具体取决于输入的配置。

值为 0 表示不强制执行最大大小,队列可以增长到磁盘上的可用空间量。此值应该谨慎使用,因为完全填充系统的硬盘可能会使系统无法运行。最好只在专用数据或备份分区中使用此设置,这些分区不会干扰 Packetbeat 或主机系统上的其他组件。

默认值为 10GB

segment_size编辑

添加到队列的数据将存储在段文件中。每个段包含一些等待发送到输出端的事件,并在所有事件都发送后删除。默认情况下,段大小限制为最大队列大小的 1/10。使用较小的尺寸意味着队列将使用更多数据文件,但它们将更快地被删除。使用较大的尺寸意味着某些数据需要更长时间才能删除,但队列将使用更少的辅助文件。通常可以将此值保持不变。

默认值为 max_size / 10

read_ahead编辑

从磁盘读取到内存的事件数量,同时等待输出端请求它们。如果您发现输出端速度变慢,因为它们无法一次读取那么多事件,那么向上调整此设置可能会有所帮助,但会增加内存使用量。

默认值为 512

write_ahead编辑

队列应该接受并存储在内存中的事件数量,同时等待将它们写入磁盘。如果您发现队列的内存使用量过高,因为事件等待的时间过长而无法写入磁盘,那么向下调整此设置可能会有所帮助,但会降低事件吞吐量。另一方面,如果输入端因生产速度快于磁盘处理速度而处于等待状态或丢弃事件,则向上调整此设置可能会有所帮助,但会增加内存使用量。

默认值为 2048

retry_interval编辑

某些磁盘错误可能会阻止队列操作,例如写入数据目录的权限错误,或写入事件时的磁盘已满错误。在这种情况下,队列会报告错误,并在暂停 retry_interval 中指定的时间后重试。

默认值为 1s(一秒)。

max_retry_interval编辑

当连续多次写入磁盘时出现错误时,队列会将重试间隔增加 2 倍,直到达到 max_retry_interval 的最大值。如果担心记录太多错误或在目标磁盘长时间不可用时使主机系统过载,请增加此值。

默认值为 30s(30 秒)。