【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

fluentd 3分クッキング swiftオブジェクトストレージにログを転送する方法

こんにちは、最近fluentdと戯れる機会の多い佐藤です

とある案件でGMOアプリクラウドさんを使わせていただいているのですが、稼働しているサーバのログをfluentdで1時間単位に区切ってオブジェクトストレージに保存してほしいというご要望をいただきました。

「オブジェクトストレージですね!多分S3互換だから楽勝です!」

と大見得を切ったのですが。。。。。

GMOアプリクラウド オブジェクトストレージ

オブジェクトストレージは、お客様管理のサーバーからOpenStackのSwiftベースのAPIで操作いただきます。

何?Swiftとな??

スタートからいきなりつまづきました、、、GMOアプリクラウドさんのオブジェクトストレージに関するリファレンスではcurlやPython-swiftclient、Cyberduckを使った操作例はあるものの、どれもfluentdと連携させるには不向きですし自前でログ転送のプログラムを組むのもなぁ、と思っていたら。。。

便利なものがありました!
fluent-plugin-swift
こういう痒いところに手が届くプラグインを作ってくれた作者の方に感謝です

というわけで

fluentd3分クッキング (GMOアプリクラウド)swiftオブジェクトストレージ編

材料です

1.fluentdと必要なプラグイン

  • fluentd(td-agent) 新鮮(最新版)なもの
  • fluent-plugin-swift
  • fluent-plugin-forest

*お好みですが本レシピはforestを使う前提です

2.swiftオブジェクトストレージにアクセスするために必要な情報

GMOアプリクラウドのコントロールパネル>サービス>API情報 から以下を確認してください

サービス情報:テナント名 appで始まる20桁の番号
*テナントIDという情報もありますが今回は使いません

エンドポイント:identity v2.0(認証)
*いろいろなエンドポイント情報がありますが今回はこちらを使います

GMOアプリクラウドのコントロールパネルのログインiD/パスワードも必要です
材料がそろったら調理に入りましょう

3.fluentdのインストール

インストール前の推奨設定は終わっている前提で公式ページに書かれているとおりにインストールしましょう

4.プラグインのインストール

fluent-plugin-swiftとfluent-plugin-forestをインストールしましょう。

1
# /opt/td-agent/embedded/bin/gem install fluent-plugin-swift fluent-plugin-forest

5.設定ファイルの準備

/etc/td-agent/td-agentd.confを編集します

source(転送元のログ)タグの定義

今回は/var/log/messagesをsyslog.messagesというタグで定義します

1
2
3
4
5
6
7
<source>
  type tail
  format none
  tag syslog.messages
  path /var/log/messages
  pos_file /var/tmp/messages.pos
</source>

match(転送先のswiftオブジェクトストレージ)タグの定義

今回はオブジェクトストレージのコンテナ(S3でいうバケット)の中に
/ホスト名/YYYYMM/ホスト名_ログファイル名_YYYYMMDD-HH_NN.gz
という形式でログを保存します

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<match syslog.*>
  type forest
  subtype swift
  <template>
    auth_user "GMOアプリクラウドのコントロールパネルのログインiD"
    auth_api_key "GMOアプリクラウドのコントロールパネルのログインパスワード"
    auth_tenant "テナント名"
    swift_container "swiftのコンテナ名"
    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_containterで指定するコンテナ名はあらかじめ作成しておいてもOKですが、なければ自動的に作られます

6.動作テスト

1
# td-agent -vv &

いきなり動かしても良いですが、まずはデバッグモードで1時間ほど様子を見て以下を確認しましょう。

  • 設定ファイルの書式にエラーが出てないこと
  • ログがオブジェクトストレージに転送されていること

*すでにtd-agentが動いていて今回追加する予定の設定だけを試したい場合は、設定ファイルを別名で用意(例:td-agent.conf.test)して

1
# td-agent -vv -c /etc/td-agent/td-agent.conf.test &

とすれば既存のtd-agentの動作に影響を与えることなくテストができます。

ログがオブジェクトストレージに転送されればこんなログが出ます

1
YYYY-mm-dd HH:MM:SS +0900 [info]: Put Log to Swift. container="コンテナ名" object=ホスト名/YYYYMM/ホスト名_ログファイル名_YYYYMMDD-HH_NN.gz

7.td-agentの起動と自動起動設定

1
# chkconfig td-agent on && service td-agent start

swiftベースのオブジェクトストレージは最近ではなかなか見かけませんが、プラグインの設定はS3プラグインとよく似ているのでそれほど設定は難しくないかと思います。

それでは良きfluentdライフを。

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
0
読み込み中...
0 票, 平均: 0.00 / 10
1,064
X facebook はてなブックマーク pocket
【2026.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【2026.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

この記事をかいた人

About the author

佐藤聖賢

ピンチになると第6感が冴えるが基本はオールドタイプのエンジニア
今はカナダオフィスで仕事してます。