AutoScalingグループのEC2でログを取りたい
EC2でWEBアプリケーションなんかを運用していて発生するログを取得したいが、AutoScalingなどで運用しているとログが消えてしまうことがあると思います。
そういう場合はCloudWatch Logsを使いますう。すると随時ログをAWSにエクスポートするような形でAWSコンソールからほぼリアルタイムでログを確認できます。
CloudWatch Logs エージェントではない
過去にCloudWatch Logsを利用した際はCloudWatch Logs エージェントを利用していたのですが、2022年現在ではCloudWatch Logs エージェントは非推奨となっています。文字表記が似ていて勘違いしやすいのですが、現在はCloudWatch エージェントを利用することが推奨されています。
非推奨
推奨
CloudWatch エージェントのインストール
リンクにあるとおりだが
sudo yum install amazon-cloudwatch-agent
で簡単にインストール可能です
ログ取得の設定
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
こちらのコマンドで設定ウィザードを開始できます。
エージェントを Amazon EC2 インスタンスとオンプレミスサーバーのどちらにインストールするか。
- サーバーで Linux と Windows Server のどちらが実行されているか。
- エージェントがログファイルを CloudWatch Logs に送信するようにするか。持っている場合は、既存の CloudWatch Logs エージェント設定ファイルを持っているか。持っている場合、CloudWatch エージェントは、このファイルを使用してサーバーから収集するログを判別できます。
- エージェントがログファイルを CloudWatch Logs に送信する場合、それらのログファイルを保持する必要がある期間。デフォルト値の -1 にすると、ログアイテムは無期限に保持されるように設定されます。
- サーバーからメトリクスを収集する場合は、デフォルトのメトリクスセットの 1 つを監視するか、収集するメトリクスのリストをカスタマイズしますか。
- StatsD または collectd プロトコルを使用して、アプリケーションまたはサービスからカスタムメトリクスを取得しますか。
- 既存の SSM Agent から移行しますか?
聞かれるのは上記項目です。
設定しなければ行けないのはログを取得するを選択して、ファイルを指定、ロググループ名(わかりやすい任意な名前でOK)を設定します。
他のメトリクス等はわからなければ設定なしでOKです。
エージェントの実行
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:configuration-file-path
configuration_file_pathnameには設定ファイルのpathを入れます。設定ウィザードから実行したのであれば/opt/aws/amazon-cloudwatch-agent/bin/config.json
というファイルが出来上がっているはずです。
実行後は
IAMロールなどの権限が問題なければCloudWatch Logsでログが確認できるようになります。