"本文主要对fluent-bit 1.3版本外部插件做详细介绍,关注后回复【pdf】获得文档"
1、回顾
随着集群规模不断扩大,日志收集问题将一直萦绕在我们耳边,前段时间我用六篇文章安利了使用fluentd及fluent-bit好处,具体可以参考如下链接:
下面我就直接介绍fluent-bit整体收集架构和插件,如果对整体有不理解的部分,可以参考如上链接。
2、外部输入插件
fluent-bit可以收集事件、日志、度量指标等数据,它可以通过一个网络接口,无线电硬件或一些内置的度量。以下是各个版本支持数据收集表格:
1.0版本 | 1.1版本 | 1.2版本 | 1.3版本 | 名称 | 标题 | 描述 |
X | X | √ | √ | collected | Collected | 侦听来自Collected的UDP数据包。 |
√ | √ | √ | √ | CPU | CPU使用率 | 测量CPU的总使用率 |
√ | √ | √ | √ | disk | 磁盘使用率 | 测量磁盘IO |
√ | √ | √ | √ | dummy | Dummy | 生成虚拟事件 |
√ | √ | √ | √ | exec | Exec | 执行外部程序并收集事件日志。 |
√ | √ | √ | √ | forward | Forward | fluentd转发协议 |
√ | √ | √ | √ | head | Head | 读取文件的前几行 |
√ | √ | √ | √ | health | health | 检查TCP服务的健康状况。 |
√ | √ | √ | √ | kmsg | Kernel Log Buffer | 读取Linux内核日志缓冲区消息。 |
√ | √ | √ | √ | MEM | 内存使用情况 | 测量系统上使用的内存总量。 |
√ | √ | √ | √ | MQTT | MQTT | 启动MQTT服务器并接收发布消息。 |
√ | √ | √ | √ | netif | 网络流量 | 测量网络流量。 |
√ | √ | √ | √ | proc | 处理 | 检查进程的运行状况。 |
√ | √ | √ | √ | random | 随机 | 生成随机样本 |
√ | √ | √ | √ | serial | 串行事件 | 从串行接口读取数据信息。 |
√ | √ | √ | √ | stdin | 标准输入 | 从标准输入读取数据。 |
√ | √ | √ | √ | syslog | syslog | 从Unix套接字读取syslog消息。 |
√ | √ | √ | √ | systemd | Systemd | 从Systemd / Journaled读取日志。 |
√ | √ | √ | √ | tail | tail | 从文件末尾读取数据 |
√ | √ | √ | √ | TCP | TCP | 通过tcp监听json数据 |
X | X | √ | √ | thermal | Thermal | 测量系统温度。 |
3、外部输出插件
以下是fluent-bit可用的输出插件,具体见表格:
1.0版本 | 1.1版本 | 1.2版本 | 1.3版本 | name | title | describtion |
√ | √ | √ | √ | azure | Azure日志分析 | 将记录吸收到Azure Log Analytics中 |
√ | √ | √ | √ | bigquery | bigquery | 将记录提取到Google BigQuery中 |
√ | √ | √ | √ | counter | counter | 简单记录计数器。 |
X | √ | √ | √ | datadog | datadog | 提取日志到Datadog。 |
√ | √ | √ | √ | es | es | 将记录刷新到Elasticsearch服务器。 |
√ | √ | √ | √ | file | 文件 | 将记录刷新到文件。 |
√ | √ | √ | √ | flowcounter | FlowCounter | 计数记录。 |
√ | √ | √ | √ | forward | forward | 转发协议 |
√ | √ | √ | √ | http | HTTP | 将记录刷新到HTTP端点。 |
√ | √ | √ | √ | influxdb | InfluxDB | 将记录刷新到InfluxDB时间序列数据库。 |
√ | √ | √ | √ | kafaka | kafaka | 将记录刷新到Apache Kafka |
√ | √ | √ | √ | kafaka-rest | Kafka REST代理 | 将记录刷新到Kafka REST代理服务器。 |
√ | √ | √ | √ | stackdriver | Google Stackdriver记录 | 将记录刷新到Google Stackdriver Logging服务。 |
√ | √ | √ | √ | stdout | 标准输出 | 将记录刷新到标准输出。 |
√ | √ | √ | √ | splunk | Splunk | 将记录刷新到Splunk Enterprise服务 |
√ | √ | √ | √ | tcp | TCP和TLS | 将记录刷新到TCP服务器。 |
√ | √ | √ | √ | td | td | 将记录刷新到云服务以进行分析。 |
√ | √ | √ | √ | nats | nats | 将记录刷新到NATS服务器。 |
√ | √ | √ | √ | null | 空值 | 不进行事件处理 |
4、使用示例
4.1、 tail插件(输入)
输入插件tail允许监视一个或多个文本文件。它具有类似于tail -f shell命令的行为。该插件读取路径模式中的每个匹配文件,并为找到的每个新行(用\ n分隔)生成一条新记录。(可选)可以使用数据库文件,以便插件可以具有跟踪文件的历史记录和偏移状态,这对于重新启动服务时恢复状态非常有用。
配置参数:
该插件支持以下参数配置,如下表所示:
Key | Description | Default |
Buffer_Chunk_Size | 设置初始缓冲区大小以读取文件数据。该值也用于增加缓冲区大小。该值必须符合“ 单位大小”规范。 | 32k |
Buffer_Max_Size | 设置每个受监视文件的缓冲区大小的限制。当需要增加缓冲区时(例如:很长的行),该值用于限制内存缓冲区可以增长多少。如果读取的文件超过此限制,将从监视的文件列表中删除该文件。该值必须符合“ 单位大小”规范。 | Buffer_Chunk_Size |
Path | 通过使用通用通配符指定一个或多个特定日志文件的模式。 | |
Path_Key | 如果启用,它将附加受监视文件的名称作为记录的一部分。分配的值成为映射中的键。 | |
Exclude_Path | 设置一个或多个用逗号分隔的外壳模式,以排除符合特定条件的文件,例如:exclude_path = *.gz,*.zip | |
Refresh_Interval | 刷新监视文件列表的时间间隔(以秒为单位)。 | 60s |
Rotate_Wait | 指定在刷新某些挂起的数据时,以秒为单位监视文件一次轮转所需的额外时间。 | 5s |
Ignore_Older | 忽略比该时间旧的记录(以秒为单位)。支持m,h,d(分钟,小时,天)语法。默认行为是从指定文件中读取所有记录。仅在指定了解析器并且可以解析记录时间时才可用。 | |
Skip_Long_Lines | 当受监视的文件由于行很长(Buffer_Max_Size)而达到缓冲区容量时,默认行为是停止监视该文件。Skip_Long_Lines会更改该行为,并指示Fluent Bit跳过长行并继续处理适合缓冲区大小的其他行。 | 关 |
DB | 指定数据库文件以跟踪受监视的文件和偏移量。 | |
DB.Sync | 设置默认的同步(I / O)方法。值:Extra,Full,Normal,Off。此标志影响内部SQLite引擎与磁盘同步的方式 | full |
Mem_Buf_Limit | 设置将数据附加到引擎时,Tail插件可以使用的内存限制。如果达到极限,它将被暂停;刷新数据后,它将恢复。 | |
Parser | 指定解析器的名称,以将其解析为结构化消息。 | |
Key | 当消息是非结构化消息(未应用解析器)时,它将作为字符串附加在键名log下。此选项允许为该键定义替代名称。 | log |
Tag | 设置一个标签(带有正则表达式提取字段),该标签将放置在读取的行上。例如kube.<namespace_name>.<pod_name>.<container_name> | |
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,则默认情况下,插件将从头开始读取每个目标文件。
Docker日志收集模式配置参数:
由于行长度限制,通过docker模式收集docker守护进程产生json日志,如果需要使用此模式。需要解析器配置tail插件,然后启用docker模式。
Key | Description | Default |
Docker | 如果启用,该插件将重新组合已拆分的Docker日志行,然后将其传递至如上配置的任何解析器。此模式不能与多行同时使用。 | 关 |
Docker_Mode_Flush | 等待时间(以秒为单位),以刷新未完成的数据行。 | 4 |
入门:
为了尾随文本或日志文件,您可以从命令行或通过配置文件运行插件。
命令行:
$ fluent-bit -i tail -p path=/var/log/syslog -o stdout
配置:
[INPUT]
Name tail
Path /var/log/syslog
[OUTPUT]
Name stdout
Match *
文件获取状态保持:
该tail插件功能输入保存跟踪文件的状态,强烈建议您启用此。为此,可以使用db属性,例如:
fluent-bit -i tail -p path=/var/log/syslog -p db=/path/to/logs.db -o stdout
4.2、file文件介绍(输出)
配置参数:
该插件支持以下配置参数:
Key | Description |
Path | 输出文件路径。如果未设置,则文件名将为标签名。 |
format | 文件内容的格式。另请参阅格式部分。默认值:out_file。 |
格式:
输出时间,标签和json记录,如下所示:
tag: [time, {"key1":"value1", "key2":"value2", "key3":"value3"}]
将记录输出为JSON(没有其他和属性),如下所示:
{"key1":"value1", "key2":"value2", "key3":"value3"}
将记录输出为CSV,CSV支持其他配置参数,如下所示:
Key | Description |
Delimiter | 用于分隔每个数据的字符。默认值:“,” |
time[delimiter]"value1"[delimiter]"value2"[delimiter]"value3"
模板格式
使用自定义格式模板输出记录配置参数如下:
Key | Description |
Template | 格式字符串。默认值:“ {time} {message}” |
例如,如果您按如下模板所示设置配置:
[INPUT]
Name mem
[OUTPUT]
Name file
Format template
Template {time} used={Mem.used} free={Mem.free} total={Mem.total}
输出:
1564462620.000254 used=1045448 free=31760160 total=32805608
入门介绍:
您可以从命令行或通过配置文件运行插件;
命令行模式收集cpu运行指标信息:
fluent-bit -i cpu -o file -p path=output.txt
配置文件运行:
[INPUT]
Name cpu
Tag cpu
[OUTPUT]
Name file
Match *
Path output.txt
5、总结
本文主要介绍了各个版本插件支持进行列举以及对部分插件的使用做了简单介绍,如果对上述运行有疑问的地方,可以参考前几节的介绍;下文我会继续分享fluent-bit结合docker和Kubernetes使用介绍,敬请期待。关注、公众号后台回复【pdf】可获得详细文档。
推荐阅读:
Kubernetes中如何使用ClusterDNS进行服务发现?
从Ice到Kubernetes容器技术,微服务架构经历了什么?
原创不易,随手关注或者”在看“,诚挚感谢!