filestream 输入编辑

使用 filestream 输入从活动的日志文件中读取行。它是 log 输入的全新改进替代方案。它对现有输入进行了各种改进

  1. close.on_state_change.* 选项的检查是在带外进行的。因此,如果输出被阻塞,Filebeat 可以关闭读取器并避免打开太多文件。
  2. 无论 harvester_limit 如何,都可以获得与 paths 配置匹配的所有文件的详细指标。这样,您可以跟踪所有文件,即使是未被主动读取的文件。
  3. parsers 的顺序是可配置的。因此,可以解析 JSON 行,然后将内容聚合到一个多行事件中。
  4. 某些位置更新和元数据更改不再依赖于发布管道。如果管道被阻塞,某些更改仍将应用于注册表。
  5. 只有最新的更新会被序列化到注册表中。相比之下,log 输入必须在每次从输出接收到 ACK 时序列化完整的注册表。这使得使用此输入进行注册表更新的速度要快得多。
  6. 该输入确保只有偏移量更新被写入仅追加日志的注册表。 log 写入完整的文件状态。
  7. 即使没有活动的输入,也可以从注册表中删除过时的条目。

要配置此输入,请指定一个基于 glob 的 paths 列表,必须抓取这些路径以定位和获取日志行。

配置示例

filebeat.inputs:
- type: filestream
  id: my-filestream-id
  paths:
    - /var/log/messages
    - /var/log/*.log

每个 filestream 输入都必须有一个唯一的 ID。省略或更改 filestream ID 可能会导致数据重复。如果没有唯一的 ID,filestream 将无法正确跟踪文件的状态。

您可以对从这些文件中获取的行应用其他 配置设置(例如 fieldsinclude_linesexclude_lines 等)。您指定的选项将应用于此输入获取的所有文件。

要对不同的文件应用不同的配置设置,您需要定义多个输入部分

filebeat.inputs:
- type: filestream 
  id: my-filestream-id
  paths:
    - /var/log/system.log
    - /var/log/wifi.log
- type: filestream 
  id: apache-filestream-id
  paths:
    - "/var/log/apache2/*"
  fields:
    apache: true

从两个文件获取行:system.logwifi.log

apache2 目录中的每个文件获取行,并使用 fields 配置选项将名为 apache 的字段添加到输出中。

读取网络共享和云提供商上的文件编辑

Filebeat 不支持从网络共享和云提供商读取文件。

但是,如果对 Filebeat 进行适当配置,则可以缓解这些数据源的其中一个限制。

默认情况下,Filebeat 根据文件的 inode 和设备 ID 来识别文件。但是,在网络共享和云提供商上,这些值在文件的生命周期内可能会发生变化。如果发生这种情况,Filebeat 会认为该文件是新文件,并重新发送文件的全部内容。要解决此问题,您可以配置 file_identity 选项。除了默认的 inode_deviceid 之外,可能的取值还有 pathinode_markerfingerprint

在运行之间更改 file_identity 方法可能会导致输出中出现重复事件。

选择 path 会指示 Filebeat 根据文件的路径来识别文件。如果 inode 和设备 ID 可能会发生变化,这是一种避免重新读取文件的快速方法。但是,请记住,如果文件被轮换(重命名),它们将被重新读取和重新提交。

如果即使设备 ID 发生更改,inode 也保持不变,则可以使用 inode_marker 选项。如果您的文件是轮换的而不是 path,则应尽可能选择此方法。您必须配置一个 Filebeat 可读的标记文件,并在 inode_markerpath 选项中设置路径。

此文件的内容对于设备必须是唯一的。您可以放置设备的 UUID 或存储输入的挂载点的 UUID。以下示例单行代码为选定的挂载点 /logs 生成一个隐藏的标记文件:请注意,您不应在 Windows 上使用此选项,因为文件标识符可能更容易发生变化。

选择 fingerprint 会指示 Filebeat 根据文件的内容字节范围来识别文件。

要使用此文件标识选项,必须启用 扫描器中的 fingerprint 选项。启用此文件标识后,更改 fingerprint 配置(偏移量、长度等)将导致全局重新提取与输入的 paths 配置匹配的所有文件。

有关详细信息,请参阅 fingerprint 配置

$ lsblk -o MOUNTPOINT,UUID | grep /logs | awk '{print $2}' >> /logs/.filebeat-marker

要将生成的文件设置为 file_identity 的标记,您应该按以下方式配置输入

filebeat.inputs:
- type: filestream
  id: my-filestream-id
  paths:
    - /logs/*.log
  file_identity.inode_marker.path: /logs/.filebeat-marker

从轮换日志中读取编辑

处理文件轮换时,请避免获取符号链接。而是使用 paths 设置指向原始文件,并指定一个与您要获取的文件及其所有轮换文件匹配的模式。还要确保您的日志轮换策略可以防止消息丢失或重复。有关详细信息,请参阅 日志轮换导致事件丢失或重复

此外,为避免轮换日志消息重复,请勿对 file_identity 使用 path 方法。或者使用 exclude_files 选项排除轮换的文件。

Prospector 选项编辑

Prospector 正在运行一个文件系统监视器,该监视器查找 paths 选项中指定的文件。目前仅支持简单的文件系统扫描。

id编辑

此 filestream 输入的唯一标识符。每个 filestream 输入都必须有一个唯一的 ID。

更改输入 ID 可能会导致数据重复,因为文件的状态将丢失,并且将从头开始重新读取文件。

paths编辑

将被抓取和获取的基于 glob 的路径列表。 Go Glob 支持的所有模式在这里也受支持。例如,要从预定义级别的子目录中获取所有文件,可以使用以下模式:/var/log/*/*.log。这将从 /var/log 的子文件夹中获取所有 .log 文件。它不会从 /var/log 文件夹本身获取日志文件。可以使用可选的 recursive_glob 设置递归获取目录所有子目录中的所有文件。

Filebeat 会为其在指定路径下找到的每个文件启动一个收集器。您可以每行指定一个路径。每行以短划线 (-) 开头。

扫描器选项编辑

扫描器监视已配置的路径。它会定期扫描文件系统,并将文件系统事件返回给 Prospector。

prospector.scanner.recursive_glob编辑

启用将 ** 扩展为递归 glob 模式。启用此功能后,每个路径中最右侧的 ** 将扩展为固定数量的 glob 模式。例如:/foo/** 扩展为 /foo/foo/*/foo/*/*,依此类推。如果启用,它会将单个 ** 扩展为 8 级深的 * 模式。

默认情况下启用此功能。将 prospector.scanner.recursive_glob 设置为 false 以禁用它。

prospector.scanner.exclude_files编辑

正则表达式列表,用于匹配您希望 Filebeat 忽略的文件。默认情况下,不会排除任何文件。

以下示例将 Filebeat 配置为忽略所有扩展名为 gz 的文件

filebeat.inputs:
- type: filestream
  ...
  prospector.scanner.exclude_files: ['\.gz$']

有关受支持的正则表达式模式列表,请参阅 正则表达式支持

prospector.scanner.include_files编辑

正则表达式列表,用于匹配您希望 Filebeat 包含的文件。如果提供了正则表达式列表,则仅获取模式允许的文件。

默认情况下,不会排除任何文件。此选项与 prospector.scanner.exclude_files 相反。

以下示例将 Filebeat 配置为排除不在 /var/log 下的文件

filebeat.inputs:
- type: filestream
  ...
  prospector.scanner.include_files: ['^/var/log/.*']

对于绝对路径,模式应以 ^ 开头。

有关受支持的正则表达式模式列表,请参阅 正则表达式支持

prospector.scanner.symlinks编辑

symlinks 选项允许 Filebeat 除了获取常规文件外,还可以获取符号链接。获取符号链接时,即使 Filebeat 报告的是符号链接的路径,它也会打开并读取原始文件。

为采集配置符号链接时,请确保排除原始路径。如果将单个输入配置为同时采集符号链接和原始文件,Filebeat 将会检测到该问题,并且仅处理它找到的第一个文件。但是,如果配置了两个不同的输入(一个用于读取符号链接,另一个用于读取原始路径),则将采集这两个路径,导致 Filebeat 发送重复数据,并且输入会覆盖彼此的状态。

如果指向日志文件的符号链接的文件名中包含其他元数据,并且您想在 Logstash 中处理元数据,则 symlinks 选项可能会有用。例如,Kubernetes 日志文件就是这种情况。

由于此选项可能会导致数据丢失,因此默认情况下禁用此选项。

prospector.scanner.resend_on_touch编辑

如果启用此选项,则在文件大小未更改但修改时间更改为比以前更晚的时间时,会重新发送该文件。默认情况下禁用此选项,以避免意外重新发送文件。

prospector.scanner.check_interval编辑

Filebeat 检查指定用于采集的路径中是否有新文件的频率。例如,如果您指定了类似 /var/log/* 的通配符,则会使用 check_interval 指定的频率扫描目录中的文件。指定 1s 以尽可能频繁地扫描目录,而不会导致 Filebeat 扫描过于频繁。我们不建议将此值设置为 <1s

如果您需要近乎实时地发送日志行,请不要使用非常低的 check_interval,而是调整 close.on_state_change.inactive,以便文件处理程序保持打开状态并不断轮询您的文件。

默认设置为 10 秒。

prospector.scanner.fingerprint编辑

比较文件时,不依赖于设备 ID 和 inode 值,而是比较给定字节范围内的文件哈希值。

如果由于文件系统提供的文件标识符不稳定而导致数据丢失或数据重复,请启用此选项。

以下是一些可能发生这种情况的情况

  1. 某些文件系统(例如 Docker 中的文件系统)会缓存和重复使用 inode

    例如,如果您

    1. 创建一个文件(touch x
    2. 检查文件的 inode(ls -i x
    3. 删除文件(rm x
    4. 立即创建一个新文件(touch y
    5. 检查新文件的 inode(ls -i y

      对于这两个文件,即使文件名不同,您也可能会看到相同的 inode 值。

  2. 非 Ext 文件系统可以更改 inode

    Ext 文件系统将 inode 号存储在 i_ino 文件中,该文件位于写入磁盘的结构 inode 中。在这种情况下,如果文件相同(不是另一个同名文件),则可以保证 inode 号相同。

    如果文件系统不是 Ext,则 inode 号由文件系统驱动程序定义的 inode 操作生成。由于它们没有 inode 的概念,因此它们必须模仿所有 inode 的内部字段以符合 VFS,因此即使在重新启动后、甚至在再次关闭并打开文件后(理论上),此编号也可能会有所不同。

  3. 某些文件处理工具会更改 inode 值

    有时,用户会使用 rsyncsed 等工具无意中更改 inode。

  4. 某些操作系统会在重新启动后更改设备 ID

    根据挂载方式,设备 ID(也用于比较文件)可能会在重新启动后发生更改。

配置

默认情况下,指纹模式处于禁用状态。

启用指纹模式会延迟提取新文件,直到它们的大小至少达到 offset+length 字节,以便可以对其进行指纹识别。在此之前,将忽略这些文件。

通常,日志行包含时间戳和其他唯一字段,这些字段应该能够使用指纹模式,但在每个用例中,用户都应该检查其日志,以确定 offsetlength 参数的适当值。默认 offset0,默认 length1024 或 1 KB。length 不能小于 64

fingerprint:
  enabled: false
  offset: 0
  length: 1024
ignore_older编辑

如果启用此选项,Filebeat 将忽略在指定时间段之前修改的所有文件。如果您长时间保留日志文件,则配置 ignore_older 特别有用。例如,如果您想启动 Filebeat,但只想发送最新的文件和上周的文件,则可以配置此选项。

您可以使用时间字符串,例如 2h(2 小时)和 5m(5 分钟)。默认值为 0,表示禁用该设置。注释掉该配置与将其设置为 0 具有相同的效果。

您必须将 ignore_older 设置为大于 close.on_state_change.inactive

受此设置影响的文件分为两类

  • 从未采集过的文件
  • 已采集但未更新超过 ignore_older 的文件

对于以前从未见过的文件,偏移量状态设置为文件的末尾。如果状态已存在,则偏移量将重置为文件的大小。如果稍后再次更新文件,则读取将从设置的偏移量位置继续。

ignore_older 设置依赖于文件的修改时间来确定是否忽略文件。如果将行写入文件时未更新文件的修改时间(这在 Windows 上可能会发生),则 ignore_older 设置可能会导致 Filebeat 忽略文件,即使在稍后时间添加了内容也是如此。

要从注册表文件中删除先前采集的文件的状态,请使用 clean_inactive 配置选项。

在 Filebeat 可以忽略文件之前,必须先关闭该文件。要确保在忽略文件时不再采集该文件,您必须将 ignore_older 设置为比 close.on_state_change.inactive 更长的持续时间。

如果当前正在采集的文件属于 ignore_older,则采集器将首先完成文件的读取,并在达到 close.on_state_change.inactive 后关闭该文件。然后,在那之后,该文件将被忽略。

ignore_inactive编辑

如果启用此选项,Filebeat 将忽略自选定时间以来未更新的每个文件。可能的选项是 since_first_startsince_last_start。第一个选项忽略自 Filebeat 首次启动以来未更新的每个文件。当 Beat 可能由于配置更改或故障而重新启动时,此选项很有用。第二个选项告诉 Beat 从自其启动以来已更新的文件中读取。

受此设置影响的文件分为两类

  • 从未采集过的文件
  • 已采集但自 ignore_inactive 以来未更新的文件。

对于以前从未见过的文件,偏移量状态设置为文件的末尾。如果状态已存在,则偏移量不会更改。如果稍后再次更新文件,则读取将从设置的偏移量位置继续。

该设置依赖于文件的修改时间来确定是否忽略文件。如果将行写入文件时未更新文件的修改时间(这在 Windows 上可能会发生),则该设置可能会导致 Filebeat 忽略文件,即使在稍后时间添加了内容也是如此。

要从注册表文件中删除先前采集的文件的状态,请使用 clean_inactive 配置选项。

take_over编辑

如果将 take_over 设置为 true,则如果文件至少与 filestream 中设置的 paths 中的一个匹配,则此 filestream 将接管 log 输入中的所有文件。

take_over: true 要求 filestream 具有唯一的 ID。

创建此 take over 模式是为了实现从已弃用的 log 输入到新的 filestream 输入的顺利迁移。

有关迁移过程的更多详细信息,请参阅log 输入配置迁移到 filestream

take over 模式仍处于测试阶段,但是,由于在 registry.path/filebeat 目录 中创建了备份,因此可以手动恢复,并且通常可以安全使用。

close.*编辑

close.* 配置选项用于在满足特定条件或时间后关闭采集器。关闭采集器意味着关闭文件处理程序。如果在关闭采集器后更新了文件,则在 prospector.scanner.check_interval 过去后,将再次拾取该文件。但是,如果在关闭采集器时移动或删除了文件,Filebeat 将无法再次拾取该文件,并且采集器尚未读取的任何数据都将丢失。

close.on_state_change.* 设置异步应用于从文件中读取,这意味着如果 Filebeat 由于输出阻塞、队列已满或其他问题而处于阻塞状态,则无论如何都会关闭文件。

close.on_state_change.inactive编辑

启用此选项后,如果在指定的持续时间内未采集文件,Filebeat 将关闭文件句柄。定义的周期计数器在采集器读取最后一行日志时启动。它不基于文件的修改时间。如果已关闭的文件再次发生更改,则会启动新的采集器,并在 prospector.scanner.check_interval 过去后拾取最新的更改。

我们建议您将 close.on_state_change.inactive 设置为一个大于日志文件最不频繁更新频率的值。例如,如果您的日志文件每隔几秒更新一次,您可以安全地将 close.on_state_change.inactive 设置为 1m。如果日志文件的更新频率差异很大,您可以使用具有不同值的多个配置。

close.on_state_change.inactive 设置为较低的值意味着文件句柄会更快关闭。但是,这会产生副作用,如果收集器关闭,则不会实时发送新的日志行。

关闭文件的时间戳不依赖于文件的修改时间。相反,Filebeat 使用一个内部时间戳,该时间戳反映了文件上次被采集的时间。例如,如果 close.on_state_change.inactive 设置为 5 分钟,则 5 分钟的倒计时将在收集器读取文件的最后一行后开始。

您可以使用时间字符串,例如 2h(2 小时)和 5m(5 分钟)。默认值为 5m。

close.on_state_change.renamed编辑

仅当您了解数据丢失是潜在的副作用时,才使用此选项。

启用此选项后,当文件重命名时,Filebeat 会关闭文件句柄。例如,在轮换文件时会发生这种情况。默认情况下,收集器保持打开状态并继续读取文件,因为文件句柄不依赖于文件名。如果启用了 close.on_state_change.renamed 选项,并且文件被重命名或移动,导致其不再与 指定的文件模式匹配,则该文件将不会再次被拾取。Filebeat 将不会完成读取该文件。

当配置了基于 pathfile_identity 时,请勿使用此选项。启用该选项是没有意义的,因为 Filebeat 无法使用路径名作为唯一标识符来检测重命名。

WINDOWS:如果您的 Windows 日志轮换系统显示错误,因为它无法轮换文件,则应启用此选项。

close.on_state_change.removed编辑

启用此选项后,当文件被删除时,Filebeat 会关闭收集器。通常,只有在文件处于非活动状态的时间超过 close.on_state_change.inactive 指定的时间后,才应删除该文件。但是,如果文件提前删除,并且您没有启用 close.on_state_change.removed,则 Filebeat 会保持文件打开状态,以确保收集器已完成。如果此设置导致文件未被完全读取,因为它们过早地从磁盘中删除,请禁用此选项。

默认情况下启用此选项。如果禁用此选项,则还必须禁用 clean_removed

WINDOWS:如果您的 Windows 日志轮换系统显示错误,因为它无法轮换文件,请确保已启用此选项。

close.reader.on_eof编辑

仅当您了解数据丢失是潜在的副作用时,才使用此选项。

启用此选项后,Filebeat 会在到达文件末尾时立即关闭文件。当您的文件只写入一次且不会不时更新时,此选项非常有用。例如,当您将每个日志事件写入新文件时,就会发生这种情况。默认情况下禁用此选项。

close.reader.after_interval编辑

仅当您了解数据丢失是潜在的副作用时,才使用此选项。另一个副作用是,在超时到期之前,多行事件可能不会完全发送。

启用此选项后,Filebeat 会为每个收集器指定一个预定义的生命周期。无论读取器在文件中的哪个位置,读取操作都将在 close.reader.after_interval 时间段过后停止。当您只想在旧日志文件上花费预定义的时间时,此选项非常有用。虽然 close.reader.after_interval 会在预定义的超时时间后关闭文件,但如果文件仍在更新,Filebeat 将根据定义的 prospector.scanner.check_interval 再次启动一个新的收集器。并且,此收集器的 close.reader.after_interval 将再次开始超时倒计时。

如果输出被阻塞,则此选项特别有用,因为即使对于已从磁盘中删除的文件,Filebeat 也会保持打开文件句柄。将 close.reader.after_interval 设置为 5m 可确保定期关闭文件,以便操作系统可以释放它们。

如果将 close.reader.after_interval 设置为等于 ignore_older,则在收集器关闭时修改文件,则不会拾取该文件。这种设置组合通常会导致数据丢失,并且不会发送完整的文件。

对包含多行事件的日志使用 close.reader.after_interval 时,收集器可能会在多行事件的中间停止,这意味着只会发送事件的一部分。如果收集器再次启动且文件仍然存在,则只会发送事件的第二部分。

默认情况下,此选项设置为 0,这意味着它已禁用。

clean_*编辑

clean_* 选项用于清理注册表文件中的状态条目。这些设置有助于减小注册表文件的大小,并可以防止潜在的 inode 重用问题

clean_inactive编辑

仅当您了解数据丢失是潜在的副作用时,才使用此选项。

启用此选项后,Filebeat 会在指定的非活动时间段过后删除文件的状态。只有当 Filebeat 已经忽略该文件(文件早于 ignore_older)时,才能删除该状态。clean_inactive 设置必须大于 ignore_older + prospector.scanner.check_interval,以确保在仍在采集文件时不会删除任何状态。否则,该设置可能会导致 Filebeat 不断重新发送完整内容,因为 clean_inactive 会删除 Filebeat 仍在检测的文件的状态。如果文件被更新或再次出现,则会从头开始读取文件。

clean_inactive 配置选项可用于减小注册表文件的大小,尤其是在每天生成大量新文件的情况下。

此配置选项也可用于防止 Linux 上因 inode 重用而导致的 Filebeat 问题。有关更多信息,请参阅 inode 重用导致 Filebeat 跳过行

每次重命名文件时,都会更新文件状态,并且 clean_inactive 的计数器会再次从 0 开始。

在测试期间,您可能会注意到注册表包含应根据 clean_inactive 设置删除的状态条目。这是因为 Filebeat 在注册表垃圾收集器 (GC) 运行之前不会删除这些条目。一旦状态的 TTL 过期,并且该文件没有活动的收集器,则注册表 GC 会运行,然后并且只有在那时,才会从内存中删除该状态,并在注册表日志文件中添加 op: remove

clean_removed编辑

启用此选项后,如果在磁盘上再也找不到文件的最后一个已知名称,Filebeat 会从注册表中清除该文件。这意味着在收集器完成后重命名的文件也将被删除。默认情况下启用此选项。

如果共享驱动器在短时间内消失并再次出现,则所有文件将从头开始重新读取,因为状态已从注册表文件中删除。在这种情况下,我们建议您禁用 clean_removed 选项。

如果还禁用了 close.on_state_change.removed,则必须禁用此选项。

backoff.*编辑

退避选项指定 Filebeat 抓取打开文件以获取更新的频率。在大多数情况下,您可以使用默认值。

backoff.init编辑

backoff.init 选项定义 Filebeat 在到达 EOF 后第一次检查文件之前等待的时间。退避间隔呈指数级增长。默认值为 2 秒。因此,将在 2 秒后检查文件,然后是 4 秒,然后是 8 秒,依此类推,直到达到 backoff.max 中定义的限制。每次在文件中出现新行时,backoff.init 值都会重置为初始值。

backoff.max编辑

Filebeat 在到达 EOF 后再次检查文件之前的最长时间。在多次退避检查文件后,等待时间永远不会超过 backoff.max。因为读取新行最多需要 10 秒,所以为 backoff.max 指定 10 秒意味着,在最坏的情况下,如果 Filebeat 已经多次退避,则可能会向日志文件中添加新行。默认值为 10 秒。

要求:将 backoff.max 设置为大于或等于 backoff.init 且小于或等于 prospector.scanner.check_interval (backoff.init <= backoff.max <= prospector.scanner.check_interval)。如果 backoff.max 需要更高,则建议关闭文件句柄,并让 Filebeat 再次拾取该文件。

harvester_limit编辑

harvester_limit 选项限制为一个输入并行启动的收集器的数量。这直接关系到打开的文件句柄的最大数量。harvester_limit 的默认值为 0,这意味着没有限制。如果要采集的文件数量超过了操作系统的打开文件句柄限制,则此配置非常有用。

设置收集器数量的限制意味着可能不会并行打开所有文件。因此,我们建议您将此选项与 close.on_state_change.* 选项结合使用,以确保更频繁地停止收集器,以便可以拾取新文件。

目前,如果可以再次启动新的收集器,则会随机选择收集器。这意味着可能会启动刚刚关闭然后又更新的文件的收集器,而不是启动长时间未采集的文件的收集器。

此配置选项适用于每个输入。您可以通过分配更高的收集器限制来间接地对某些输入设置更高的优先级。

file_identity编辑

可以配置不同的 file_identity 方法,以适应收集日志消息的环境。

在运行之间更改 file_identity 方法可能会导致输出中出现重复事件。

native

Filebeat 的默认行为是使用索引节点和设备 ID 来区分文件。

在某些情况下,这些值可能会在文件的生命周期内发生变化。例如,在使用 Linux LVM(逻辑卷管理器)时,设备号是在模块加载时动态分配的(请参阅红帽企业 Linux 文档中的持久设备号)。为避免在这种情况下可能出现数据重复,您可以将 file_identity 设置为 path 而不是 native

file_identity.native: ~
path
要根据文件的路径标识文件,请使用此策略。

仅当您的日志文件被轮换到输入范围之外的文件夹或根本不轮换时,才使用此策略。否则,您最终会得到重复的事件。

此策略不支持重命名文件。如果输入文件被重命名,并且新路径与输入的设置匹配,则 Filebeat 将再次读取该文件。

file_identity.path: ~
inode_marker
如果设备 ID 经常更改,则必须使用此方法来区分文件。Windows 不支持此选项。

按以下方式设置标记文件的位置

file_identity.inode_marker.path: /logs/.filebeat-marker
fingerprint
根据内容字节范围识别文件。

要使用此文件标识选项,必须启用扫描器中的 fingerprint 选项。启用此文件标识后,更改指纹配置(偏移量、长度或其他设置)将导致全局重新提取所有与输入的路径配置匹配的文件。

有关详细信息,请参阅 fingerprint 配置

file_identity.fingerprint: ~

日志轮换编辑

由于日志文件是不断写入的,因此必须对它们进行轮换和清除,以防止记录器应用程序填满磁盘。轮换由外部应用程序完成,因此,Filebeat 需要有关如何与其协作的信息。

从轮换文件中读取时,请确保路径配置包含活动文件和所有轮换文件。

默认情况下,Filebeat 能够在以下策略中正确跟踪文件:* create:轮换时创建具有唯一名称的新活动文件 * rename:轮换的文件被重命名

但是,如果是 copytruncate 策略,则应为 Filebeat 提供其他配置。

rotation.external.strategy.copytruncate编辑

此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能支持 SLA 的约束。

如果日志轮换应用程序复制活动文件的内容然后截断原始文件,请使用以下选项来帮助 Filebeat 正确读取文件。

设置选项 suffix_regex,以便 Filebeat 可以区分活动文件和轮换文件。输入中有两种受支持的后缀类型:数字和日期。

数字后缀编辑

如果您的轮换文件名末尾附加了递增索引,例如活动文件 apache.log,而轮换文件名为 apache.log.1apache.log.2 等,请使用以下配置。

---
rotation.external.strategy.copytruncate:
  suffix_regex: \.\d$
---

日期后缀编辑

如果轮换日期附加到文件名末尾,例如活动文件 apache.log,而轮换文件名为 apache.log-20210526apache.log-20210527 等,请使用以下配置

---
rotation.external.strategy.copytruncate:
  suffix_regex: \-\d{6}$
  dateformat: -20060102
---
encoding编辑

用于读取包含国际字符的数据的文件编码。请参阅W3C 建议在 HTML5 中使用的编码名称

有效的编码

  • plain:纯 ASCII 编码
  • utf-8utf8:UTF-8 编码
  • gbk:简体中文字符
  • iso8859-6e:ISO8859-6E,拉丁语/阿拉伯语
  • iso8859-6i:ISO8859-6I,拉丁语/阿拉伯语
  • iso8859-8e:ISO8859-8E,拉丁语/希伯来语
  • iso8859-8i:ISO8859-8I,拉丁语/希伯来语
  • iso8859-1:ISO8859-1,Latin-1
  • iso8859-2:ISO8859-2,Latin-2
  • iso8859-3:ISO8859-3,Latin-3
  • iso8859-4:ISO8859-4,Latin-4
  • iso8859-5:ISO8859-5,拉丁语/西里尔语
  • iso8859-6:ISO8859-6,拉丁语/阿拉伯语
  • iso8859-7:ISO8859-7,拉丁语/希腊语
  • iso8859-8:ISO8859-8,拉丁语/希伯来语
  • iso8859-9:ISO8859-9,Latin-5
  • iso8859-10:ISO8859-10,Latin-6
  • iso8859-13:ISO8859-13,Latin-7
  • iso8859-14:ISO8859-14,Latin-8
  • iso8859-15:ISO8859-15,Latin-9
  • iso8859-16:ISO8859-16,Latin-10
  • cp437:IBM CodePage 437
  • cp850:IBM CodePage 850
  • cp852:IBM CodePage 852
  • cp855:IBM CodePage 855
  • cp858:IBM CodePage 858
  • cp860:IBM CodePage 860
  • cp862:IBM CodePage 862
  • cp863:IBM CodePage 863
  • cp865:IBM CodePage 865
  • cp866:IBM CodePage 866
  • ebcdic-037:IBM CodePage 037
  • ebcdic-1040:IBM CodePage 1140
  • ebcdic-1047:IBM CodePage 1047
  • koi8r:KOI8-R,俄语(西里尔语)
  • koi8u:KOI8-U,乌克兰语(西里尔语)
  • macintosh:Macintosh 编码
  • macintosh-cyrillic:Macintosh 西里尔语编码
  • windows1250:Windows1250,中欧和东欧语言
  • windows1251:Windows1251,俄语,塞尔维亚语(西里尔语)
  • windows1252:Windows1252,旧版
  • windows1253:Windows1253,现代希腊语
  • windows1254:Windows1254,土耳其语
  • windows1255:Windows1255,希伯来语
  • windows1256:Windows1256,阿拉伯语
  • windows1257:Windows1257,爱沙尼亚语、拉脱维亚语、立陶宛语
  • windows1258:Windows1258,越南语
  • windows874:Windows874,ISO/IEC 8859-11,拉丁语/泰语
  • utf-16-bom:带有所需 BOM 的 UTF-16
  • utf-16be-bom:带有所需 BOM 的大端序 UTF-16
  • utf-16le-bom:带有所需 BOM 的小端序 UTF-16

plain 编码比较特殊,因为它不验证或转换任何输入。

exclude_lines编辑

一个正则表达式列表,用于匹配您希望 Filebeat 排除的行。Filebeat 会丢弃与列表中正则表达式匹配的任何行。默认情况下,不会丢弃任何行。空行将被忽略。

以下示例将 Filebeat 配置为丢弃以 DBG 开头的任何行。

filebeat.inputs:
- type: filestream
  ...
  exclude_lines: ['^DBG']

有关受支持的正则表达式模式列表,请参阅 正则表达式支持

include_lines编辑

一个正则表达式列表,用于匹配您希望 Filebeat 包含的行。Filebeat 仅导出与列表中正则表达式匹配的行。默认情况下,将导出所有行。空行将被忽略。

以下示例将 Filebeat 配置为导出以 ERRWARN 开头的任何行

filebeat.inputs:
- type: filestream
  ...
  include_lines: ['^ERR', '^WARN']

如果同时定义了 include_linesexclude_lines,Filebeat 将首先执行 include_lines,然后执行 exclude_lines。这两个选项的定义顺序无关紧要。include_lines 选项将始终在 exclude_lines 选项之前执行,即使 exclude_lines 出现在配置文件中的 include_lines 之前也是如此。

以下示例导出包含 sometext 的所有日志行,但以 DBG(调试消息)开头的行除外

filebeat.inputs:
- type: filestream
  ...
  include_lines: ['sometext']
  exclude_lines: ['^DBG']

有关受支持的正则表达式模式列表,请参阅 正则表达式支持

buffer_size编辑

每个采集器在获取文件时使用的缓冲区大小(以字节为单位)。默认为 16384。

message_max_bytes编辑

单个日志消息可以具有的最大字节数。message_max_bytes 之后的 所有字节都将被丢弃且不会发送。默认值为 10MB(10485760)。

parsers编辑

此选项需要一个解析器列表,日志行必须经过这些解析器。

可用的解析器

  • multiline
  • ndjson
  • container
  • syslog

在此示例中,Filebeat 正在读取多行消息,这些消息由 3 行组成,并封装在单行 JSON 对象中。多行消息存储在键 msg 下。

filebeat.inputs:
- type: filestream
  ...
  parsers:
    - ndjson:
        target: ""
        message_key: msg
    - multiline:
        type: count
        count_lines: 3

请参阅下文详细了解可用的解析器设置。

multiline编辑

控制 Filebeat 如何处理跨越多行的日志消息的选项。有关配置多行选项的更多信息,请参阅多行消息

ndjson编辑

这些选项使 Filebeat 能够解码结构化为 JSON 消息的日志。Filebeat 逐行处理日志,因此只有在每条消息包含一个 JSON 对象的情况下,JSON 解码才能正常工作。

解码在行过滤之前进行。如果设置了 message_key 选项,则可以将 JSON 解码与过滤结合使用。当应用程序日志包装在 JSON 对象中时(例如使用 Docker 时),这非常有用。

配置示例

- ndjson:
    target: ""
    add_error_key: true
    message_key: log
target
应包含已解析键值对的新 JSON 对象的名称。如果将其保留为空,则新键将位于根目录下。
overwrite_keys
如果发生冲突,则解码后的 JSON 对象中的值将覆盖 Filebeat 通常添加的字段(类型、来源、偏移量等)。如果要保留之前添加的值,请禁用它。
expand_keys
如果启用此设置,Filebeat 将递归地取消解码后的 JSON 中的点连接键,并将它们扩展为分层对象结构。例如,{"a.b.c": 123} 将被扩展为 {"a":{"b":{"c":123}}}。当输入由ECS 记录器生成时,应启用此设置。
add_error_key
如果启用此设置,则在 JSON 反序列化错误或在配置中定义了 message_key 但无法使用时,Filebeat 会添加 "error.message" 和 "error.type: json" 键。
message_key
一个可选的配置设置,用于指定应用行筛选和多行设置的 JSON 键。如果指定,则该键必须位于 JSON 对象的顶层,并且与该键关联的值必须是字符串,否则不会进行任何筛选或多行聚合。
document_id
可选的配置设置,用于指定用于设置文档 ID 的 JSON 键。如果配置了此选项,则该字段将从原始 JSON 文档中删除,并存储在 @metadata._id 中。
ignore_decoding_error
一个可选的配置设置,用于指定是否应记录 JSON 解码错误。如果设置为 true,则不会记录错误。默认值为 false。
container编辑

使用 container 解析器从容器日志文件中提取信息。它将行解析为常见的消息行,并提取时间戳。

stream
仅从指定的流中读取:allstdoutstderr。默认值为 all
format
解析日志时使用给定的格式:autodockercri。默认值为 auto,它将自动检测格式。要禁用自动检测,请设置任何其他选项。

以下代码段配置 Filebeat 以从默认 Kubernetes 日志路径下的所有容器中读取 stdout 流。

  paths:
    - "/var/log/containers/*.log"
  parsers:
    - container:
        stream: stdout
syslog编辑

syslog 解析器解析 RFC 3146 和/或 RFC 5424 格式的系统日志消息。

支持的配置选项如下:

format
(可选)要使用的系统日志格式,rfc3164rfc5424。要从日志条目中自动检测格式,请将此选项设置为 auto。默认值为 auto
timezone
(可选)IANA 时区名称(例如 America/New York)或固定时间偏移量(例如 +0200),用于解析不包含时区的系统日志时间戳。可以指定 Local 以使用机器的本地时区。默认为 Local
log_errors
(可选)如果为 true,则解析器将记录系统日志解析错误。默认为 false
add_error_key
(可选)如果启用此设置,则解析器会添加或附加到 error.message 键,其中包含遇到的解析错误。默认为 true

配置示例

- syslog:
    format: rfc3164
    timezone: America/Chicago
    log_errors: true
    add_error_key: true

时间戳

RFC 3164 格式接受以下形式的时间戳:

  • 本地时间戳 (Mmm dd hh:mm:ss)

    • Jan 23 14:09:01
  • RFC-3339*

    • 2003-10-11T22:14:15Z
    • 2003-10-11T22:14:15.123456Z
    • 2003-10-11T22:14:15-06:00
    • 2003-10-11T22:14:15.123456-06:00

**注意**:RFC 3164 消息附带的本地时间戳(例如,Jan 23 14:09:01)缺少年份和时区信息。时区将使用 timezone 配置选项进行补充,年份将使用 Filebeat 系统的本地时间(考虑时区)进行补充。因此,消息可能会出现在未来。例如,在 2021 年 12 月 31 日生成的日志在 2022 年 1 月 1 日被摄取。日志的年份将被补充为 2022 年,而不是 2021 年。

RFC 5424 格式接受以下形式的时间戳:

  • RFC-3339

    • 2003-10-11T22:14:15Z
    • 2003-10-11T22:14:15.123456Z
    • 2003-10-11T22:14:15-06:00
    • 2003-10-11T22:14:15.123456-06:00

带星号 (*) 的格式是非标准的允许格式。

include_message编辑

使用 include_message 解析器在解析器管道中过滤消息。与提供的模式匹配的消息将传递到下一个解析器,其他消息将被丢弃。

如果要控制过滤发生的时间,则应使用 include_message 而不是 include_linesinclude_lines 在解析器之后运行,include_message 在解析器管道中运行。

patterns
要匹配的正则表达式模式列表。

此示例显示如何包含以字符串 ERR 或 WARN 开头的消息。

  paths:
    - "/var/log/containers/*.log"
  parsers:
    - include_message.patterns: ["^ERR", "^WARN"]

指标编辑

此输入在 HTTP 监控端点 下公开指标。这些指标在 /inputs 路径下公开。它们可用于观察输入的活动。

指标 描述

files_opened_total

打开的文件总数。

files_closed_total

关闭的文件总数。

files_active

当前打开的文件数(仪表)。

messages_read_total

读取的消息总数。

bytes_processed_total

处理的字节总数。

events_processed_total

处理的事件总数。

processing_errors_total

处理错误总数。

processing_time

处理消息所花费的时间的直方图(以纳秒表示)。

注意

通用选项编辑

所有输入都支持以下配置选项。

enabled编辑

使用 enabled 选项启用和禁用输入。默认情况下,enabled 设置为 true。

tags编辑

Filebeat 包含在每个已发布事件的 tags 字段中的标签列表。标签可以轻松地在 Kibana 中选择特定事件或在 Logstash 中应用条件过滤。这些标签将附加到常规配置中指定的标签列表中。

示例

filebeat.inputs:
- type: filestream
  . . .
  tags: ["json"]
fields编辑

您可以指定可选字段,以向输出添加其他信息。例如,您可以添加可用于过滤日志数据的字段。字段可以是标量值、数组、字典或这些类型的任何嵌套组合。默认情况下,您在此处指定的字段将分组在输出文档中的 fields 子字典下。要将自定义字段存储为顶级字段,请将 fields_under_root 选项设置为 true。如果在常规配置中声明了重复字段,则其值将被此处声明的值覆盖。

filebeat.inputs:
- type: filestream
  . . .
  fields:
    app_id: query_engine_12
fields_under_root编辑

如果此选项设置为 true,则自定义 字段 将作为顶级字段存储在输出文档中,而不是分组在 fields 子字典下。如果自定义字段名称与 Filebeat 添加的其他字段名称冲突,则自定义字段将覆盖其他字段。

processors编辑

要应用于输入数据的处理器列表。

有关在配置中指定处理器的信息,请参阅 _处理器_

pipeline编辑

要为此输入生成的事件设置的摄取管道 ID。

管道 ID 也可以在 Elasticsearch 输出中配置,但此选项通常会导致配置文件更简单。如果在输入和输出中都配置了管道,则使用输入中的选项。

keep_null编辑

如果此选项设置为 true,则值为 null 的字段将在输出文档中发布。默认情况下,keep_null 设置为 false

index编辑

如果存在,则此格式字符串将覆盖此输入的事件的索引(对于 elasticsearch 输出),或设置事件元数据的 raw_index 字段(对于其他输出)。此字符串只能引用代理名称和版本以及事件时间戳;要访问动态字段,请使用 output.elasticsearch.index 或处理器。

示例值:"%{[agent.name]}-myindex-%{+yyyy.MM.dd}" 可能会扩展为 "filebeat-myindex-2019.11.01"

publisher_pipeline.disable_host编辑

默认情况下,所有事件都包含 host.name。可以将此选项设置为 true 以禁用将此字段添加到所有事件中。默认值为 false