Fluentbit 入门教程(1):tail 插件
背景和概述
“tail”是最流行的插件之一,它从本地文件读取日志消息。它允许监视一个或多个文本文件,将数据发送到 Fluent Bit 或 Fluentd。在本博客系列中,我们将介绍一个用例,其中“tail”插件将用于从日志文件获取数据以发送到 Fluent Bit。使用 Fluent Bit 从各种系统收集事件数据并将其发送到 Fluentd 或其他应用程序是很常见的。由于 Fluent Bit 快速且轻量级,因此可以轻松地从不同来源收集事件而不复杂,并且由于 Fluentd 灵活且功能强大,它可以从多个输入聚合,处理数据并路由到不同的输出。
在本博客中,作为用例的开始,我们将尝试使用“tail”插件和标准配置文件来运行 Fluent Bit。此后的两篇博客介绍了高级配置,例如多行解析。
Fluentbit 实验环境
- 操作系统:CentOS8
- Fluent Bit 版本:v2.0.6
- 硬件规格:2CPU,2GB内存
我们假设您已经在计算机上下载了 Fluent Bit 备用。如果您尚未安装 Fluent Bit,请自行下载安装。
Fluentbit 标准配置模式
本实验中描述的场景基于以下目录结构:
/fluentbit : root directory
|--- conf
|--- custom_parsers.conf
|--- Lab01
|-- (Lab01 configuration files)
|-- sample
|-- (Sample log files for exercise)
|--- log
|--- buffer
这是一个 “tail” 插件配置,下面对其中的关键配置项做如下说明:
- Path:通过使用通用通配符指定一个或多个日志文件。也允许用逗号分隔。
- Read_from_head:对于开始时新发现的文件(没有保存偏移位置的),从文件的头部而不是尾部读取内容。
- DB:指定数据库文件来跟踪受监视的文件和偏移量。
[INPUT]
Name tail
Tag syslog
Path /var/log/messages
Read_from_head true
DB /fluentbit/tail_syslog.db
Storage.type filesystem
在上面的示例中,配置了“Read_from_head”和“DB”选项。
如果您想读取现有的日志消息,建议使用“Read_from_head”。默认情况下,“Read_from_head”设置为“false”,这意味着 Fluent Bit 不会读取“Path”选项指定的日志文件中的现有日志消息,而仅读取发现后的新日志消息。当 Fluent Bit 意外卡住并需要重新启动时,Fluent Bit 会使用 Read_from_head true
再次从头部读取文件,这会导致数据重复。为了避免这种情况,建议使用’DB’选项来保留偏移信息。一旦配置了 DB 选项,Fluent Bit 将会在指定的数据库文件中保存文件的偏移量信息,以便在重新启动后继续从上次位置读取文件。
测试 tail
常见用例之一是读取 Linux 操作系统日志。 RHEL/CentOS 将其日志存储在:/var/log/messages。在本练习中,我们使用示例 Linux 日志:“sample/sample01_linux_messages.txt”。
下面是一个示例 Linux 日志,以及一个读取日志并在 stdout 中显示它们的示例配置。在“tail”部分,我们使用“Read_from_head”和“DB”选项。
sample01_linux_messages.txt 内容如下:
Oct 27 16:14:31 fluent01 systemd[1]: Started dnf makecache.
Oct 27 16:20:29 fluent01 systemd[1]: Starting system activity accounting tool...
Oct 27 16:20:29 fluent01 systemd[1]: Started system activity accounting tool.
Oct 27 16:40:29 fluent01 kubelet[896]: W1027 16:40:29.280967 896 watcher.go:95] Error while processing event ("/sys/fs/cgroup/cpu,cpuacct/system.slice/sysstat-collect.service": 0x40000100 == IN_CREATE|IN_ISDIR): inotify_add_watch /sys/fs/cgroup/cpu,cpuacct/system.slice/sysstat-collect.service: no such file or directory
Oct 27 16:40:29 fluent01 kubelet[896]: W1027 16:40:29.281027 896 watcher.go:95] Error while processing event ("/sys/fs/cgroup/blkio/system.slice/sysstat-collect.service": 0x40000100 == IN_CREATE|IN_ISDIR): inotify_add_watch /sys/fs/cgroup/blkio/system.slice/sysstat-collect.service: no such file or directory
Oct 27 16:40:29 fluent01 kubelet[896]: W1027 16:40:29.281048 896 watcher.go:95] Error while processing event ("/sys/fs/cgroup/memory/system.slice/sysstat-collect.service": 0x40000100 == IN_CREATE|IN_ISDIR): inotify_add_watch /sys/fs/cgroup/memory/system.slice/sysstat-collect.service: no such file or directory
下面是 Fluentbit 完整配置文件,在 INPUT 部分,要指向 sample01_linux_messages.txt 文件:
[SERVICE]
## General settings
Flush 5
Log_Level Info
Daemon off
Log_File /fluentbit/log/fluentbit.log
Parsers_File /fluentbit/conf/custom_parsers.conf
## Buffering and Storage
Storage.path /fluentbit/buffer/
Storage.sync normal
Storage.checksum Off
Storage.backlog.mem_limit 5M
Storage.metrics On
## Monitoring (if required)
HTTP_Server true
HTTP_Listen 0.0.0.0
HTTP_Port 2020
Health_Check On
HC_Errors_Count 5
HC_Retry_Failure_Count 5
HC_Period 60
[INPUT]
Name tail
Tag linux.messages
Path /fluentbit/conf/Lab01/sample/sample01_linux_messages.txt
Storage.type filesystem
Read_from_head true
DB /fluentbit/tail_linux_messages.db
[OUTPUT]
Name stdout
Match linux.messages
让我们运行 Fluent Bit 并检查其行为!
$ fluent-bit -c sample01_flb_tail_standard.conf
Fluent Bit v2.0.6
* Copyright (C) 2015-2022 The Fluent Bit Authors
* Fluent Bit is a CNCF sub-project under the umbrella of Fluentd
* https://fluentbit.io
一段时间后,您还可以在 stdout 中看到输出消息。
[0] linux.messages: [1677106496.274148557, {"log"=>"Oct 27 16:14:31 fluent01 systemd[1]: Started dnf makecache."}]
[1] linux.messages: [1677106496.274161493, {"log"=>"Oct 27 16:20:29 fluent01 systemd[1]: Starting system activity accounting tool..."}]
[2] linux.messages: [1677106496.274162041, {"log"=>"Oct 27 16:20:29 fluent01 systemd[1]: Started system activity accounting tool."}]
[3] linux.messages: [1677106496.274162423, {"log"=>"Oct 27 16:40:29 fluent01 kubelet[896]: W1027 16:40:29.280967 896 watcher.go:95] Error while processing event ("/sys/fs/cgroup/cpu,cpuacct/system.slice/sysstat-collect.service": 0x40000100 == IN_CREATE|IN_ISDIR): inotify_add_watch /sys/fs/cgroup/cpu,cpuacct/system.slice/sysstat-collect.service: no such file or directory"}]
[4] linux.messages: [1677106496.274163003, {"log"=>"Oct 27 16:40:29 fluent01 kubelet[896]: W1027 16:40:29.281027 896 watcher.go:95] Error while processing event ("/sys/fs/cgroup/blkio/system.slice/sysstat-collect.service": 0x40000100 == IN_CREATE|IN_ISDIR): inotify_add_watch /sys/fs/cgroup/blkio/system.slice/sysstat-collect.service: no such file or directory"}]
[5] linux.messages: [1677106496.274163394, {"log"=>"Oct 27 16:40:29 fluent01 kubelet[896]: W1027 16:40:29.281048 896 watcher.go:95] Error while processing event ("/sys/fs/cgroup/memory/system.slice/sysstat-collect.service": 0x40000100 == IN_CREATE|IN_ISDIR): inotify_add_watch /sys/fs/cgroup/memory/system.slice/sysstat-collect.service: no such file or directory"}]
- 从输出中可以看到,默认情况下整个日志消息都嵌套在“log”键下,因为配置中没有解析器定义。将纯文本解析为 JSON 将在另一篇博客中介绍。
- 此外,Fluent Bit 生成的时间戳与原始消息中的时间戳不同。时间戳调整将在另一篇博客中介绍。
DB 文件创建于 /fluencebit/tail_linux_messages.db。您可以通过以下步骤检查 db 文件内部,以防万一。
$ sqlite3 /fluentbit/tail_linux_messages.db
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> SELECT * FROM in_tail_files;
1|/fluentbit/conf/Lab01/sample/sample01_linux_messages.txt|1172|2322445|1677106496|0
从 sqlite DB 中查询,可以看到:
- File ID(由 tail 插件生成):1
- 文件名:/fluencebit/conf/Lab01/sample/sample01_linux_messages.txt
- Offset 偏移量:1172
- inode: 2322445
- 创建时间:1677106496
要结束 sqlite3 命令,请按“ctrl”+“d”。然后让我们停止 Fluent Bit 并重新开始。在第一次运行时,Fluent Bit 已经读取了日志文件中的 5 行,并将偏移量信息存储在 DB 文件中。我们期望 Fluent Bit 不会再次读取这 5 行。
$ fluent-bit -c sample01_flb_tail_standard.conf
Fluent Bit v2.0.6
* Copyright (C) 2015-2022 The Fluent Bit Authors
* Fluent Bit is a CNCF sub-project under the umbrella of Fluentd
* https://fluentbit.io
如果一切正常,标准输出中不会显示任何消息。这意味着 Fluent Bit 重新启动了第二次运行,但没有再次读取处理相同的行,因为 DB 文件包含有关从何处重新启动的信息。
太棒了,你完成了第一个练习!您了解了如何在 Fluent Bit 中使用“tail”插件从典型日志文件中收集数据。欢迎关注后续博客。
原文:https://fluentd.ctc-america.com/blog/tail-in-fluent-bit-standard-configuration