🪢
Amazon CloudWatchエージェント パラメータストアから設定ファイルを適用する
はじめに
本ページは個人の勉強で使用することを目的に作成しておりますが、記載の誤り等が含まれる場合がございます。
最新の情報についてはAWS公式ドキュメントをご参照ください。
やること
- EC2インスタンスにSystemManager RunCommandを使用してCloudWatchエージェントのインストール、SystemManager Parameter Storeの設定ファイルの読み込みを行う。
- CloudWatchエージェントにより、EC2インスタンスのメトリクス、systemログ、cronログを収集する。
前提条件
- VPC、サブネット、EC2インスタンス、VPCエンドポイントといったリソースはすでに構築済みとします。
- 使用するEC2インスタンスはAmazon Linux 2023です。
1. Run CommandによるCloudWatchエージェントのインストール
- SystemManagerコンソールのナビゲーションペインからRun Commandをクリックします。
- Run Commandをクリックします。
- コマンドの実行画面で下記の設定値を入力し、実行をクリックします。
- コマンドドキュメント
- AWS-ConfigureAWSPackage
- ドキュメントのバージョン:ランタイムの最初バージョン
- コマンドのパラメータ
- Action:install
- installation Type:Uninstall and reinstall
- Installation Type:Uninstall and reinstall
- Name:AmazonCloudWatchAgent
- Version:未記入
- Additional Arguments:{} ※デフォルト
- ターゲット:インスタンスを手動で選択する。
- インスタンス:mori-ec2-cloudwatch-agent ※インストール先のEC2
- その他のパラメータ
- コメント:未記入
- タイムアウト:600 ※デフォルト
- 出力オプション
- コマンド出力の Amazon S3 バケットへの書き込み:未選択
- コマンド出力を Amazon CloudWatch Logs に書き込む:未選択
- CloudWatch alarm - optional
- Alarm name:未選択
- SNS 通知
- SNS 通知の有効化:未選択
- AWS コマンドラインインターフェイスのコマンド
- プラットフォーム:Linux/Unix/OS X
- CLIコマンド:※自動で生成
- 実行後、コマンドIDをクリックしてコマンドのステータスが成功となっていることを確認できます。
2. Run Commandによる必要サービスのインストール
1.RunCommandコンソールのコマンドの実行画面から、下記の設定値を入力して実行をクリックします。
- コマンドドキュメント
- AWS-RunShellScript
- ドキュメントのバージョン:ランタイムの最初バージョン
- コマンドのパラメータ
# タイムゾーンをJSTに変更
sudo timedatectl set-timezone Asia/Tokyo
# rsysrogのインストール、起動設定の有効化、再起動
sudo dnf install -y rsyslog
sudo systemctl enable rsyslog
sudo systemctl restart rsyslog
# crondのインストール、起動設定の有効化、再起動
sudo dnf install -y cronie-noanacron
sudo systemctl enable crond
sudo systemctl restart crond
# collectdのインストール、起動設定の有効化、再起動
sudo dnf install -y collectd
sudo systemctl enable collectd
sudo systemctl restart collectd
# cloudwatch-agentのインストール、起動設定の有効化、再起動
sudo systemctl enable amazon-cloudwatch-agent.service
sudo systemctl restart amazon-cloudwatch-agent.service
# 収集するディレクトリのパーミッションを変更
sudo chmod 644 /var/log/messages
sudo chmod 644 /var/log/cron
- Working Directory:未記入
- Execution Timeout:3600 ※デフォルト
- ターゲット
- インスタンスを手動で選択する。
- インスタンス:mori-ec2-cloudwatch-agent
- その他のパラメータ
- コメント:未記入
- タイムアウト:600 ※デフォルト
- レート制御
- 同時実行数:ターゲット:1 ※デフォルト
- エラーのしきい値:エラー:0 ※デフォルト
- 出力オプション
- コマンド出力の Amazon S3 バケットへの書き込み:未選択
- コマンド出力を Amazon CloudWatch Logs に書き込む:未選択
- CloudWatch alarm - optional
- Alarm name:未選択
- SNS 通知
- SNS 通知の有効化:未選択
- AWS コマンドラインインターフェイスのコマンド
- プラットフォーム:Linux/Unix/OS X
- CLIコマンド:※自動で生成
3. パラメータストアに設定ファイルを作成
- パラメータを作成します。
- 名前:/mori/cloudwatch-agent/config
- 値
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "cwagent"
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/messages",
"log_group_class": "STANDARD",
"log_group_name": "/var/log/messages",
"log_stream_name": "{instance_id}",
"retention_in_days": -1
},
{
"file_path": "/var/log/cron",
"log_group_class": "STANDARD",
"log_group_name": "/var/log/cron",
"log_stream_name": "{instance_id}",
"retention_in_days": -1
}
]
}
}
},
"metrics": {
"namespace": "dev/mori-metrics-cwagent-test",
"aggregation_dimensions": [
[
"InstanceId"
]
],
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"endpoint_override": "★モニタリング用のエンドポイントID.monitoring.ap-northeast-1.vpce.amazonaws.com",
"metrics_collected": {
"collectd": {
"metrics_aggregation_interval": 60
},
"cpu": {
"measurement": [
"cpu_usage_idle",
"cpu_usage_iowait",
"cpu_usage_user",
"cpu_usage_system"
],
"metrics_collection_interval": 60,
"resources": [
"*"
],
"totalcpu": false
},
"disk": {
"measurement": [
"used_percent",
"inodes_free"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"diskio": {
"measurement": [
"io_time"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
},
"statsd": {
"metrics_aggregation_interval": 60,
"metrics_collection_interval": 10,
"service_address": ":8125"
},
"swap": {
"measurement": [
"swap_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}
設定ファイルについて
- 名前空間dev/mori-metrics-cwagent-testに指定したメトリクスを出力する。
- ロググループ名 /var/log/messages, /var/log/cronにログを出力する。
参考
4. RunCommandによる設定ファイルのEC2インスタンスへの適用
1.RunCommandコンソールのコマンドの実行画面から、下記の設定値を入力して実行をクリックします。
- コマンドドキュメント
- AmazonCloudWatch-ManageAgent
- ドキュメントのバージョン:ランタイムの最初バージョン
- コマンドのパラメータ
- Action:configure
- Mode:ec2
- Optional Configuration Source:ssm
- Optional Configuration Location:パラメータ名
- Optional Restart:yes
- ターゲット
- インスタンスを手動で選択する。
- インスタンス:mori-ec2-cloudwatch-agent ※設定対象のインスタンス
- その他のパラメータ
- コメント:未記入
- タイムアウト:600 ※デフォルト
- レート制御
- 同時実行数:ターゲット:1 ※デフォルト
- エラーのしきい値:エラー:0 ※デフォルト
- 出力オプション
- コマンド出力の Amazon S3 バケットへの書き込み:未選択
- コマンド出力を Amazon CloudWatch Logs に書き込む:未選択
- CloudWatch alarm - optional
- Alarm name:未選択
- SNS 通知
- SNS 通知の有効化:未選択
- AWS コマンドラインインターフェイスのコマンド
- プラットフォーム:Linux/Unix/OS X
- CLIコマンド:※自動で生成
5. CloudWatchの確認
- メトリクスの名前空間
dev/mori-metrics-cwagent-test
に指定したメトリクスが出力されています。
- ロググループ
/var/log/messages
と/var/log/cron
にログが出力されています。
おわりに
-
設定ファイルの内容を使いまわせるので、ウィザードから設定ファイルを作成するよりも監視対象のEC2が複数ある場合に便利ですね。
-
ウィザードで作成する方法、VPCエンドポイントなどは以下の記事にまとめています。
Discussion