fluentd 三分钟烹饪 如何将日志传输到 Swift 对象存储

目录
大家好,我是佐藤,最近一直在研究 Fluentd。
我们正在使用 GMO App Cloud 进行某个项目,并且我们收到一个请求,要求使用 fluentd 将运行服务器的日志以一小时为增量存储在对象存储中。
“对象存储!它可能兼容S3,所以用起来很方便!”
但..
对象存储由客户管理的服务器使用基于 OpenStack Swift 的 API 进行操作。
什么?用Swift?
我一开始就遇到了难题……虽然 GMO AppliCloud 的对象存储参考文档中有使用 curl、Python-swiftclient 和 Cyberduck 的操作示例,但它们都不适合与 fluentd 集成,而且我也不想自己编写日志传输程序……
我发现了一个有用的东西!
fluent-plugin-swift
开发了这么实用的插件。
所以
fluentd 3分钟烹饪(GMO App Cloud)Swift对象存储版
原料
1. Fluentd 和所需的插件
- fluentd(td-agent) 最新
- fluent-plugin-swift
- fluent-plugin-forest
*此食谱可根据个人喜好调整,但建议使用森林。
2. 访问 Swift 对象存储所需的信息
请从 GMO 应用云控制面板 > 服务 > API 信息中查看以下内容
服务信息:租户名称(以“app”开头的 20 位数字)
*还有一种称为租户 ID 的信息,但这次我们不会使用它。
端点:身份 v2.0(身份验证)
*端点信息有很多种,但这次只使用这一个
您还需要GMO App Cloud控制面板的登录ID/密码。
准备好所有食材后,就可以开始烹饪了。
3. 安装 fluentd
已完成推荐的预安装设置
# curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh
4. 安装插件
让我们安装 fluent-plugin-swift 和 fluent-plugin-forest。
# /opt/td-agent/embedded/bin/gem install fluent-plugin-swift fluent-plugin-forest
5.准备配置文件
编辑 /etc/td-agent/td-agentd.conf
源(日志源)标签的定义
这次,我们将 /var/log/messages 定义为 syslog.messages 标签。
<source>类型 tail 格式 none 标签 syslog.messages 路径 /var/log/messages 位置文件 /var/tmp/messages.pos</source>
匹配(目标 Swift 对象存储)标签定义
,日志将以
/hostname/YYYYMM/hostname_logfilename_YYYYMMDD-HH_NN.gz在对象存储容器(类似于 S3 中的存储桶)中
<match syslog.*>类型:森林 子类型:迅捷<template>auth_url https://ident-r2nd1001.app-sys.jp/v2.0/tokens auth_user "GMO App Cloud Control Panel Login ID" auth_api_key "GMO App Cloud Control Panel Login Password" auth_tenant "Tenant Name" swift_container "Swift Container Name" swift_object_key_format %{path}${hostname}_${tag_parts[0]}.${tag_parts[1]}_%{time_slice}_%{index}.%{file_extension} path %{hostname}/%Y%m/ ssl_verify false buffer_path /var/log/fluent/swift/${tag_parts[0]}.${tag_parts[1]} time_slice_format %Y%m%d-%H time_slice_wait 10m</template></match>
swift_container 中指定的容器名称可以预先创建,但如果不存在,则会自动创建。
6. 运行测试
# td-agent -vv &
您可以直接运行它,但首先让我们在调试模式下运行大约一个小时,并检查以下内容:
- 配置文件格式没有错误。
- 日志正在传输到对象存储
*如果 td-agent 已经在运行,并且您只想测试这次要添加的设置,请准备一个名称不同的配置文件(例如 td-agent.conf.test)。
# td-agent -vv -c /etc/td-agent/td-agent.conf.test &
这样就可以在不影响现有 td-agent 运行的情况下进行测试。
如果将日志传输到对象存储,则会显示以下日志。
YYYY-mm-dd HH:MM:SS +0900 [信息]: 将日志写入 Swift。容器="容器名称" object=hostname/YYYYMM/hostname_log file name_YYYYMMDD-HH_NN.gz
7. 启动 td-agent 并设置为自动启动
# chkconfig td-agent on && service td-agent start
如今基于 Swift 的对象存储已经很少见了,但是它的插件配置与 S3 插件非常相似,所以设置起来应该不会太难。
祝你生活流畅美好。
0