カスタムメトリクスを取得するために使用していたCloudWatchモニタリングスクリプトがいつの間にか非推奨になっていたため、CloudWatchエージェントを使用する。
- プラットフォームバージョン:Ruby 3.0 AL2 バージョン 3.4.6
- 拡張プラットフォームはプラットフォームフックを用いる
- 取得するメトリクスはメモリ使用量とEBS使用量
- CloudWatchエージェントが、インスタンスのデータを送信するために必要なPolicy
- CloudWatchAgentServerPolicy
.platform
├── assets
│ └── cloudwatch-agent.json
└── hooks
├── postdeploy
├── prebuild
└── predeploy
└── 01_cloudwatch_agent.sh
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"metrics": {
"append_dimensions": {
"InstanceId": "${aws:InstanceId}",
"AutoScalingGroupName": "${aws:AutoScalingGroupName}"
},
"aggregation_dimensions": [["AutoScalingGroupName"]],
"metrics_collected": {
"disk": {
"measurement": [
"used_percent"
],
"metrics_collection_interval": 60,
"resources": [
"/"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}
#!/bin/bash
set -eu
cp -f .platform/assets/cloudwatch-agent.json /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
- 注意点
エージェント設定ファイルをデプロイすると下記のように書き換えが発生します。また、-a fetch-configの実行によりファイル名の先頭にfile_が付与されます。
/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
↓
/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_amazon-cloudwatch-agent.json
そして、サーバ内でagentを停止し起動させる場合、/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_amazon-cloudwatch-agent.jsonを引数として指定しないと当然エラーとなります。
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
↓
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file://opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_amazon-cloudwatch-agent.json
さらに、サーバ内でagentを停止し起動させると-a fetch-configの実行によりファイル名の先頭に再度file_が付与されます。/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_file_amazon-cloudwatch-agent.json
なお、-a fetch-config -cで指定可能なファイル名の最大長は251バイトであり、それを超過するとCloudWatchエージェントの起動は失敗します。
例:253バイト
file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_file_amazon-cloudwatch-agent.json
- 冪等性について
-a fetch-config -cオプションを付与して amazon-cloudwatch-agent-ctlコマンドを実行すると、amazon-cloudwatch-agent.d配下に置かれた設定ファイルは削除されます。そのため、file_amazon-cloudwatch-agent.jsonがある状態でも動作に問題は発生しません。