起動済のEC2インスタンス(Ubuntu 20.04 LTS)に対して、
- CPUの使用率(%)
- メモリの使用率(%)
- ストレージ(ルートボリュームのEBS)の使用率(%)
の監視を行う。CPU使用率はデフォルトでモニタリングしているが、メモリとストレージの使用率はカスタムメトリクスを作成する必要がある。
初めてでググるだけだと、昔のCloudWatch モニタリングスクリプトを用いるやり方が出てきたり、Cloudformationも使えるの?collectdは必要?など、「どう設定するか?」という手順を定めるのに時間がかかったため、手順と共に判断基準を示す。一度手順が定まってしまえば、あとはミスなくやるだけ。
EC2の前提条件
モニタリングの対象:Webサーバーとして起動中のEC2インスタンス
EC2インスタンスのOS:Ubuntu 20.04 LTS
EC2インスタンスのアーキテクチャ:AMD64
モニタリングするわけだから、当然、インターネットに接続できること。
CloudWatch用のmonitering Endpointは作成済(セキュリティグループでWebサーバーからのインバウンドトラフィックを許可済)
カスタムメトリクスを追加する手順
カスタムメトリクスを追加する方法は、2021年3月現在、2つある:https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/mon-scripts.html
今回は、AWSも推奨する、CloudWatchエージェントを導入するやり方で行う。
もうひとつ、CloudWatch モニタリングスクリプトを用いるやり方もあるがAWS非推奨となっているため、今回は非採用とした(おそらく、エージェントが登場する前のやり方)。
設定の手順の大枠は、下記ドキュメントに基づいて行う。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html
1.IAMロールのアタッチ
CloudWatchAgentServerPolicy がアタッチされているIAMロールを、EC2インスタンスにアタッチする。ググればすぐ出てくるので詳細は割愛。
2.CloudWatchエージェントパッケージをダウンロード
Webサーバ(Ubuntu 20.04 LTS)にSSH接続し、コマンドでCloudWatch エージェントパッケージをダウンロードする:https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html
EC2を立ち上げる際に、同時にCloudWatchの設定もする場合は、CloudFormationで立ち上げと同時にダウンロードが出来るみたいだが、今回は既に立ち上げてミドルウェアも導入した後だったのでCloudFormation使う方法は不採用。(https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent-New-Instances-CloudFormation.html)
ここからの具体的な手順は、下記記事を参照した。
- https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html
- https://dev.classmethod.jp/articles/ec2-how-to-install-cloudwatch-agent-for-beginner/
前提条件同じなら下記コマンドでOK(アーキテクチャは立ち上げた際のAMIを見るとわかります。)
ダウンロード:
$ wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
「‘amazon-cloudwatch-agent.deb’ saved」と出ればOK
インストール:
$ sudo dpkg -i -E ./amazon-cloudwatch-agent.deb
特にログにエラーがなければOK
3.CloudWatchエージェント設定ファイルの作成、保存
下記
amazon-cloudwatch-agent.jsonファイル(CloudWatch エージェント設定ファイル)
を、
/opt/aws/amazon-cloudwatch-agent/etc
に、保存する。
/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"metrics": {
"append_dimensions": {
"InstanceId": "${aws:InstanceId}"
},
"metrics_collected": {
"disk": {
"measurement": [
"disk_used_percent"
],
"metrics_collection_interval": 60,
"resources": [
"/"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}
今回、collectd(=CloudWatchエージェントと同じようにサーバの統計情報を収集するためのオープンソースソフトウェア)は不要だった。収集できるデータが異なるので、必要なら導入すること。「ディスクスペース合計に対する使用済みの割合」であればCloudWatchエージェントだけでいけた。このリストに載っているメトリクスはcollectdを必要としないはずなので、今回のストレージはEBS(EC2のルートボリューム)なので、これでいける。(普通はもっと他のメトリクスもたくさんとったりログもとったりするのでこのファイルはより遥かにボリューミーになる模様。)
4.CloudWatchエージェントを起動
このコマンド打つだけ
$ sudo /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
5.確認
ストレージ使用率、メモリ使用率を表示できるコマンドがあるので、それで確認する。
ストレージ(”disk_used_percent”メトリクス):
$ df --total
total 169963328 10551128 159395816 7% -
最後のtotal:〜のところを読む。今回は7%
メモリ(”mem_used_percent”メトリクス):
$ top
MiB Mem : 15718.1 total, 2015.1 free, 3426.6 used, 10276.4 buff/cache
3426.6 used ÷ 15718.1 total = 21.8003 % ≒ 21.8 %
上記のそれぞれの値と同じような値を、AWSマネジメントコンソールのCloudWatchの画面でも入手できているか見てみる。だいたい同じ(誤差プラスマイナス0.2%くらい?)ならOK
所感
(今回、謎に「今日中に!」みたいな縛りがあって焦っていたわりには変なところで詰まらなくて良かった・・・)
コメント