EC2インスタンスにCloudWatchエージェントをインストールする
/ 7 min read
Table of Contents
はじめに
EC2インスタンスに amazon-cloudwatch-agent
をインストールして実行します。
このエージェントを使用することで以下のことを実行できるようになります。
- インスタンスの内部システムレベルのメトリクスの収集
- ログの収集
参考: https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html
検証環境
- Amazon Linux 2
- amzn2-ami-kernel-5.10-hvm-2.0.20220406.1-x86_64
- amazon-cloudwatch-agent
- 1.247350.0
エージェントで使用するIAMロールの作成
CloudWatchエージェントがCloudWatchにメトリクスを書き込むために必要なアクセス許可をEC2に付与
- AWSコンソールでロールを作成
- 信頼されたエンティティタイプ
- AWSのサービス
- 一般的なユースケース
- EC2
- ポリシー
- CloudWatchAgentServerPolicy
- 作成したロールをEC2インスタンスに設定
エージェントのインストール
% sudo yum install -y amazon-cloudwatch-agent
エージェント設定ファイルの作成
諸事情によりウィザードを使わず手動で作成する。
AWSが提供するサンプルをもとに必要に応じて内容を変更する。設定ファイルはトラブルシューティングを簡単にするため /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
のパスに作成することが推奨されている。
エージェント設定ファイルを手動で作成または編集する場合は、任意の名前を付けることができます。トラブルシューティングを簡単にするため、Linuxサーバーでは、/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json、Windows Serverを実行しているサーバーでは、$Env:ProgramData \Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent.jsonという名前を付けることをお勧めします。
{ "agent": { # この設定ファイルで指定されたすべてのメトリクスが収集される頻度を指定 "metrics_collection_interval": 10, # CloudWatchエージェントがログメッセージを書き込む場所を指定 "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log" }, "metrics": { # エージェントによって収集されるメトリクスに使用する名前空間 "namespace": "MyCustomNamespace", # 収集するメトリクスを指定 "metrics_collected": { "cpu": { "resources": [ "*" ], "measurement": [ # CPUがアイドル状態の時間の割合。 {"name": "cpu_usage_idle", "rename": "CPU_USAGE_IDLE", "unit": "Percent"}, # プロセスの優先度が低く、優先度の高いプロセスによって簡単に中断される場合がある、ユーザーモードになっているCPUの時間の割合。 {"name": "cpu_usage_nice", "unit": "Percent"}, # ゲストオペレーティングシステムでCPUが仮想CPUを実行している時間の割合。 "cpu_usage_guest" ], # すべてのCPUコア間で集計されたCPUメトリクスを報告するかどうかを指定 "totalcpu": false, "metrics_collection_interval": 10, "append_dimensions": { "customized_dimension_key_1": "customized_dimension_value_1", "customized_dimension_key_2": "customized_dimension_value_2" } }, "disk": { "resources": [ "/", "/tmp" ], "measurement": [ # ディスクの空き容量。 {"name": "free", "rename": "DISK_FREE", "unit": "Gigabytes"}, "total", # 使用済み容量と空き容量を含む、ディスクの合計容量。 "used" # ディスクの使用済み容量。 ], # diskメトリクスを収集するときに除外するファイルシステムのタイプを指定 "ignore_file_system_types": [ "sysfs", "devtmpfs" ], "metrics_collection_interval": 60, "append_dimensions": { "customized_dimension_key_3": "customized_dimension_value_3", "customized_dimension_key_4": "customized_dimension_value_4" } }, "diskio": { "resources": [ "*" ], "measurement": [ "reads", # ディスク読み取り操作の回数。 "writes", # ディスク書き込み操作の回数。 "read_time", # 読み取りリクエストがディスクで待機した時間の長さ。 "write_time", # 書き込みリクエストがディスクで待機した時間の長さ。 "io_time" # ディスクがI/Oリクエストをキューに入れている時間の長さ。 ], "metrics_collection_interval": 60 }, "swap": { "measurement": [ "swap_used", # 現在使用中のスワップスペースの量。 "swap_free", # 使用されていないスワップスペースの量。 "swap_used_percent" # 現在使用中のスワップスペースの割合。 ] }, "mem": { "measurement": [ "mem_used", # 現在使用中のメモリの量。 "mem_cached", # ファイルキャッシュに使用されているメモリの量。 "mem_total" # メモリの合計量。 ], "metrics_collection_interval": 1 }, "net": { "resources": [ "eth0" ], "measurement": [ "bytes_sent", # ネットワークインターフェイスで送信されたバイトの数。 "bytes_recv", # ネットワークインターフェイスで受信されたバイトの数 "drop_in", # このネットワークインターフェイスで受信されたパケットのうち、削除されたものの数。 "drop_out" # このネットワークインターフェイスで送信されたパケットのうち、削除されたものの数。 ] }, "netstat": { "measurement": [ "tcp_established", # 確立されたTCP接続の数。 "tcp_syn_sent", # 接続リクエストを送信したあとに一致する接続リクエストを待機しているTCP接続の数。 "tcp_close" # 状態のないTCP接続の数。 ], "metrics_collection_interval": 60 }, "processes": { "measurement": [ "running", # 実行されているプロセスの数。 "sleeping", # スリープ状態になっているプロセスの数。 "dead" # 「dead」となっているプロセスの数。 ] } }, # エージェントによって収集されたメトリクスにAmazon EC2メトリクスのディメンションを追加 "append_dimensions": { "ImageId": "${aws:ImageId}", # インスタンスのAMI IDをImageIDディメンションの値として設定 "InstanceId": "${aws:InstanceId}", # インスタンスのインスタンスIDをInstanceIDディメンションの値として設定 "InstanceType": "${aws:InstanceType}", # インスタンスのインスタンスタイプをInstanceTypeディメンションの値として設定 "AutoScalingGroupName": "${aws:AutoScalingGroupName}" # インスタンスのAuto Scalingグループ名をAutoScalingGroupNameディメンションの値として設定 }, # 収集されたメトリクスが集計されるディメンションを指定 "aggregation_dimensions" : [["ImageId"], ["InstanceId", "InstanceType"], ["d1"],[]], # メトリクスがサーバーに送信されるまでにメモリバッファ内に残留する最大時間を秒単位で指定 "force_flush_interval" : 30 }, "logs": { # サーバーから収集するログファイルを指定 "logs_collected": { "files": { "collect_list": [ { "file_path": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log", "log_group_name": "amazon-cloudwatch-agent.log", "log_stream_name": "amazon-cloudwatch-agent.log", "timezone": "UTC" }, { "file_path": "/opt/aws/amazon-cloudwatch-agent/logs/test.log", "log_group_name": "test.log", "log_stream_name": "test.log", "timezone": "Local" } ] } }, # 個別のログストリーム名がcollect_listパラメータに定義されていない場合、代わりに使用するデフォルトのログストリーム名を指定 "log_stream_name": "my_log_stream_name", "force_flush_interval" : 15 }}
設定ファイルの構造やその他のフィールドについては以下を参照
CloudWatchエージェントで取得できるその他のメトリクスは以下を参照
エージェントの起動
% sudo amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
オプション | 説明 |
---|---|
-a(action) fetch-config | apply config for agent, followed by -c or -o or both. Target config can be based on location (ssm parameter store name, file name), or ‘default’. |
-m(mode) ec2 | indicate this is on ec2 host. |
-s | optionally restart after configuring the agent configuration this parameter is used for ‘fetch-config’, ‘append-config’, ‘remove-config’ action only. |
-c file:<file-path> | file path on the host. |
その他のオプションは amazon-cloudwatch-agent-ctl --help
で確認できる。
エージェントの起動確認
% sudo amazon-cloudwatch-agent-ctl -m ec2 -a status
statusが running
になっていればOK
動作していない場合はトラブルシューティングを参照