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

大家好,我是佐藤,最近一直在研究 Fluentd。

我们正在使用 GMO App Cloud 进行某个项目,并且我们收到一个请求,要求使用 fluentd 将运行服务器的日志以一小时为增量存储在对象存储中。

“对象存储!它可能兼容S3,所以用起来很方便!”

但..

GMO AppliCloud 对象存储

对象存储由客户管理的服务器使用基于 OpenStack Swift 的 API 进行操作。

什么?用Swift?

我一开始就遇到了难题……虽然 GMO AppliCloud 的对象存储参考文档中有使用 curl、Python-swiftclient 和 Cyber​​duck 的操作示例,但它们都不适合与 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
加载中...
0票,平均分:0.00/10
1,336
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

佐藤圣坚

我的第六感在关键时刻很敏锐,但我本质上是个老派的工程师。我
目前在加拿大办公室工作。