新しいCloudWatch Agentでメトリクスとログの収集が行なえます
ウィスキー、シガー、パイプをこよなく愛する大栗です。
先程新しいCloudWatch Agentが発表されました。AWS Systems Managerと統合されてメトリクスやログの収集を行えますのでご紹介します。
CloudWatch Agent
今まではEC2の詳細なメトリクスをCloudWatch上で確認するためには。collectdのCloudWatchプラグインやCloudWatch Monitoring Script、または自身のカスタムスクリプトなどでデータを収集してCloudWatchへアップロードする必要がありました。
新しいCloudWatch AgentによりAmazon EC2から標準外のメトリクスとログの両方を収集できます。またオンプレミスサーバーからもシステムレベルのメトリクスとログの収集が可能です。
対象OS
CloudWatch Agentは以下のOSでサポートされています。
- Amazon Linux version 2014.03.02 以降
- Ubuntu Server version 16.04 と 14.04
- CentOS version 7.0 と 6.5
- Red Hat Enterprise Linux (RHEL) version 7.4, 7.0, 6.5
- Debian 8.0
- 64bit版の Windows Server 2016, Windows Server 2012, and Windows Server 2008
収集可能なメトリクス
CloudWatch Agentの設定をウィザードで行うとDetail Levelがあり、Basic
、Standard
、Advanced
の3つのレベルがあります。各々のレベルに応じて取得できるメトリクスが異なります。また、オンプレミスかEC2か、LinuxかWindowsかによっても取得できるメトリクスが異なります。取得できるメトリクスの詳細はドキュメントを参照ください。
CloudWatch Agent Predefined Metric Sets
設定ファイルを自分で編集すれば、取得するメトリクスをカスタマイズすることもできます。
Manually Create or Edit the CloudWatch Agent Configuration File
試してみた
事前準備
EC2用のIAM Roleを作成します。権限はマネージドポリシーのAmazonSSMFullAccess
とAmazonEC2ReadOnlyAccess
をアタッチします。
Linux版
以下の環境でCloudWatch Agentをインストールします。
- リージョン:東京
- AMI:ami-da9e2cbc (Amazon Linux AMI 2017.09.0.20170930 x86_64 HVM GP2)
- インスタンスタイプ:t2.small
SSMエージェントのアップデート
SSMエージェントのバージョンは2.2.93.0以上が必要です。AWS Systems Manager経由でアップデートします。Run CommandでコマンドのドキュメントでAWS-UpdateSSMAgent
を選択します。対象インスタンスを選択して実行します。
しばらくすると成功します。出力を確認するとバージョン 2.2.103.0になったことが分かります。
Updating amazon-ssm-agent from 2.2.45.0 to latest Successfully downloaded https://s3.us-west-2.amazonaws.com/amazon-ssm-us-west-2/ssm-agent-manifest.json Successfully downloaded https://s3.us-west-2.amazonaws.com/amazon-ssm-us-west-2/amazon-ssm-agent-updater/2.2.103.0/amazon-ssm-agent-updater-linux-amd64.tar.gz Successfully downloaded https://s3.us-west-2.amazonaws.com/amazon-ssm-us-west-2/amazon-ssm-agent/2.2.45.0/amazon-ssm-agent-linux-amd64.tar.gz Successfully downloaded https://s3.us-west-2.amazonaws.com/amazon-ssm-us-west-2/amazon-ssm-agent/2.2.103.0/amazon-ssm-agent-linux-amd64.tar.gz Initiating amazon-ssm-agent update to 2.2.103.0 amazon-ssm-agent updated successfully to 2.2.103.0
CloudWatch Agentのインストール
ここではAWS Systems Manager経由でインストールします。Run CommandでコマンドのドキュメントでAWS-ConfigureAWSPackage
を選択します。
ターゲットに対象のインスタンスを選択します。
コマンドのパラメータは以下のように設定します。
- Action:Install
- Name:AmazonCloudWatchAgent
- Version:latest
実行して少し経つと成功します。
出力結果を見るとバージョン 1.73.9がインストールされたことが分かります。
got manifest for package arn:aws:ssm:::package/AmazonCloudWatchAgent version 1.73.9 isSameAsCache false installed: in state 0, to install: 1.73.9 package version path for package arn:aws:ssm:::package/AmazonCloudWatchAgent version 1.73.9 is /var/lib/amazon/ssm/packages/_arnawsssmpackageamazoncloudwatchagent_2B_HP6ASKUGHXDL73H24T7UUUKNWXRDTKWGMMX5YMXLDHWGQE2KUPXA====/1.73.9 6 files exist in /var/lib/amazon/ssm/packages/_arnawsssmpackageamazoncloudwatchagent_2B_HP6ASKUGHXDL73H24T7UUUKNWXRDTKWGMMX5YMXLDHWGQE2KUPXA====/1.73.9 0 folders exist in /var/lib/amazon/ssm/packages/_arnawsssmpackageamazoncloudwatchagent_2B_HP6ASKUGHXDL73H24T7UUUKNWXRDTKWGMMX5YMXLDHWGQE2KUPXA====/1.73.9 package version path for package arn:aws:ssm:::package/AmazonCloudWatchAgent version 1.73.9 is /var/lib/amazon/ssm/packages/_arnawsssmpackageamazoncloudwatchagent_2B_HP6ASKUGHXDL73H24T7UUUKNWXRDTKWGMMX5YMXLDHWGQE2KUPXA====/1.73.9 0 files exist in /var/lib/amazon/ssm/packages/_arnawsssmpackageamazoncloudwatchagent_2B_HP6ASKUGHXDL73H24T7UUUKNWXRDTKWGMMX5YMXLDHWGQE2KUPXA====/1.73.9 0 folders exist in /var/lib/amazon/ssm/packages/_arnawsssmpackageamazoncloudwatchagent_2B_HP6ASKUGHXDL73H24T7UUUKNWXRDTKWGMMX5YMXLDHWGQE2KUPXA====/1.73.9 Current Target 1.73.9 State 0 Refreshing package content for arn:aws:ssm:::package/AmazonCloudWatchAgent 1.73.9 Initiating arn:aws:ssm:::package/AmazonCloudWatchAgent 1.73.9 install Plugin aws:runShellScript ResultStatus Success install output: Running sh install.sh Successfully installed arn:aws:ssm:::package/AmazonCloudWatchAgent 1.73.9
設定内容の決定
設定ファイルの初期化を行います。ここではウィザードで実行します。
$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard ============================================================= = Welcome to the AWS CloudWatch Agent Configuration Manager = =============================================================
Linuxなので、そのままEnterをクリックします。
Which OS are you planning to use the agent? 1. linux 2. windows default choice: [1]:
EC2なので、そのままEnterをクリックします。
Trying to fetch the default region based on ec2 metadata... Are you using EC2 or On-Premises hosts? 1. EC2 2. On-Premises default choice: [1]:
ホストのメトリクスを収集したいので、そのままEnterをクリックします。
Do you want to monitor any host metrics? e.g. CPU, memory, etc. 1. yes 2. no default choice: [1]:
コア当たりのCPUメトリクスと収集するため、そのままEnterをクリックします。
Do you want to monitor cpu metrics per core? Additional CloudWatch charges may apply. 1. yes 2. no default choice: [1]:
利用可能な情報でディメンションを使用したいので、そのままEnterをクリックします。
Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available? 1. yes 2. no default choice: [1]:
10秒単位でメトリクスを収集したいので、2を入力してEnterをクリックします。
Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, but you can customize for specific metrics in the output json file. 1. 1s 2. 10s 3. 30s 4. 60s default choice: [4]: 2
Advancedのメトリクスを収集したいので、3を入力してEnterをクリックします。
Which default metrics config do you want? 1. Basic 2. Standard 3. Advanced 4. None default choice: [1]: 3
設定内容が表示されます。
Current config as follows: { "metrics": { "append_dimensions": { "AutoScalingGroupName": "${aws:AutoScalingGroupName}", "ImageId": "${aws:ImageId}", "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}" }, "metrics_collected": { "cpu": { "measurement": [ "cpu_usage_idle", "cpu_usage_iowait", "cpu_usage_user", "cpu_usage_system" ], "metrics_collection_interval": 10, "resources": [ "*" ], "totalcpu": false }, "disk": { "measurement": [ "used_percent", "inodes_free" ], "metrics_collection_interval": 10, "resources": [ "*" ] }, "diskio": { "measurement": [ "io_time", "write_bytes", "read_bytes", "writes", "reads" ], "metrics_collection_interval": 10, "resources": [ "*" ] }, "mem": { "measurement": [ "mem_used_percent" ], "metrics_collection_interval": 10 }, "netstat": { "measurement": [ "tcp_established", "tcp_time_wait" ], "metrics_collection_interval": 10 }, "swap": { "measurement": [ "swap_used_percent" ], "metrics_collection_interval": 10 } } } }
内容を確認して問題なければ、そのままEnterをクリックします。
Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items. 1. yes 2. no default choice: [1]:
新規で移行元のLog Agentはないので、そのままEnterをクリックします。
Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuration file to import for migration? 1. yes 2. no default choice: [2]:
ログファイルの監視を行うので、そのままEnterをクリックします。
Do you want to monitor any log files? 1. yes 2. no default choice: [1]:
/var/log/messages
の監視を行うので、そのままEnterをクリックします。
Log file path: default choice: [/var/log/messages]
ロググループ名をデフォルトのmessages
にするので、そのままEnterをクリックします。
Log group name: default choice: [messages]
管理するログファイルは以上なので、2を入力してEnterをクリックします。
Do you want to specify any additional log files to monitor? 1. yes 2. no default choice: [1]: 2
設定内容が表示されます。
Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully. Current config as follows: { "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/log/messages", "log_group_name": "messages" } ] } } }, "metrics": { "append_dimensions": { "AutoScalingGroupName": "${aws:AutoScalingGroupName}", "ImageId": "${aws:ImageId}", "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}" }, "metrics_collected": { "cpu": { "measurement": [ "cpu_usage_idle", "cpu_usage_iowait", "cpu_usage_user", "cpu_usage_system" ], "metrics_collection_interval": 10, "resources": [ "*" ], "totalcpu": false }, "disk": { "measurement": [ "used_percent", "inodes_free" ], "metrics_collection_interval": 10, "resources": [ "*" ] }, "diskio": { "measurement": [ "io_time", "write_bytes", "read_bytes", "writes", "reads" ], "metrics_collection_interval": 10, "resources": [ "*" ] }, "mem": { "measurement": [ "mem_used_percent" ], "metrics_collection_interval": 10 }, "netstat": { "measurement": [ "tcp_established", "tcp_time_wait" ], "metrics_collection_interval": 10 }, "swap": { "measurement": [ "swap_used_percent" ], "metrics_collection_interval": 10 } } } }
SSMのParameter storeに保存するので、そのままEnterをクリックします。
Please check the above content of the config. The config file is also located at /opt/aws/amazon-cloudwatch-agent/bin/config.json. Edit it manually if needed. Do you want to store the config in the SSM Parameter store? 1. yes 2. no default choice: [1]:
Parameter storeの名称をデフォルトのagent-config-linux
にするので、そのままEnterをクリックします。
What is the Parameter store name do you want to store your config? default choice: [agent-config-linux]
使用するリージョンは東京なので、そのままEnterをクリックします。
Trying to fetch the default region based on ec2 metadata... Which region do you want to store the config in the Parameter store? default choice: [ap-northeast-1]
SDKの設定を使用するため、そのままEnterをクリックします。
Which AWS credential should be used to send json config to Parameter store? 1. ASIAJGBWEFWDYBZW3BCQ(From SDK) 2. Other default choice: [1]:
Parameter Storeに保存してウィザードを終了します。
Successfully put config to Parameter store agent-config-linux. Program exits now.
Parameter Storeに設定内容が保存されるため、他のインスタンスでも同様の設定を呼び出すことができます。Parameter Storeに保存済みであれば『設定内容の決定』の手順は飛ばしてください。
Agentの設定
CloudWatch Agentの設定をAWS Systems Manager経由で行います。Run CommandでコマンドのドキュメントでAmazonCloudWatch-ManageAgent
を選択します。
ターゲットに対象のインスタンスを選択します。
コマンドのパラメータは以下のように設定します。Configurationを設定していないインスタンスで実行する場合には、Optional Configuration Location
にConfigurationを保存したParameter store
の名称(今回はagent-config-linux
)を記載します。
- Action:configure
- Mode:ec2
- Optional Configuration Source:ssm
- Optional Configuration Location:無し(今回は上記にてConfigurationを設定済みのため)
- Optional Restart:yes
実行して少し経つと成功します。これでメトリクスとログが取得できます。
確認する
メトリクス
CloudWatchのメトリクスを確認します。カスタムのNamespaceにCWAgent
と言うものができています。
ディメンションは以下の4種類となっています。
- ImageId, InstanceId, InstanceType, device, fstype, path
- ImageId, InstanceId, InstanceType, cpu
- ImageId, InstanceId, InstanceType, name
- ImageId, InstanceId, InstanceType
ImageId, InstanceId, InstanceType, device, fstype, path
ImageId, InstanceId, InstanceType, cpu
ImageId, InstanceId, InstanceType, name
ImageId, InstanceId, InstanceType
ログ
ロググループは指定した通りmessages
となっています。
ログストリームがインスタンスIDごとに作成されます。
/var/log/messages
の内容が出力されています。
さいごに
設定内容をParameter Storeに保存しておけば、インストールから設定反映、実行までAWS Systems Managerで完結してインスタンスの情報を収集できます。一切OSへログインせずに設定可能ですので、大量のインスタンスを監視する時に有用なエージェントです。
メモリ状況やコア単位のCPU状況、ディスクIOなどを参照できるので、EC2の標準メトリクスだけでは確認できなかったOSレベルのメトリクスが取得でき、きめ細かな監視が行なえます。オンプレミス環境のデータを取得できるのでCloudWatchで統合的な監視も可能になります。