どんな事でもお気軽にお問い合わせください
06-6567-0924

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のインストール

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

# 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を編集します

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

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

<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
という形式でログを保存します

<match syslog.*>
  type forest
  subtype swift
  <template>
    auth_url https://ident-r2nd1001.app-sys.jp/v2.0/tokens
    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.動作テスト

# td-agent -vv &

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

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

*すでに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 [info]: Put Log to Swift. container="コンテナ名" object=ホスト名/YYYYMM/ホスト名_ログファイル名_YYYYMMDD-HH_NN.gz

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

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

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

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


お問い合わせ 採用情報 エンジニアブログ
ISO27001認証
Contact PageTop
株式会社ビヨンド

© beyond Co., Ltd. All rights reserved.

mautic is open source marketing automation