【fluentd】IDCFのオブジェクトストレージに投げるのにハマった話
インフラエンジニアの指原です。
先日IDCFさんの環境でサーバを構築する機会があり、その時にオブジェクトストレージにログを格納するというのがあったんですが、ドハマりしたのでその時のメモです。
構成はこんな感じ
APIサーバ(fluentd) ⇒ log集約サーバ(fluentd) ⇒ オブジェクトストレージ
一般的な構成だと思います。
最初の設定
IDCFさんの公式に手順があったので、それを参考に設定を進めていました。
S3互換のストレージなのでfluent-s3-pluginを使用しています。
初めの設定はこんな感じ
<store> type s3 aws_key_id XXXXXXXXXXXXXXXXXXXX aws_sec_key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX s3_bucket bucket_name s3_endpoint http://ds.jp-east.idcfcloud.com check_apikey_on_start false s3_object_key_format %{path}%{time_slice}_%{index}.%{file_extension} path logs/ buffer_path /var/log/fluent/idcf/buffer/ flush_interval 60s time_slice_format %Y%m%d/%Y%m%d-%H </store>
ただなぜかオブジェクトストレージにアップロードされない。。
バッファファイルの作成は問題なし
エラーを調べてみてもよくわからず・・・
かなりハマりました・・・
答えはfluent-plugin-s3のドキュメントに書いてあった
fluent-plugin-s3のgithubに書いてありました。
signature_version
Signature version for API request.
s3
means signature version 2 andv4
means signature version 4. Default isnil
(Following SDK's default). It would be useful when you use S3 compatible storage that accepts only signature version 2.
要はAPIリクエストの署名バージョンについて
- 署名バージョン2を使うときはs3、バージョン4を使うときはv4を指定してね
- 署名バージョン2のS3互換ストレージに使うと便利ですよ。
- デフォルトはSDKのバージョンに準拠するよ
という感じでしょうか。使用するストレージの署名バージョンに合わせて設定を入れる必要があるようです。
オブジェクトストレージは署名バージョン2のみをサポートしているようだったので
signature_version s3
これを追加したらあっさりいけました。
S3の署名バージョンが4をサポートしたのに合わせてfluent-s3-plugin側でも対応したみたいです。
まとめ
署名バージョンについては他環境のS3互換ストレージでも流用できるので勉強になりました。
今回に限らず公式のドキュメントは英語が多く敬遠しがちですが、やはり答えが書いてあることが多いですね。
英語力を上げていきましょう!