何をしようとしたのか
タイトルの通り、EC2インスタンスのログをCloudWatchLogsに集めるためにCloudWatchLogsエージェントを使用しているのだが、 新しいAMIに導入したところ転送処理が行われなくなったのでそのときの対処したことを記録しておく。
詳しい状況(調査履歴、結論だけでも十分です)
同様の現象が別の要因によって起こることもありうるので、一応こんな感じでしたということを記載しておく。
プロセスはちゃんとrunning
$ systemctl status awslogs.service ● awslogs.service - LSB: Daemon for AWSLogs agent. Loaded: loaded (/etc/init.d/awslogs; generated) Active: active (exited) since Thu 2019-10-10 02:53:04 UTC; 52s ago Docs: man:systemd-sysv-generator(8) Process: 2802 ExecStop=/etc/init.d/awslogs stop (code=exited, status=0/SUCCESS) Process: 2833 ExecStart=/etc/init.d/awslogs start (code=exited, status=0/SUCCESS) Oct 10 02:53:04 ip-172-31-31-162 systemd[1]: Starting LSB: Daemon for AWSLogs agent.... Oct 10 02:53:04 ip-172-31-31-162 awslogs[2833]: Starting system awslogs daemon Oct 10 02:53:04 ip-172-31-31-162 awslogs[2833]: process already running. Oct 10 02:53:04 ip-172-31-31-162 awslogs[2833]: * /var/awslogs/bin/awslogs-agent-launcher.sh is running Oct 10 02:53:04 ip-172-31-31-162 systemd[1]: Started LSB: Daemon for AWSLogs agent..
ログを確認
設定ファイルないと怒られている。
$ cat /var/log/awslogs.log File '/var/awslogs/etc/awslogs.conf' does not exist File '/var/awslogs/etc/awslogs.conf' does not exist
設定ファイル確認
特に指定しなければデフォルトでは/var/awslogs/etc/awslogs.conf
にあるはず…
→なかった。自動デプロイがうまく行ってなかったのかな?手動でエージェントを再実行してみよう!
手動でエージェントに設定をフェッチ
$ ./awslogs-agent-setup.py -n -r ap-northeast-1 -c s3://cloudwatch-configuration/cloudwatch-config Step 1 of 5: Installing pip ...libyaml-dev does not exist in system DONE Step 2 of 5: Downloading the latest CloudWatch Logs agent bits ... DONE fatal error: Unable to locate credentials Step 5 of 5: Setting up agent as a daemon ...DONE ------------------------------------------------------ - Configuration file successfully saved at: /var/awslogs/etc/awslogs.conf - You can begin accessing new log events after a few moments at https://console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logs: - You can use 'sudo service awslogs start|stop|status|restart' to control the daemon. - To see diagnostic information for the CloudWatch Logs Agent, see /var/log/awslogs.log - You can rerun interactive setup using 'sudo python ./awslogs-agent-setup.py --region ap-northeast-1 --only-generate-config' ------------------------------------------------------
途中失敗しているけどConfiguration file successfully saved at: /var/awslogs/etc/awslogs.conf
ってでているのでおそらくうまく行っているかな?。
→色々見に行った結果、また設定ファイルがないことを確認…
結論
今回はS3から設定ファイルをインストールするようにコマンドの引数で指示していたが、どうやらインスタンスにアタッチしていたロールではS3:GetObject
が許可されておらずダウンロードできていなかったようだ。
(なんでsuccessって出たんだ…そうしたら余計な不具合調査せずにわかったのに…)
どうやら次のように表示が出ることもあるらしく、おそらくそれなら気づいていたと思う。
# ./awslogs-agent-setup.py -n -r ap-northeast-1 -c s3://cloudwatch-configuration/cloudwatch-config Step 1 of 5: Installing pip ...libyaml-dev does not exist in system DONE Step 2 of 5: Downloading the latest CloudWatch Logs agent bits ... DONE fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden Step 5 of 5: Setting up agent as a daemon ...DONE
うまく行った場合のログ
$ ./awslogs-agent-setup.py -n -r ap-northeast-1 -c s3://cloudwatch-configuration/cloudwatch-config Step 1 of 5: Installing pip ...libyaml-dev does not exist in system DONE Step 2 of 5: Downloading the latest CloudWatch Logs agent bits ... DONE download: s3://cloudwatch-configuration/cloudwatch-config to ../var/awslogs/etc/awslogs.conf Step 5 of 5: Setting up agent as a daemon ...DONE
また一応設定ファイルも確認してみた。
$ ls /var/awslogs/etc/ aws.conf awslogs.conf config proxy.conf
ちゃんとあるみたい、ログも転送されるようになっていた。 AWSではIAMでうまく行かないことが多いので、今度権限不足で少し詰まったやつをまとめようと思う。