Fluentbit 入门教程(1):tail 插件

译文 2024-10-15 09:22:57

背景和概述

“tail”是最流行的插件之一,它从本地文件读取日志消息。它允许监视一个或多个文本文件,将数据发送到 Fluent Bit 或 Fluentd。在本博客系列中,我们将介绍一个用例,其中“tail”插件将用于从日志文件获取数据以发送到 Fluent Bit。使用 Fluent Bit 从各种系统收集事件数据并将其发送到 Fluentd 或其他应用程序是很常见的。由于 Fluent Bit 快速且轻量级,因此可以轻松地从不同来源收集事件而不复杂,并且由于 Fluentd 灵活且功能强大,它可以从多个输入聚合,处理数据并路由到不同的输出。

fluentbit-tail

在本博客中,作为用例的开始,我们将尝试使用“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

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
OpenSource
开源版
Flashcat
Flashcat
FlashDuty
Flashduty