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
モチベーション
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とか低い値にするとテストしやすかった
参考にしたもの
- fluent-plugin-google-cloud-storage
- PRもいくつか送っているが、そもそもこれを参考に書きなおしている
- google-api-ruby-client
- gemを公開するまでの手順
- 数コマンドでクソースをパブリッシュできちゃう怖さ。
- 検索: fluent-plugin-redshiftとかたくさんある。GCS関連はまだ上述のものと私が書いたものの2つだけ。
展望
- ドキュメント
- ユニットテスト
- ストレステスト
- エラーハンドリング
- コードスタイルに合わせる
- 英語を良くする
まとめ
fluentdがプラガブルなので、素人でもとりあえず動くプラグインはかけた。fluentdすごい