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 基于文件节点和设备 ID 识别文件。但是,在网络共享和云提供商上,这些值在文件的生命周期中可能会发生变化。如果发生这种情况,Filebeat 会认为文件是新的,并重新发送文件的全部内容。要解决此问题,您可以配置 file_identity 选项。除了默认的 inode_deviceid 之外,可能的取值还有 pathinode_markerfingerprint

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

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

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

此文件的内容必须对设备唯一。您可以放置设备或输入存储的挂载点的 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 设置指向原始文件,并指定一个与您要收集的文件及其所有轮换文件匹配的模式。还要确保您的日志轮换策略可以防止丢失或重复的消息。有关更多信息,请参阅 日志轮换导致丢失或重复事件

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

Prospector 选项

编辑

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

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

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

paths
编辑

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

Filebeat 为其在指定路径下找到的每个文件启动一个 harvester。您可以在每行指定一个路径。每行以破折号 (-) 开头。

扫描程序选项

编辑

扫描程序监视已配置的路径。它定期扫描文件系统并将文件系统事件返回给 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 指定的频率扫描目录以查找文件。指定 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 将接管来自 log 输入的所有文件,前提是它们至少匹配 filestream 中设置的 paths 之一。

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.*
编辑

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_limit的默认值为 0,这意味着没有限制。如果要采集的文件数量超过操作系统的打开文件句柄限制,则此配置很有用。

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

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

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

file_identity
编辑

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

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

native

Filebeat 的默认行为是使用文件节点和设备 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
要根据文件内容字节范围标识文件。

为了使用此文件标识选项,您必须启用扫描程序中的 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,拉丁语-1
  • iso8859-2:ISO8859-2,拉丁语-2
  • iso8859-3:ISO8859-3,拉丁语-3
  • iso8859-4:ISO8859-4,拉丁语-4
  • iso8859-5:ISO8859-5,拉丁语/西里尔语
  • iso8859-6:ISO8859-6,拉丁语/阿拉伯语
  • iso8859-7:ISO8859-7,拉丁语/希腊语
  • iso8859-8:ISO8859-8,拉丁语/希伯来语
  • iso8859-9:ISO8859-9,拉丁语-5
  • iso8859-10:ISO8859-10,拉丁语-6
  • iso8859-13:ISO8859-13,拉丁语-7
  • iso8859-14:ISO8859-14,拉丁语-8
  • iso8859-15:ISO8859-15,拉丁语-9
  • iso8859-16:ISO8859-16,拉丁语-10
  • cp437:IBM 代码页 437
  • cp850:IBM 代码页 850
  • cp852:IBM 代码页 852
  • cp855:IBM 代码页 855
  • cp858:IBM 代码页 858
  • cp860:IBM 代码页 860
  • cp862:IBM 代码页 862
  • cp863:IBM 代码页 863
  • cp865:IBM 代码页 865
  • cp866:IBM 代码页 866
  • ebcdic-037:IBM 代码页 037
  • ebcdic-1040:IBM 代码页 1140
  • ebcdic-1047:IBM 代码页 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
如果启用此设置,Filebeat 会在发生 JSON 反序列化错误或在配置中定义了 message_key 但无法使用时添加“error.message”和“error.type: json”键。
message_key
一个可选的配置设置,指定要应用行过滤和多行设置的 JSON 键。如果指定,则该键必须位于 JSON 对象的顶层,并且与该键关联的值必须是字符串,否则不会发生任何过滤或多行聚合。
document_id
指定 JSON 键以设置文档 ID 的选项配置设置。如果配置,则该字段将从原始 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)或要用于解析不包含时区的 syslog 时间戳的固定时间偏移量(例如 +0200)。可以指定 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 将存储为输出文档中的顶级字段,而不是分组在 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