tail

tail 输入插件允许监测一个或多个文本文件。它具有类似于 tail -f 的 shell 命令行功能。

该插件读取 Path 模式中的每个匹配文件,并为每个新行(分隔符为\n)生成一条新纪录。作为可选的,可以使用数据库文件,以便插件可以跟踪文件的历史记录和偏移状态,这对于重启服务时的状态恢复非常有用。

配置参数

该插件支持以下配置参数:

描述 默认值
Buffer_Chunk_Size 设置读取文件数据的初始缓冲区大小。该值也用于增加缓冲区大小。该值必须符合单位章节中的规范 32k
Buffer_Max_Size 设置每个监控文件的缓冲区大小。当需要增加缓冲区时,此值用于限制内存缓冲区可以增加多少。如果超过此限制,则将从监控文件列表中删除该文件。该值必须符合单位章节中的规范 Buffer_Chunk_Size
Path 通过使用通配符指定一个或多个日志文件的
Path_Key 如果启用,它将附加监控文件的名称作为记录的一部分。指定的值成为映射中的键
Exclude_Path 设置一个或多个用逗号分隔的模式,以排除符合特定条件的文件。例如 exclude_path=*.gz,*.zip
Refresh_Interval 刷新监控文件列表的时间间隔(秒) 60
Rotate_Wait 指定监控文件的额外时间,以防止日志文件滚动丢失某些数据 5
Ignore_Older 忽略比该时间旧的记录(秒)。支持 m,h,d(分钟,小时,天)。默认行为是从指定文件中读取所有记录。 仅在指定了解析器并且可以解析记录时间时才可用
Skip_Long_Lines 当监控的文件由于行(Buffer_Max_Size)很长而达到缓冲区容量时,默认行为是停止监视该文件。Skip_Long_Lines 会更改该行为,并指示 Fluent Bit 跳过长行并继续处理适合缓冲区大小的其他行 Off
DB 指定跟踪监控文件的偏移量的数据库文件
DB.Sync 设置默认的同步方法。可选值: Extra, Full, Normal, Off.此标志影响内部 SQLite 引擎与磁盘同步的方式,有关选项的更多详细信息,请参阅 sqlite 文档. Full
Mem_Buf_Limit 设置将数据追加到引擎时的内存限制。如果达到此限制,它将被暂停;刷新数据后,它将恢复.
Parser 指定解析器的名称,将记录转化为结构化消息
Key 当消息是非结构化数据时(未应用解析器),消息将以字符串形式作为 log 键的值。此选项允许为该键指定名称 log
Tag 为读取的行设置标签(带有正则表达式字段)。如 kube.<namespace_name>.<pod_name>.<container_name>.请注意支持如下”标签扩展”规则: 如果标签包含星号(*),则星号(*)将被替换为文件的绝对路径(请参阅 Workflow of Tail + Kubernetes Filter
Tag_Regex 设置正则表达式以从文件中提取字段.如 (?<pod_name>[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*)_(?<namespace_name>[^_]+)_(?<container_name>.+)-

请注意,如果未指定数据库参数 db,默认情况下,插件将从头开始读取每个目标文件。

多行配置参数

此外,还存在以下选项来配置多行文件的处理:

描述 默认值
Multiline 如果启用,该插件将尝试发现多行消息并使用适当的解析器组成输出消息。请注意,启用此选项后,将不使用 Parser 选项 Off
Multiline_Flush 处理队列中多行消息的等待时间 4
Parser_Firstline 多行消息的开头匹配的解析器的名称。请注意,解析器中定义的正则表达式必须包含组名(名为capture )
Parser_N 可选的额外解析器,用于解析并结构化多行条目。此选项可用于定义多个解析器,例如:Parser_1 ab1,Parser_2 ab2,Parser_N abN

Docker 模式配置参数

还包含 Docker 模式,用于重组由于其行长限制被 Docker 守护程序分割的 JSON 日志行。要使用此功能,请配置 tail 插件使用相应的解析器,然后启用 Docker 模式:

Key Description Default
Docker_Mode 如果启用,该插件将重新组合已分割的 Docker 日志行,然后将其传递至如上配置的任何解析器。此模式不能与多行模式同时使用 Off
Docker_Mode_Flush 刷新队列中未完成的分割行的等待时间 4

快速开始

为了实时读取文本或日志文件,您可以从命令行或通过配置文件运行插件:

命令行

在命令行中,您可以使用以下选项让 Fluent Bit 解析文本文件

  1. $ fluent-bit -i tail -p path=/var/log/syslog -o stdout

配置文件

在您的主配置文件中,添加以下 InputOutput 配置段:

  1. [INPUT]
  2. Name tail
  3. Path /var/log/syslog
  4. [OUTPUT]
  5. Name stdout
  6. Match *

文件状态跟踪

强烈建议您启用 tail 输入插件可保存跟踪文件的状态的功能。为此,可以使用 db 属性,如:

  1. $ fluent-bit -i tail -p path=/var/log/syslog -p db=/path/to/logs.db -o stdout

运行时,数据库文件/path/to/logs.db 将被创建,该数据库由 SQLite3 支持,因此,如果您有兴趣探索内容,则可以使用 SQLite 客户端工具将其打开,例如:

  1. $ sqlite3 tail.db
  2. -- Loading resources from /home/edsiper/.sqliterc
  3. SQLite version 3.14.1 2016-08-11 18:53:32
  4. Enter ".help" for usage hints.
  5. sqlite> SELECT * FROM in_tail_files;
  6. id name offset inode created
  7. ----- -------------------------------- ------------ ------------ ----------
  8. 1 /var/log/syslog 73453145 23462108 1480371857
  9. sqlite>

确保 Fluent Bit 没有依赖该数据库再浏览数据库文件,否则您会看到一些 Error: database is locked 之类的错误信息。

格式化 SQLite

默认情况下,SQLite 客户端工具不会以人类易读的方式格式化列,因此要浏览 in_tail_files 表,您可以在 ~/.sqliterc 中创建具有以下内容的配置文件

  1. .headers on
  2. .mode column
  3. .width 5 32 12 12 10

文件滚动

文件滚动可以被正确的处理,包括日志滚动 copytruncate(复制清空) 模式。