CYA オレオレS3
問題名
オレオレS3
概要
nginxのログをfluentdで管理したいと思っています。
fluentdのバックエンドとして、S3互換であるオブジェクトストレージminioを構築しました。
しかし、うまく接続することができません。
前提条件
- nginxの設定を変えてはいけない
- vm2にはsshできない
- fluentd,とminio以外のツールを用いて問題を解決してはならない
- 他のオブジェクトストレージをインストールするなど
- minioではなくクラウドサービス(AWS S3など)を利用するなど
初期状態
curl localhost
を実行すると、fluentdに以下のようにエラーが出る。
/var/log/td-agent/td-agent.log
2023-03-01 03:11:29 +0900 [error]: #0 unexpected error error_class=RuntimeError error="can't call S3 API. Please check your credentials or s3_region configuration. error = #<seahorse::client::networkingerror: failed="" to="" open="" tcp="" connection="" test.192.168.19.2:9000="" (getaddrinfo:="" name="" or="" service="" not="" known)="">"
```</seahorse::client::networkingerror:>
## 終了状態
fluentdでログを収集できる。つまり以下を閲覧してもエラーメッセージが出てない。
`/var/log/td-agent/td-agent.log`
また、awscliコマンドなど何らかの方法でminioにリクエストを飛ばして、ログが保存されていることを確認できる。
```shell
$ sudo apt install awscli
$ aws configure --profile minio
AWS Access Key ID [None]: saJ4MVuD7lcFdDnq
AWS Secret Access Key [None]: bbrT3KuHRKebkvADOBYNH2w73Jgmt72C
Default region name [None]: ap-northeast-1
Default output format [None]:
$ aws --profile minio --endpoint-url http://192.168.19.2:9000 s3 ls --recursive s3://test/
2023-03-01 03:36:37 129 logs/2023/03/01_0.gz
2023-03-01 03:37:43 127 logs/2023/03/01_1.gz
2023-03-01 03:41:29 162 logs/2023/03/01_2.gz
2023-03-01 03:45:13 168 logs/2023/03/01_3.gz
```
解説
概要
本問題はS3のアドレスモデルに関する問題です。
問題の開始状態では、td-agentからminio上のバケットに対してログを送信しようとすると失敗している。
そのため、エラーログを確認すると以下のようなログが出力されており、一見するとクレデンシャルかs3_regionの設定が良くないように見える。
Please check your credentials or s3_region configuration.
しかし、実際はエンドポイントのアドレスモデルに関してはtd-agentのs3プラグインではpath-style形式を、minioのvirtual-hosted style形式をデフォルトで採用している。
なので、今回の問題ではSSHで設定の変更が可能なVM上で動作しているtd-agentのコンフィグを書き換えることで問題解決をできました。
また、td-agentの実行時に権限が足りていない問題も別途存在しているため、こちらも採点対象としていました。
解答手順
/etc/td-agent/td-agent.conf のs3_regionの下に以下の内容を挿入
force_path_style true
また、グループを追加する
sudo usermod -aG adm td-agent
採点基準
- 50%: 権限の問題が解決できているか
- 50%: td-agentのアドレスモデルの設定を適切なものに変更できているか