filestream 输入

编辑

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

  1. close.on_state_change.* 选项的检查是带外进行的。因此,如果输出被阻塞,Filebeat 可以关闭读取器,避免保持打开过多的文件。
  2. 详细的指标可用于所有匹配 paths 配置的文件,而不管 harvester_limit 如何。这样,您就可以跟踪所有文件,即使是那些未被主动读取的文件。
  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 可能会更改,这是一种避免重新读取文件的快速方法。但是,请记住,如果文件被轮换(重命名),它们将被重新读取和重新提交。

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

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

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

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

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

$ 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 选项中指定的文件。目前仅支持简单的文件系统扫描。

此 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/* 的 glob,则会使用 check_interval 指定的频率扫描目录中的文件。指定 1 秒以尽可能频繁地扫描目录,而不会导致 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 号存储在 struct inode 内的 i_ino 文件中,该文件被写入磁盘。在这种情况下,如果文件相同(不是另一个具有相同名称的文件),则保证 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 将接管 log 输入中的所有文件,前提是这些文件与 filestream 中设置的至少一个 paths 匹配。

take_over: true 需要 filestream 具有唯一 ID。

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

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

take over 模式仍处于 beta 阶段,但是由于在 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 分钟)之类的时间字符串。默认值为 5 分钟。

close.on_state_change.renamed
编辑

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

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

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

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

close.on_state_change.removed
编辑

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

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

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

close.reader.on_eof
编辑

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

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

close.reader.after_interval
编辑

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

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

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

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

当您将 close.reader.after_interval 用于包含多行事件的日志时,harvester 可能会在多行事件的中间停止,这意味着只会发送事件的部分内容。如果 harvester 再次启动并且文件仍然存在,则只会发送事件的第二部分。

此选项默认为 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 过期,就没有该文件的活动 harvester,并且注册表 GC 运行,那么,并且只有那时,状态才会从内存中删除,并且将 op: remove 添加到注册表日志文件中。

clean_removed
编辑

启用此选项后,如果 Filebeat 无法在磁盘上找到以最后已知名称命名的文件,则会从注册表中清理这些文件。这也意味着在 harvester 完成后重命名的文件将被删除。默认情况下启用此选项。

如果共享驱动器短暂消失后又重新出现,所有文件都将从头开始重新读取,因为状态已从注册表文件中删除。在这种情况下,我们建议您禁用 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_intervalbackoff.init <= backoff.max <= prospector.scanner.check_interval)。如果 backoff.max 需要更高,建议关闭文件句柄,让 Filebeat 再次拾取该文件。

harvester_limit
编辑

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

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

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

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

file_identity
编辑

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

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

native

Filebeat 的默认行为是使用文件的 inode 和设备 ID 来区分文件。

在某些情况下,这些值在文件的生命周期内可能会发生变化。例如,当使用 Linux LVM (逻辑卷管理器) 时,设备号在模块加载时动态分配(请参阅 Red Hat Enterprise 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
要根据其内容字节范围识别文件。

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

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

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
  • include_message

在此示例中,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 格式的 syslog 消息。

支持的配置选项包括

format
(可选)要使用的 syslog 格式,rfc3164rfc5424。要从日志条目中自动检测格式,请将此选项设置为 auto。默认值为 auto
timezone
(可选)IANA 时区名称(例如 America/New York)或固定时间偏移量(例如 +0200),用于解析不包含时区的 syslog 时间戳。Local 可以指定为使用机器的本地时区。默认为 Local
log_errors
(可选)如果 true,则解析器将记录 syslog 解析错误。默认为 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
编辑

为此输入生成的事件设置的 Ingest 管道 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