SpringBootからCloudWatchにログを出力できなかったときの解決方法
結論
-
Slf4jがデフォルトで出力するログ形式とCloudWatch Agentが読み込むログの形式があっていなかった。 -
「CloudWatchAgent」 と「CloudWatch Logsエージェント」が競合していた。
前提
- EC2インスタンス
- t2.micro
- Java環境
- openjdk version "11.0.11" 2021-04-20 LTS(Corretto-11.0.11.9.1)
- SpringBooot 2.7.3
- 開発環境
- MacBookPro 2017 (BigSur, intel corei7)
解決方法
Slf4jの出力形式を指定して、CloudWatchが適切にログを読み込めるようにします。
1 . 「CloudWatch Logsエージェント」を削除する
$ sudo systemctl stop awslogs
$ sudo systemctl disable awslogs
- 「CloudWatchAgent」をインストールする
次のサイトを参考にEC2インスタンスへCloudWatchAgentをインストールします。
他に確認すべきこと
- EC2インスタンスのロール
EC2のインスタンスに以下のポリシーがアタッチされていることを確認します。
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogStreams"
- VPCサブネットのセキュリティグループ
アウトバウンドに宛先:インターネット(0.0.0.0/0)、ポート:HTTPS(443)が追加されていることを確認します。
(プライベートサブネットで運用する必要がある場合は、VPCエンドポイントを宛先に追加します)
参考記事
Qiita参考記事
AWS公式