【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.
s3means signature version 2 andv4means 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互換ストレージでも流用できるので勉強になりました。
今回に限らず公式のドキュメントは英語が多く敬遠しがちですが、やはり答えが書いてあることが多いですね。
英語力を上げていきましょう!
0