filestream.md

通过参考和对比大量的相关资料,我在这里先对背压(Backpressure)做一个明确的定义:背压是指在异步场景中,被观察者发送事件速度远快于观察者的处理速度的情况下,一种告诉上游的被观察者降低发送速度的策略

简而言之,背压是流速控制的一种策略。

需要强调两点:

背压策略的一个前提是异步环境,也就是说,被观察者和观察者处在不同的线程环境中。
背压(Backpressure)并不是一个像flatMap一样可以在程序中直接使用的操作符,他只是一种控制事件流速的策略。
那么我们再回看上面的程序异常就很好理解了,就是当被观察者发送事件速度过快的情况下,我们没有做流速控制,导致了异常。

作者:拉丁吴
链接:https://www.jianshu.com/p/2c4799fa91a4
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

  • close_*选项的检查与数据收集并行运行。这样,即使系统中存在背压,输入也可以停止 havester。
  • 无论harvester_limit设置多少,匹配paths配置的所有文件都可以使用详细的指标。这样,您可以跟踪所有文件,即使是未主动读取的文件。
  • parsers的顺序是可配置的。因此,可以解析JSON行,然后将内容聚合到多行事件中。
  • 一些位置更新和元数据更改不再依赖于publishing pipeline。如果管道被阻塞,一些更改仍将应用于注册表。
  • 只有最近的更新才序列化到注册表。相反,log类型输入必须序列化输出中每个确认字符上的完整注册表。这使得使用此filestream更新注册表更快。
  • 输入确保仅将偏移量更新写入注册表仅附加日志。日志写入完整的文件状态。
  • 即使没有活跃的输入,也可以从注册表中删除过时的条目。

要配置此输入,请指定必须抓取以定位和获取日志行的基于全局的paths列表。

示例配置:

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

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

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

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

filebeat.inputs:
- type: filestream				# 从两个文件中获取行:system.log和wifi.log.  
  id: my-filestream-id
  paths:					
    - /var/log/system.log
    - /var/log/wifi.log	
- type: filestream 				# 从apache2目录中的每个文件中收集行,并使用`fields`配置选项将`apache`字段添加到输出中。
  id: apache-filestream-id
  paths:							
    - "/var/log/apache2/*"
  fields:
    apache: true

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

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

但是,如果您充分配置FileBeat,可以减轻这些数据源的限制之一。

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

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

path会指示FileBeat根据路径识别文件。如果索引节点和设备ID可能发生变化,这是避免重读文件的快速方法。但是,请记住,如果文件被轮换(重命名),它们将被重读并重新提交。

如果inode保持不变,即使设备id已更改,也可以使用选项inode_marker。如果您的文件被旋转,您应该选择此方法,而不是path(如果可能的话)。您必须配置一个可由FileBeat读取的标记文件,并在inode_marker的path选项中设置路径。

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

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

# 4ad94446-e5fe-4f55-881d-ab866c7fd367

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

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

读取轮换日志

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

此外,为避免重复轮换日志消息,不要使用路径方法file_identity。或者使用exclude_files选项排除旋转文件。

prospector 选项

prospector正在运行一个文件系统watcher,它会查找paths选项中指定的文件。目前只支持简单的文件系统扫描。

id

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

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

paths

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

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

scanner 选项

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

prospector.scanner.recursive_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/.*']		# 在绝对路径的情况下,模式应以^开头。

除了常规文件之外,符号链接选项允许FileBeat获取软链接。在获取软链接时,FileBeat会打开并读取原始文件。

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

如果日志文件的软链接在文件名中有额外的元数据,并且您想在Logstash中处理元数据,则符号链接选项会很有用。例如,k8s日志文件就是这种情况。

因为此选项可能会导致数据丢失,所以默认情况下它是禁用的。

prospector.scanner.resend_on_touch

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

prospector.scanner.check_interval

FileBeat检查指定用于收集的路径中的新文件的频率。例如,如果您指定 /var/log/* ,则使用check_interval指定的频率扫描目录中的文件。我们不建议将此值设置为<1s。

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

默认设置为10s。

ignore_older

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

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

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

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

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

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

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

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

在FileBeat忽略文件之前,必须关闭该文件。要确保文件在被忽略时不再被收集,您必须将ignore_older设置为超过close.on_state_change.inactive的持续时间。

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

ignore_inactive

如果启用此选项,FileBeat将忽略自所选时间以来未更新的每个文件。可能的选项since_first_startsince_last_start。第一个选项忽略自FileBeat第一次启动以来未更新的每个文件。当Beat可能由于配置更改或失败而重新启动时,它很有用。第二个选项告诉Beat读取自启动以来已更新的文件。

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

  • 从未收集的文件
  • 已收集但自ignore_inactive后未更新的文件。

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

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

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

close.*

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

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

close.on_state_change.inactive

启用此选项后,如果文件在指定的持续时间内没有被收集,FileBeat将关闭文件句柄。定义的时间段的计数器从收集器读取最后一个日志行时开始。它不基于文件的修改时间(mtime)。如果关闭的文件再次更改,将启动一个新的收集器,并在prospector.scanner.check_interval后获取最新的更改。

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

close.on_state_change.inactive设置为较低的值意味着文件句柄更快地关闭。然而,这有一个副作用,即如果收割机关闭,新的日志行不会近乎实时地发送。

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

您可以使用时间字符串,如 2h (2 hours) 和 5m (5 minutes)。默认值是 5m。

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.on_state_change.removed.

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

close.reader.on_eof

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

启用此选项后,FileBeat会在文件结束时立即关闭文件。当您的文件只写入一次并且不时更新时,这很有用。

例如,当您将每条日志事件都写入新文件。默认情况下禁用此选项。

close.reader.after_interval

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

启用此选项后,FileBeat将为每个harvester提供预定义的生存期。无论reader在文件中的位置如何,读取都将在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,如果文件在harvester关闭时被修改,则不会收集文件。这种设置组合通常会导致数据丢失,并且不会发送完整的文件。

当您使用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在再次打开注册表以读取不同的文件之前不会删除这些项。如果您正在测试clean_inactive设置,请确保FileBeat配置为从多个文件读取,否则文件状态将永远不会从注册表中删除。

clean_removed

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

有a.log, 文件删除后, harvester关闭, 注册表中删除这个文件

有a.log, 将其mv为b.log, 则最后一个已知名称就是b.log, 删除b.log后,harvester关闭,注册表中删除这个文件

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

如果禁用close_removed,则必须禁用此选项。

backoff.*

backoff 选项指定FileBeat如何积极地抓取打开的文件以进行更新。在大多数情况下,您可以使用默认值。

backoff.init

backoff.init 选项定义了在达到EOF(end of file)后,在再次检查文件之前,FileBeat第一次等待多长时间。

backoff 间隔呈指数增加。默认值为2s。因此,文件在2秒后被检查,然后是4秒,然后是8秒,以此类推,直到达到backoff.max中定义的限制。每次文件中出现新行时,backoff.init 值都会重置为初始值。

backoff.max

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

要求:

prospector.scanner.check_interval >= backoff.max >= backoff.init

如果backoff.max需要更高,建议改为关闭文件句柄(close.on_state_change.inactive),让FileBeat重新拾取文件。

file_identity

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

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

native

FileBeat的默认行为是使用文件的inode和设备id区分文件。

file_identity.native: ~

path

要根据文件的路径识别文件,请使用此策略。

warning:仅当您的日志文件被旋转到输入范围之外的文件夹或根本不旋转时才使用此策略。否则您最终会出现重复事件。

warning:此策略不支持重命名文件。如果重命名了输入文件,如果新路径与输入的设置匹配,Filebeat 将再次读取它。

file_identity.path: ~

inode_marker

如果设备id不时更改,则必须使用此方法来区分文件。Windows上不支持此选项。

通过以下方式设置标记文件的位置:

file_identity.inode_marker.path: /logs/.filebeat-marker

Log rotation

由于日志文件不断写入,因此必须旋转和清除它们。旋转是由外部应用程序完成的,因此,FileBeat需要如何与之协作的信息。

从旋转文件中读取时,请确保路径配置包括活动文件和所有旋转文件。

默认情况下,FileBeat能够通过以下策略正确跟踪文件:*创建:在旋转时创建具有唯一名称的新活动文件 *重命名:旋转文件被重命名

但是,在使用复制截断策略的情况下,您应该为FileBeat提供额外的配置。

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。两个选项定义的顺序无关紧要。

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

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

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

buffer_size

每个harvester 在获取文件时使用的缓冲区的大小(以字节为单位)。默认值为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对象的名称,该对象应包含解析后的键值对。如果将其留空,新键将位于root下。

overwrite_keys

解码JSON对象中的值会覆盖FileBeat添加的字段(type、source、offset等)以防冲突。如果您想保留之前添加的值,请禁用它。

expand_keys

如果启用此设置,FileBeat将递归地在解码的JSON中去点键,并将它们扩展为分层对象结构。例如,{"a.b.c": 123}将扩展为{"a":{"b":{"c":123}}}。当输入由 ECS logger 生成时,应启用此设置。

add_error_key

如果启用此设置,FileBeat会在JSON解组错误或配置中定义了message_key 但无法使用的情况下添加 “error.message” 和 “error.type:json” 键。

message_key

可选,指定要在其上应用行过滤和多行设置的JSON键。如果指定,该键必须位于JSON对象的顶层,并且与该键关联的值必须是字符串,否则将不会发生过滤或多行聚合。

document_id

指定设置document.id的JSON键。如果配置,该字段将从原始JSON文档中删除并存储在@metadata._id

ignore_decoding_error

(可选)指定是否应记录JSON解码错误。如果设置为true,则不会记录错误。默认值false。

container

使用容器解析器从容器日志文件中提取信息。它将行解析为公共消息行,也提取时间戳。

stream

仅从指定的流读取:allstdoutstderr。默认为all

format

解析日志时使用给定格式:autodockercri(Container Runtime Interface)。默认为auto,它会自动检测格式。要禁用自动检测,请设置任何其他选项。

以下代码段将FileBeat配置为从默认k8s日志路径下的所有容器中读取stdout输出流:

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

syslog

syslog解析器解析 RFC 314 6和/或 RFC 5424 格式的syslog消息。

支持的配置选项有:

format

(可选)要使用的syslog格式rfc3164rfc5424。要自动检测日志条目的格式,请将此选项设置为auto。默认为auto

Timestamps

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

  • Local timestamp (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

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

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

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"]

Common options

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

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

A list of processors to apply to the input data.

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

pipeline

The ingest pipeline ID to set for the events generated by this input.

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

keep_null

If this option is set to true, fields with null values will be published in the output document. By default, keep_null is set to false.

index

如果存在,此格式化字符串将覆盖此输入的事件索引(对于elasticsearch输出),或设置事件元数据的raw_index字段(对于其他输出)。此字符串只能引用the agent name and version and the event timestamp;要访问动态字段,请使用output.elasticsearch.index或处理器。

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

publisher_pipeline.disable_host

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


filestream.md
http://blog.lujinkai.cn/运维/ELK/filebeats/配置/inputs/filestream/
作者
像方便面一样的男子
发布于
2023年12月5日
许可协议