###アジェンダ
###ハンズオンの準備
※動かすことを主に置いているため、IAMは「Administrator」を付けています
権限を最低限に絞りたい場合は以下をご参考に設定して下さい
IAMユーザーに付与する権限 : AmazonEC2ReadOnlyAccess + AmazonSSMFullAccess
EC2に付与する権限 : AWS公式ドキュメント参照
###ハンズオンのシナリオ
CloudWatch Agentを使ってデフォルトのCloudWatchでは取得出来ないEC2のメトリクスログを収集する
###ハンズオンで構築する構成図
###ハンズオン
####SSMエージェントのアップデート
CloudWatch AgentはSSMのRun Command or Amazon S3ダウンロードリンクからインストール可能です。
今回はSSMのRun Commandを使ってインストールしていきます。
CloudWatch AgentをインストールするためにはSSMエージェントのバージョンは2.2.93.0以上が必要です。
そのため、最初にSSMのコマンド実行を使ってSSMのアップデートを行います。
実行コマンドの出力画面で以下が出力されていれば成功
amazon-ssm-agent updated successfully to *.**.*
####CloudWatch Agentのインストール
CloudWatch AgentをEC2にインストールするのはSSMエージェントのアップデートと同様、
SSMのRun Commandを使って行っていきます。
1.SSMサービスページの左下にある Run Command
を選択
2.「コマンドのドキュメント」でAWS-ConfigureAWSPackage
を選択
3.「ターゲットの選択」で インスタンスの手動選択
にチェックを入れ
インストールを行うEC2を選択し 実行
ボタンをクリック
4.「Action」で Install
を選択
「Name」で AmazonCloudWatchAgent
と入力
「Version」で latest
と入力
最後に 実行
ボタンをクリック
実行コマンドの出力画面で以下が出力されていれば成功
Successfully installed arn:aws:ssm:::package/AmazonCloudWatchAgent *.**.*
####設定ファイルの作成
CloudWatch Agentを入れたEC2に入り、ウィザードを使用して設定ファイルを作成します。
- 監視メトリクスの設定
設定ファイルを作成していきます
$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
=============================================================
= Welcome to the AWS CloudWatch Agent Configuration Manager =
=============================================================
OSを選択します
今回はAmazon LinuxでEC2を構築しましたので、 1
もしくはdefaultがLinuxなので Enter
を押します
On which OS are you planning to use the agent?
1. linux
2. windows
default choice: [1]:
CloudWatch Agentはオンプレでも使用出来るため
CloudWatch Agentが入っているサーバがEC2かオンプレか聞かれます
そのため、EC2の 1
or defaultが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]:
ホストメトリクスを取得したいか聞かれますので
yes
or デフォルトがyesなので Enter
を押します
Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:
コア当りのCPUを監視したいか聞かれますので
yes
or デフォルトがyesなので Enter
を押します
Do you want to monitor cpu metrics per core? Additional CloudWatch charges may apply.
1. yes
2. no
default choice: [1]:
利用可能なディメンションを追加したいか聞かれますので
yes
or デフォルトがyesなので 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]:
何秒単位でメトリクスを収集したいか聞かれますので
4
or デフォルトが4なので 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]:
CloudWatch Agentに事前定義されたどのメトリクスセットを利用するか聞かれますので
今回は3
を入力します
Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:
※メトリクスセットの詳細は以下
詳細レベル | 含められるメトリクス |
---|---|
基本 | Mem: mem_used_percent Swap: swap_used_percent |
スタンダート | CPU: cpu_usage_idle、cpu_usage_iowait、cpu_usage_user、cpu_usage_system Disk: disk_used_percent、disk_inodes_free、diskio_io_time Mem: mem_used_percent Swap: swap_used_percent |
アドバンス | CPU: cpu_usage_idle、cpu_usage_iowait、cpu_usage_user、cpu_usage_system Disk: disk_used_percent、disk_inodes_free Diskio: diskio_io_time、diskio_write_bytes、diskio_read_bytes、diskio_writes、diskio_reads Mem: mem_used_percent Netstat: netstat_tcp_established、netstat_tcp_time_wait Swap: swap_used_percent |
設定内容が表示されますので、内容を確認して問題がなければ Enter
をクリック
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": 60,
"resources": [
"*"
],
"totalcpu": false
},
"disk": {
"measurement": [
"used_percent",
"inodes_free"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"diskio": {
"measurement": [
"io_time",
"write_bytes",
"read_bytes",
"writes",
"reads"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
},
"netstat": {
"measurement": [
"tcp_established",
"tcp_time_wait"
],
"metrics_collection_interval": 60
},
"swap": {
"measurement": [
"swap_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}
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]:
2. ログの設定
今回は新規設定のため、Log Agentはいないので
2
or デフォルト2なので 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]:
ログファイルの監視を行うか聞かれますので
1
or デフォルト1なので Enter
を押します
Do you want to monitor any log files?
1. yes
2. no
default choice: [1]:
監視するログファイルのパスを聞かれますので
今回は/var/log/messages
を入力します
Log file path:
ロググループ名を聞かれますので
messages
or デフォルトmessagesなので Enter
を押します
Log group name:
default choice: [messages]
他にも管理するログファイルがあるかと聞かれますので
今回は2
を押します
Do you want to specify any additional log files to monitor?
1. yes
2. no
default choice: [1]:
設定内容が表示され、SSMのParameter Storeに保存するか聞かれますので
問題なければ、 yes
orデフォルトがyesなので Enter
を押して下さい
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": {
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
},
"swap": {
"measurement": [
"swap_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}
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-jaws
と入力して下さい
※同じアカウント内のユーザを使って本ハンズオンに参加されている方は
それぞれで別の名称をお付け下さい
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]
設定ファイルをParameter Storeに送信するのに、どのクレデンシャル情報を利用するか聞かれますので
1
or デフォルト1なので Enter
を押して下さい
Which AWS credential should be used to send json config to parameter store?
1. ASIAIM7JHWYUMPKF6RPQ(From SDK)
2. Other
default choice: [1]:
Parameter Storeへの保存が完了したら設定ファイルの作成終了です
Successfully put config to parameter store agent-config-linux-jaws.
Program exits now.
####CloudWatch Agentの設定
決定した設定ファイルをSSMのRun Command
を使ってCloudWatch Agentに反映させていきます。
2. 「コマンドのドキュメント」で`AmazonCloudWatch-ManageAgent`を選択 ![image.png](https://qiita-image-store.s3.amazonaws.com/0/236355/e5fe976f-629c-fab1-cfc3-3b03a4870be4.png)
3. 「ターゲットの選択」で `インスタンスの手動選択` にチェックを入れ メトリクスを取得したいEC2を選択し `実行` ボタンをクリック ![image.png](https://qiita-image-store.s3.amazonaws.com/0/236355/d75fbde4-3104-b730-d8bb-393d7cb464eb.png)
4. 「Action」で `configure` を選択 「Mode」で `EC2`を選択
「Optional Configuration Source」で `ssm`を選択
「Optional Configuration Location」で「agent-config-linux-jaws」と入力
「Optional Restart」では`yes`を選択
最後に `実行` ボタンをクリック ![image.png](https://qiita-image-store.s3.amazonaws.com/0/236355/9d0d756e-e715-3e5e-eb5f-5cd523d0cc38.png)
実行コマンドの出力画面で以下が出力されていれば成功
`Configuration validation succeeded`
![image.png](https://qiita-image-store.s3.amazonaws.com/0/236355/8fa683cc-fe3b-6a8b-3e58-48ccdcd2c906.png)
###結果確認
CloudWatch Agentで設定したメトリクスが監視されているか、CloudWatchのコンール画面から確認します。
① メトリクス
- CloudWatchのメトリクス画面から
CWAgent
を選択
- ディメンションは以下の4種類になっています。
・ ImageId, InstanceId, InstanceType
・ ImageId, InstanceId, InstanceType, name
・ ImageId, InstanceId, InstanceType, cpu
・ ImageId, InstanceId, InstanceType, device, fstype, path
3. 例 : ImagedId, InstanceId, Intance Type
②ログ
###オプション
CloudWatch Agentのメトリクスやログの設定を変更したい場合も
SSMを使って容易に変更出来ます。
-
SSMのパラメータストア画面で、先ほど作成した
agent-config-linux-jaws
を選択し
アクションの中のパラメータの編集
をクリック
-
値
の部分に設定内容が記載されているので、用途に合わせて変更を行い
CloudWatch Agentの設定を再度行う
設定可能なメトリクスやログについては以下の公式ドキュメントを参照
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html
※値の内容
{
"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": 60,
"resources": [
"*"
],
"totalcpu": false
},
"disk": {
"measurement": [
"used_percent",
"inodes_free"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"diskio": {
"measurement": [
"io_time",
"write_bytes",
"read_bytes",
"writes",
"reads"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
},
"netstat": {
"measurement": [
"tcp_established",
"tcp_time_wait"
],
"metrics_collection_interval": 60
},
"swap": {
"measurement": [
"swap_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}
###お片づけ
今回のハンズオンで使用した以下のリソースは月額10$程度の課金が発生いたします。
ハンズオン実施後に削除をお願い致します。
■課金対象リソース
・EC2
・CloudWatch 取得したメトリクス(メトリクスを削除出来る訳ではありません)
・CloudWatch 取得したログ