配置内部队列
编辑配置内部队列
编辑Winlogbeat 使用内部队列来存储事件,然后再发布它们。该队列负责缓冲事件并将事件组合成批次,以便输出可以消费。输出将使用批量操作在一个事务中发送一批事件。
您可以通过设置 winlogbeat.yml
配置文件中的 queue
部分的选项,或者通过设置输出的 queue
部分的选项来配置内部队列的类型和行为。只能配置一种队列类型。
以下示例配置将内存队列设置为缓冲最多 4096 个事件
queue.mem: events: 4096
配置内存队列
编辑内存队列将所有事件保存在内存中。
内存队列等待输出来确认或丢弃事件。如果队列已满,则无法将新事件插入到内存队列中。只有在收到输出的信号后,队列才会释放空间以接受更多事件。
内存队列由参数 flush.min_events
和 flush.timeout
控制。flush.min_events
限制了单个批次中可以包含的事件数量,而 flush.timeout
指定了队列应等待多长时间才能完全填充事件请求。如果输出支持 bulk_max_size
参数,则最大批次大小将是 bulk_max_size
和 flush.min_events
中的较小值。
flush.min_events
是一个遗留参数,新的配置应该优先使用 bulk_max_size
来控制批次大小。从 8.13 版本开始,使用 flush.min_events
而不是 bulk_max_size
来限制批次大小永远没有性能优势。
在同步模式下,即使没有足够的事件来填充请求的批次,也会在事件可用时立即填充事件请求。这在必须最大限度地减少延迟时很有用。要使用同步模式,请将 flush.timeout
设置为 0。
为了向后兼容,也可以通过将 flush.min_events
设置为 0 或 1 来激活同步模式。在这种情况下,批次大小将被限制为队列容量的 1/2。
在异步模式下,事件请求将等待指定超时时间,以尝试完全填充请求的批次。如果超时到期,队列将返回一个包含所有可用事件的部分批次。要使用异步模式,请将 flush.timeout
设置为正持续时间,例如 5s
。
以下示例配置在有足够的事件来填充输出的请求(通常由 bulk_max_size
控制,并限制为最多 512 个事件,由 flush.min_events
限制)时,或者事件已等待 5 秒而没有填充请求的大小时,将事件转发到输出
queue.mem: events: 4096 flush.min_events: 512 flush.timeout: 5s
配置选项
编辑您可以在 winlogbeat.yml
配置文件的 queue.mem
部分中指定以下选项
events
编辑队列可以存储的事件数量。
默认值为 3200 个事件。
flush.min_events
编辑如果大于 1,则指定每个批次的最大事件数。在这种情况下,输出必须等待队列累积请求的事件数量或等待 flush.timeout
过期才能发布。
如果为 0 或 1,则将每个批次的最大事件数设置为队列大小的一半,并将队列设置为同步模式(等效于 flush.timeout
为 0)。
默认值为 1600。
flush.timeout
编辑输出的事件请求的最大等待时间。如果设置为 0 秒,则立即返回事件。
默认值为 10 秒。
配置磁盘队列
编辑磁盘队列将待处理事件存储在磁盘上,而不是主内存中。这使得 Beats 可以队列化比内存队列可能容纳的更多事件,并在 Beat 或设备重新启动时保存事件。这种增强的可靠性是以性能为代价的,因为每个传入的事件都必须从设备的磁盘写入和读取。但是,对于磁盘不是主要瓶颈的设置,磁盘队列提供了一种简单且相对低开销的方式,可以为传入的事件数据添加一层鲁棒性。
要使用默认设置启用磁盘队列,请指定最大大小
queue.disk: max_size: 10GB
队列将使用磁盘上指定的最大大小。它只会使用所需的空间。例如,如果队列仅存储 1GB 的事件,则无论最大值有多高,它都只会在磁盘上占用 1GB。成功发送到输出后,队列数据将从磁盘中删除。
配置选项
编辑您可以在 winlogbeat.yml
配置文件的 queue.disk
部分中指定以下选项
path
编辑磁盘队列应存储其数据文件的目录的路径。如果该目录不存在,则在启动时创建它。
默认值为 "${path.data}/diskqueue"
。
max_size
(必需)
编辑队列应在磁盘上使用的最大大小。超出此最大值的事件将暂停其输入或被丢弃,具体取决于输入的配置。
0
值表示不强制执行最大大小,并且队列可以增长到磁盘上的可用空间量。应谨慎使用此值,因为完全填充系统的主磁盘可能会使其无法运行。最好仅将此设置用于不会干扰 Winlogbeat 或主机系统其余部分的专用数据或备份分区。
默认值为 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
(三十秒)。