🔍事前に知っておくこと
EC2のログをCloudWatchで管理するとはつまり、EC2のログをCloudWatchに送るということです。
その観点から必要なものが3つあり、それぞれざっくりと解説します。
-
CloudWatchエージェント
EC2のログを収集しCloudWatchに送信するためのソフトウェア -
CloudWatchエージェント設定ファイル
インストールしたCloudWatchエージェントのどのファイルを監視しどのログストリームに管理するか、等の設定が書かれたファイル -
IAMロール
EC2に権限を与え他のリソースを利用できるようにする。
今回は[CloudWatchにデータを送る][SSM読み取り]の2つの権限が必要になる。
🔍やりたいたこと
-
- CloudWatchエージェントをインストールする
-
- CloudWatchエージェントのJSONはSSMパラメータストアで管理しロードしたい
-
- JSONの読み込みは初回のみ手動で今後はEC2再起動のみでSSMパラメータストアを読み込むようにしたい
-
- ログ追加時に通知メールが欲しい
全てをまとめて書くとすごい量になってしまうので2回に分けて解説していきます。
今回は2番目まで解説します。
1~2の手順まででCloudWatchへログの送信自体はできます。
🔍実行手順
前提としてVPC、サブネット、EC2、SGなどの構築は終わっているものとします。
CloudWatchエージェントをインストールする
-
IAMロール作成
以下のポリシーを持つIAMロールを作成する。- [CloudWatchAgentServerPolicy] :CloudWatchにデータを送る
- [AmazonSSMReadOnlyAccess]:SSM読み取り
※EC2内で設定ファイルを作成する場合、[AmazonSSMReadOnlyAccess]は不要。
-
監視したいEC2にCloudWatchエージェントをインストールする
① インストールコマンドを打つ
※これでうまくいくなら2は終わりです。インストールされたことを確認してください。sudo yum install amazon-cloudwatch-agent
② ①が失敗した場合、エージェントインストール予定のEC2のプラットフォームとアーキテクチャを確認
sudo -i uname -m cat /etc/os-release
③ プラットフォームとアーキテクチャごとにCloudWatchエージェントのインストールコマンドは変わるので②で確認した情報と照らし合わせながら、公式サイトを確認し利用可能なダウンロードリンクを探しエージェントをインストールする。
※インストールや解凍に必要なものが足りない場合は別途インストールしてください。
sudo -i wget https://amazoncloudwatch-agent-[利用リージョン].s3.[利用リージョン].amazonaws.com/*** rpm -U ./amazon-cloudwatch-agent.rpm
インストールされたことを確認
yum list installed | grep amazon-cloudwatch-agent
補足(今回は実行不要):
下記コマンドでウィザードを呼び出し、CloudWatchエージェント設定ファイルを生成することもできます。
パラメータストアからのロードを行わない場合はこちらを実行してください。sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
CloudWatchエージェントのJSONはSSMパラメータストアで管理しロードしたい
-
AWSSSMにCloudWatchエージェント設定ファイルを作成し保存する
① SSMパラメータストアに任意の名称のString型で下記の内容を変更し保存する。
{ "agent": { "run_as_user": "root" }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "[監視したいファイルのパス]", "log_group_class": "STANDARD", "log_group_name": "[CloudWatch内のロググループ名]", "log_stream_name": "[CloudWatch内のログストリーム名]", "retention_in_days": [保存日数] }, { "file_path": "[監視したいファイルのパス]", "log_group_class": "STANDARD", "log_group_name": "[CloudWatch内のロググループ名]", "log_stream_name": "[CloudWatch内のログストリーム名]", "retention_in_days": [保存日数] } ] } } } }
② EC2から①で保存した設定を読み込む
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c ssm:[SSM名] -s sudo systemctl enable fetch-cloudwatch-config.service
ロードした設定ファイルを確認
sudo cat /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml
最終確認
- テストログを作成
sudo echo "test log entry at $(date)" >> [監視するファイルのパス]
- AWSコンソール上のCloudWatchから先ほど追加したログが設定ファイルで指定したログストリーム内から確認できることを確認する。
※AWSコンソール上のCloudWatch内でロググループやログストリームは作成しなくても自動で作成される。
🔍まとめ
EC2のログをCloudWatchに送る必要があったのでまとめてみました。
次回の投稿は4週間後の予定なので、残りを解説していこうと思います。