will and way

ただの自分用メモを人に伝える形式で書くことでわかりやすくまとめてるはずのブログ

fluentd(td-agent)でGoogle Cloud Storageにログをためる

初めてrubyを書いた。mixinとかいろいろ省略してかけるとかaliasをメソッドに貼るとか便利だなーというのが感想。

gemの公開もbundleコマンドでさくさく出来たのでこれは開発者にとってかなり魅力的なのでは。エコシステム?が素晴らしい。

さて、本題ですが、今、開発中のfluentdのoutputプラグインの使い方をメモ。Fluentd(td-agent)からGoogle Cloud Storageにログのファイルを直接置くという役割。

ルビー書き始めて2日なのでまだまだクソース&開発中です。まさかりまってます

gem

fluent-plugin-google-cloud-storage-out | RubyGems.org | your community gem host

github

github.com

モチベーション

Google Cloud Storage (以下、GCS)にとりあえずログを置く

GCSに置いとけばあとからBigQueryにインポートできるので、生ログをとりあえずここにためて置くと良さそう。

BigQueryにストリーミングインサートするとお金がかかるし、安定してなかった?という話もあったので、直接GCSに置くことに。

とはいえ、各ホストからログのアグリゲーションをするのもめんどくさそう。いっそ各々でtd-agentが動いてるのでそこから送っちゃおうという魂胆

さらには、オンプレミスで減価償却するよりもクラウドの値段が下がるほうが速いんじゃないのかな。GCSはとてもやすい。

一応既存のものはあったが

fluent-plugin-google-cloud-storage | RubyGems.org | your community gem host

というgemがすでにあったが、最新のGoogle Client APIや認証の形式についていっていないようだし、gem公開をしたかったのでw

使い方

インストール

よしなにgemで

Service Accountを登録し、認証情報(.json)をよしなに配置

GCSのAPI状態がEnableか確認して、鍵を作成。

td-agent.confを編集

<match *.log>
  type google_cloud_storage_out
  service_account_json_key_path /etc/td-agent/client_secrets.json
  bucket_id log-hangar
  path activity/%Y_%m_%d/${hostname}_%H%M_${unique}
  unique_strategy timestamp
  unique_format %S
  format json
  compress gzip

  buffer_type memory
  buffer_chunk_limit 100m
</match>
  • service_account_json_key_path 名の通り、jsonキーのパス
  • bucket_id => bucketは現状は作成済みでなければならない
  • path => GCS上のファイルパス。unique_strategyを設定する場合、${unique}をパスに含まなければならない。含まない場合はローテートされるまえにバッファのフラッシュが2回起きると上書きされてしまう
  • unique_strategy => [increment, timestamp, chunk_id]から選択。${unique}をどう置換するかの実装を選ぶ。
    • increment => 0, 1, 2, ...とカウンタが使われる
    • timestamp => フォーマットに従って、バッファフラッシュ時のタイムスタンプに置換
    • chunk_id => バッファのchunkのユニークIDに置換する
  • unique_format => timestampの場合に使われる。
  • format => デフォルトのfileアウトと同じ実装

再起動

よしなに.テスト時はバッファのmemory容量を10kとか低い値にするとテストしやすかった

参考にしたもの

展望

  • ドキュメント
  • ユニットテスト
  • ストレステスト
  • エラーハンドリング
  • コードスタイルに合わせる
  • 英語を良くする

まとめ

fluentdがプラガブルなので、素人でもとりあえず動くプラグインはかけた。fluentdすごい