Fluentd收集数据存储到BOS
更新时间:2024-08-27
工具概述
Fluentd是一个开源数据收集器,可以从各种数据源收集事件,统一收集数据后可以写入文件、RDBMS、NoSQL、Hadoop、S3等存储系统消费,以便更好地使用数据。本文将详细阐述如何利用Fluentd的fluent-plugin-s3插件将日志数据输出到BOS存储桶。
配置教程
- 前置条件:Ruby 2.7以上版本,可以基于rvm管理多个ruby版本。
-
基于gem安装Fluentd和fluent-plugin-s3插件,gems默认源可能存在不可用问题,需要通过
gem source
替换成可用镜像源。gem install fluentd gem install fluent-plugin-s3 --no-document
-
Fluentd的输入输出方式主要基于
/etc/fluent/fluent.conf
配置文件,首先修改配置文件中的input source标签,方便起见我们直接使用内置的HTTP input做演示,如下所示:# HTTP input # http://localhost:8888/<tag>?json=<json> <source> @type http @id http_input port 8888 </source>
-
修改配置文件中的output match标签,使用BOS作为输出存储,详见Configuration: Output,执行如下命令:
<match bos.*.*> # 匹配bos前缀的tag的所有日志 @type s3 aws_key_id bos-ak aws_sec_key bos-sk s3_bucket bos-bkt s3_endpoint bos-endpoint # 例如https://s3.bj.bcebos.com path logs/${tag}/%Y/%m/%d/ s3_object_key_format %{path}%{time_slice}_%{index}.%{file_extension} <buffer tag,time> @type file path /var/log/fluent/bos timekey 60 # 1 min partition timekey_wait 10s timekey_use_utc true # use utc </buffer> <format> @type json </format> </match>
-
重新启动Fluentd进程,执行如下命令:
fluentd -c /etc/fluent/fluent.conf
-
构建input日志,测试能否正常写入BOS,执行如下命令:
curl -X POST -d 'json={"message":"hello world!"}' http://localhost:8888/bos.tag.0 curl -X POST -d 'json={"message":"hello world!"}' http://localhost:8888/bos.tag.1
-
从BOS控制台可以查看到日志导入结果:
bos-bkt/logs/bos.tag.0/2024/08/27/20240827080526_0.gz bos-bkt/logs/bos.tag.1/2024/08/27/20240827080531_0.gz
参数说明
参数名称 | 参数含义 |
---|---|
match tag-pattern | tag-pattern是自定义的用于查找匹配tag的正则表达式,不匹配会报:no patterns matched tag |
type | 指定output类型为s3类对象存储 |
s3_endpoint | BOS Endpoint,参考文档 |
aws_key_id | BOS Access Key ID,参考如何获取AKSK |
aws_sec_key | BOS Secret Access Key |
s3_bucket | BOS桶名称 |
path | 指定在BOS的存储路径 |
s3_object_key_format | 设置写入BOS的对象命名格式 |
buffer | 指定日志切割规则、时间格式等,详见buffer config |
format | 指定每行格式 |