Fluent-bit日志插件配置说明 #
一、概述 #
fluent-bit配置文件中,主要由输入(Input)、解析器(Parser)、过滤器(Filter)、缓存(Buffer)、路由(Routing)、输出(Output)六大模块组成,各个模块的详细说明如下:
Interface | Description(英文) | Description(中文) |
---|---|---|
Input | Entry point of data. Implemented through Input Plugins, this interface allows to gather or receive data. E.g: log file content, data over TCP, built-in metrics, etc. | 数据的入口点。通过输入插件实现,此接口允许收集或接收数据。例如:日志文件内容,TCP上的数据,内置指标等。 |
Parser | Parsers allow to convert unstructured data gathered from the Input interface into a structured one. Parsers are optional and depends on Input plugins. | 解析器允许将从Input接口收集的非结构化数据转换为结构化数据。解析器是可选的,并且取决于Input插件。 |
Filter | The filtering mechanism allows to alter the data ingested by the Input plugins. Filters are implemented as plugins. | 过滤机制允许更改 Input插件提取的数据。过滤器被实现为插件。 |
Buffer | By default, the data ingested by the Input plugins, resides in memory until is routed and delivered to an Output interface. | 默认情况下,Input插件提取的数据将驻留在内存中,直到路由并传递到Output接口为止。 |
Routing | Data ingested by an Input interface is tagged, that means that a Tag is assigned and this one is used to determinate where the data should be routed based on a match rule. | Input接口摄取的数据被标记,这意味着分配了一个Tag,并且该标记用于根据匹配规则确定应将数据路由到的位置。 |
Output | An output defines a destination for the data. Destinations are handled by output plugins. Note that thanks to the Routing interface, the data can be delivered to multiple destinations. | 输出定义数据的目的地。目的地由输出插件处理。请注意,借助“路由”接口,可以将数据传递到多个目的地。 |
二、配置文件 #
一个fluent-bit配置文件除了包括输入(Input)、解析器(Parser)、过滤器(Filter)、缓存(Buffer)、路由(Routing)、输出(Output)六个模块外,还需要配置Service,该模块主要负责fluent-bit的配置,如Parser配置文件路径、fluent-bit自身日志打印等。如下是fluent-bit.conf配置:
[SERVICE]
Flush 1
Daemon Off
Log_Level debug
Parsers_File parsers.conf
[INPUT]
Name tail
Path ${K8S_LOG_DIR}/*.log
Parser json
Tag kube_file.*
Refresh_Interval 5
Mem_Buf_Limit 5MB
Skip_Long_Lines OFF
[FILTER]
Name record_modifier
Match kube_file.*
Record hostname ${K8S_HOSTNAME}
Record namespace ${K8S_POD_NAMESPACE}
Record application ${K8S_APPLICATION_NAME}
Record pod ${K8S_POD_NAME}
Record container ${K8S_CONTAINER_NAME}
Record node ${K8S_NODE_NAME}
[OUTPUT]
Name es
Match *
Host ${ELASTICSEARCH_HOST}
Port ${ELASTICSEARCH_PORT}
Logstash_Format On
Retry_Limit False
Type flb_type
Time_Key time
Time_Key_Format yyyy-MM-dd HH:mm:ss.SSS
Replace_Dots On
Logstash_Prefix segma_application_file
三、Service #
Service各个配置项如下:
Key | Description | 中文描述 | Default Value |
---|---|---|---|
Flush | Set the flush time in seconds. Everytime it timeouts, the engine will flush the records to the output plugin. | 设置Flush时间(以秒为单位)。每次超时,引擎都会将记录刷新到输出插件。 | 5 |
Daemon | Boolean value to set if Fluent Bit should run as a Daemon (background) or not. Allowed values are: yes, no, on and off. | 一个布尔值,用于设置Fluent Bit是否应作为守护程序(后台)运行。允许的值为:是,否,打开和关闭。 | Off |
Log_File | Absolute path for an optional log file. | 可选日志文件的绝对路径。 | - |
Log_Level | Set the logging verbosity level. Allowed values are: error, info, debug and trace. Values are accumulative, e.g: if ‘debug’ is set, it will include error, info and debug. Note that trace mode is only available if Fluent Bit was built with the WITH_TRACE option enabled. | 设置日志记录的详细程度。允许的值为:error, info, debug 和 trace。值是累积值,例如:如果设置了“ debug”,则它将包括error, info 和 debug。请注意,只有在启用WITH_TRACE选项的情况下构建Fluent Bit时,跟踪模式才可用。 | info |
Parsers_File | Path for a parsers configuration file. Multiple Parsers_File entries can be used. | 配置文件的路径。可以使用多个Parsers_File条目。 | - |
HTTP_Server | Enable built-in HTTP Server | 启用内置的HTTP服务器 | Off |
HTTP_Listen | Set listening interface for HTTP Server when it’s enabled | 启用HTTP Server时设置监听接口 | 0.0.0.0 |
HTTP_Port | Set TCP Port for the HTTP Server | 设置HTTP服务器的TCP端口 | 2020 |
在Kubernetes中进行日志收集时,一般需要配置的项有:Flush、Daemon、Log_Level、Parsers_File。在调试插件时,关闭Daemon以及设置Log_Level为debug甚至更高可方便查看插件运行错误。Parsers_File对应解析器的配置,可参考官方提供的parsers.conf
四、Input #
INPUT模块指点了日志输入源,每个输入插件都可以添加自己的配置键。以下为目前官方支持的输入源插件,官方Input Plugins。运行在kubernetes集群内的应用日志收集时,我们使用的是tail插件常用参数如下:
Key | Description | 中文描述 | Default |
---|---|---|---|
Buffer_Chunk_Size | Set the initial buffer size to read files data. This value is used too to increase buffer size. The value must be according to the Unit Size specification. | 设置初始缓冲区大小以读取文件数据。该值也用于增加缓冲区大小。该值必须符合“ 单位大小”规范。 | 32k |
Buffer_Max_Size | Set the limit of the buffer size per monitored file. When a buffer needs to be increased (e.g: very long lines), this value is used to restrict how much the memory buffer can grow. If reading a file exceed this limit, the file is removed from the monitored file list. The value must be according to the Unit Size specification. | 设置每个受监视文件的缓冲区大小的限制。当需要增加缓冲区时(例如:很长的行),该值用于限制内存缓冲区可以增长多少。如果读取的文件超过此限制,将从监视的文件列表中删除该文件。该值必须符合“ 单位大小”规范。 | Buffer_Chunk_Size |
Path | Pattern specifying a specific log files or multiple ones through the use of common wildcards. | 通过使用通用通配符指定一个或多个特定日志文件的模式。 | |
Path_Key | If enabled, it appends the name of the monitored file as part of the record. The value assigned becomes the key in the map. | 如果启用,它将附加受监视文件的名称作为记录的一部分。分配的值成为映射中的键。 | |
Exclude_Path | Set one or multiple shell patterns separated by commas to exclude files matching a certain criteria, e.g: exclude_path=.gz,.zip | 设置一个或多个用逗号分隔的外壳模式,以排除符合特定条件的文件,例如:exclude_path = .gz,.zip | |
Refresh_Interval | The interval of refreshing the list of watched files. Default is 60 seconds. | 刷新监视文件列表的时间间隔。默认值为60秒。 | |
Rotate_Wait | Specify the number of extra seconds to monitor a file once is rotated in case some pending data is flushed. Default is 5 seconds. | 指定在刷新某些未决数据时旋转一次后监视文件的额外秒数。默认值为5秒。 | |
Skip_Long_Lines | When a monitored file reach it buffer capacity due to a very long line (Buffer_Max_Size), the default behavior is to stop monitoring that file. Skip_Long_Lines alter that behavior and instruct Fluent Bit to skip long lines and continue processing other lines that fits into the buffer size. | 当受监视的文件由于行很长(Buffer_Max_Size)而达到缓冲区容量时,默认行为是停止监视该文件。Skip_Long_Lines会更改该行为,并指示Fluent Bit跳过长行并继续处理适合缓冲区大小的其他行。 | Off |
DB | Specify the database file to keep track of monitored files and offsets. | 指定数据库文件以跟踪受监视的文件和偏移量。 | |
DB.Sync | Set a default synchronization (I/O) method. Values: Extra, Full, Normal, Off. This flag affects how the internal SQLite engine do synchronization to disk, for more details about each option please refer to this section. | 设置默认的同步(I / O)方法。值:Extra,Full,Normal,Off。此标志影响内部SQLite引擎与磁盘同步的方式,有关每个选项的更多详细信息,请参阅本节。 | Full |
Mem_Buf_Limit | Set a limit of memory that Tail plugin can use when appending data to the Engine. If the limit is reach, it will be paused; when the data is flushed it resumes. | 设置将数据附加到引擎时,Tail插件可以使用的内存限制。如果达到极限,它将被暂停;刷新数据后,它将恢复。 | |
Parser | Specify the name of a parser to interpret the entry as a structured message. | 指定解析器的名称,以将条目解释为结构化消息。 | |
Key | When a message is unstructured (no parser applied), it’s appended as a string under the key name log. This option allows to define an alternative name for that key. | 当消息是非结构化消息(未应用解析器)时,它将作为字符串附加在键名log下。此选项允许为该键定义替代名称。 | log |
常用的参数有Path、Parser、Tag、Refresh_Interval、Mem_Buf_Limit、Skip_Long_Lines。Path指定日志所在目录;Tag为Routing参数,会在Routing章节介绍;Refresh_Interval指定日志刷新时间间隔,会直接影响日志收集的实时性,一般设置为5秒;Mem_Buf_Limit指定插件内存大小,一般设置5Mb;Skip_Long_Lines一般使用默认值Off;其中比较重要的是Parser参数的配置,主要匹配Parser解析器,其值为解析器的name值,下一章介绍Parser解析器。
五、Parser #
Parser解析器的配置是单独的一个配置文件,配置的加载是由Service模块的Parsers_File参数指定。可参考官方提供的parsers.conf
六、Filter #
Filter插件允许改变输入数据的结构,例如在Kubernetes集群中,我们需要日志记录应用的名字以及所在节点,而默认日志未打印该值,我们便可以使用Filter附加该值。详情见官方插件信息
七、Buffer #
当准备好将数据或日志路由到某个目标位置时,默认情况下会将它们缓冲在内存中。
八、Routing #
路由是一项核心功能,可让您通过过滤器将数据路由到一个或多个目的地。路由主要由两个参数控制。
- Tag:当数据由输入插件生成时,它附带一个标签(大多数情况下是手动配置该标签),该标签是人类可读的指示器,有助于识别数据源。
- Match:我们定义其中的数据应被路由,一个匹配规则在配置中进行分配。
下面文件将简单介绍路由规则的实现:
[INPUT]
Name cpu
Tag my_cpu
[INPUT]
Name mem
Tag my_mem
[OUTPUT]
Name es
Match my_cpu
[OUTPUT]
Name stdout
Match my_mem
在上面的配置中,es输出通过Match值my_cpu匹配到输入插件cpu的Tag值,而stdout输出则通过Match值my_mem匹配到输入插件mem的Tag值,所以es输出只接收cpu输出,stdout输出只接收mem输出。
九、Output #
输出接口允许定义数据的目的地。通用目标是远程服务,本地文件系统或其他标准接口。输出实现为插件,并且有很多可用的插件。 有关更多详细信息,请参阅“输出插件”部分。
Filter