ちょっと話題の記事

新しいCloudWatch Agentでメトリクスとログの収集が行なえます

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ウィスキー、シガー、パイプをこよなく愛する大栗です。

先程新しいCloudWatch Agentが発表されました。AWS Systems Managerと統合されてメトリクスやログの収集を行えますのでご紹介します。

CloudWatch Agent

今まではEC2の詳細なメトリクスをCloudWatch上で確認するためには。collectdのCloudWatchプラグインやCloudWatch Monitoring Script、または自身のカスタムスクリプトなどでデータを収集してCloudWatchへアップロードする必要がありました。

collectdのCloudWatchプラグインを試してみた

CloudWatch Monitoring ScriptでDiskUsageやMemoryUsage等を取得

新しい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があり、BasicStandardAdvancedの3つのレベルがあります。各々のレベルに応じて取得できるメトリクスが異なります。また、オンプレミスかEC2か、LinuxかWindowsかによっても取得できるメトリクスが異なります。取得できるメトリクスの詳細はドキュメントを参照ください。

CloudWatch Agent Predefined Metric Sets

設定ファイルを自分で編集すれば、取得するメトリクスをカスタマイズすることもできます。

Manually Create or Edit the CloudWatch Agent Configuration File

試してみた

事前準備

EC2用のIAM Roleを作成します。権限はマネージドポリシーのAmazonSSMFullAccessAmazonEC2ReadOnlyAccessをアタッチします。

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で統合的な監視も可能になります。