勉強を兼ねて、以下に関して書いていきます。
- 基本モニタリング
- 詳細モニタリング
- メトリクス利用例
勉強具合やアップデート具合によって適宜更新します。
基本モニタリング
EC2のモニタリングタブより確認可能な項目で、CPU使用率、ステータスチェック等が確認出来ます。
- 利用コスト:無料
- 更新間隔:5分
ステータスチェック系は実は1分ですが、EC2サービスのモニタリング上では1分間隔の確認は出来ません。
↓
CloudWatchで表示すると1分間隔で確認できます(CloudWatchの確認は詳細モニタリングのところで説明)。
モニタリングできる内容「メトリクス」の種類は、EC2インスタンス毎に異なります。どのメトリクスに対応しているかはコマンドで確認出来ます。
# コマンド例
aws cloudwatch list-metrics --namespace AWS/EC2 --dimensions Name=InstanceId,Value=i-1234567890abcdef
t3系のEC2インスタンスでは次のような結果が取得出来ました。
- METRICS CPUUtilization AWS/EC2
- METRICS NetworkIn AWS/EC2
- METRICS NetworkOut AWS/EC2
- METRICS NetworkPacketsIn AWS/EC2
- METRICS NetworkPacketsOut AWS/EC2
- METRICS CPUCreditUsage AWS/EC2
- METRICS CPUSurplusCreditBalance AWS/EC2
- METRICS CPUSurplusCreditsCharged AWS/EC2
- METRICS EBSIOBalance% AWS/EC2
- METRICS EBSByteBalance% AWS/EC2
- METRICS EBSReadOps AWS/EC2
- METRICS EBSReadBytes AWS/EC2
- METRICS EBSWriteOps AWS/EC2
- METRICS EBSWriteBytes AWS/EC2
- METRICS MetadataNoToken AWS/EC2
- METRICS StatusCheckFailed_System AWS/EC2
- METRICS StatusCheckFailed_Instance AWS/EC2
- METRICS StatusCheckFailed AWS/EC2
他のメトリクス(例えばメモリ)等はEC2に監視エージェントをインストールしないと取得出来ません。こちらについては別途まとめます。
詳細モニタリング
通常、各メトリクスのモニタリング間隔は5分です(ヘルスチェック関係除く)が、「詳細モニタリング」を有効にすると、「1分間隔」で確認することが出来ます。
- 利用コスト:0.3USD/月
上記利用コストは1メトリクスあたりのコスト。任意EC2で詳細モニタリングを有効にすると、10個以上のメトリクスを持つため3USD/月以上はかかる。また、詳細モニタリングのメトリクスは選べなそう(EC2単位で有効・無効であるため)。
以降、詳細モニタリングの有効と、モニタの確認手順です。
有効にしたらEC2の「モニタリング」タブですぐに確認・・・は出来ません。確認可能な場所は「CloudWatch」になります。(EC2のモニタリングは表示間隔こそ変更できるけど、最小粒度は5分のままです)
例えばCPU使用率(%)であれば、オプション「メトリクスで表示」をクリックします。
CloudWatchにて該当メトリクスが表示されます。期間を「1分」に変更すれば、1分毎の値がプロット出来ました。なお、詳細モニタリングが有効になっていないと「1分」に変更にしてもプロットは5分間隔のままです。
なお、実際のデータ反映は即時ではなく、5分~10分経過後に1分間隔のプロットが始まってました。
# (参考) 設定状態の確認CLIコマンド
aws ec2 monitor-instances --instance-ids i-123456789012345
ところでEBSの詳細モニタリングは・・・?
EBSのメトリクスはデフォルト1分っぽい。
CloudwatchからEBSメトリクスを1分粒度で確認すると、1分間隔で取得出来ていました。
※昔はio1、io2しか1分間隔をサポートしていなかったようですが、2021年のアップデートによって他のEBS種別で1分間隔がサポートされたようです。
メトリクス利用(CPU利用率に応じてEC2停止)
各メトリクスの値(モニタリング値)はCloudWatchに吸い上げられています。「CloudWatchアラーム」を利用することで、例えばCPU使用率が一定率未満であれば、EC2を停止させるってことも簡単にすることが出来ます。
(参考) 設定お試し
試してみます。
CloudWatchのアラーム作成より任意インスタンスの「CPUUtilization」(CPU使用率)を選択して、設定していきます。
設定としては次のような条件が指定出来ます。
- 5分間、平均CPU使用率が10%以下
- 1時間、平均CPU使用率が90%以上
設定の際、アラームを実行する「データポイント」も重要です。データポイントを設定すれば1回の条件一致ではなく、複数回の条件一致で発動させることが出来ます。例えば、5分平均の条件に「データポイントが10」であれば、5分平均CPU利用率@10%未満が連続10回監視された時(言い換えれば50分の平均CPU使用率が10%未満と同等)、ということになります。
他の設定として通知先(SNS)があり、発動時の通知先を設定出来ます(設定画面は割愛)。
最後にEC2アクションとして「このインスタンスを停止」を選択します。条件合致の際に、EC2の停止が可能となります。また、他には「削除」「再起動」も選択可能です(例えばスタックしたと判定した場合に再起動とかに使えますね)。
画面には載せていませんが、他に「Systems manager」との連携が出来て、EC2停止を契機にインシデントを作成することも出来るようになっています。
なお、現状気付いた注意点は次の通り。
- 計算式を適用したEC2のメトリクスでEC2アクション(停止等)は設定出来ない。
- EC2停止してすぐに開始だと、CPU利用率「低」を維持していることがある。この場合、アラーム状態は「発生」のまま変わらないため、ずっとEC2は自動停止してくれない・・・。強制的にアラームを一時的に「OK」にして再評価させるとかがいいのかな。
(補足) 複数EC2に対する一括設定とかは?
ところで複数EC2に対して設定は出来ないのかな?
任意EC2のメトリクス単位の設定だから出来ないね。
任意タグに一致するインスタンスに同じ条件を適用したい場合があると思います。このような場合は、次のような手段になります。
- EventBridgeで定期実行
- Lambdaコール
- DescribeInstances、GetMetricDataでデータ取得
現状(2022年)はこんな流れになりますね。将来的なAWS側のアップデートで簡単に設定できるようになるといいですね。
(参考) CLIでメトリクス取得
次のCLIコマンドで確認できます。
- get-metric-data
- get-metric-statistics
# (get-metric-statistics利用)指定期間における5分平均のCPU最大値を取得
aws cloudwatch get-metric-statistics --namespace AWS/EC2 --metric-name CPUUtilization \
--dimensions Name=InstanceId,Value=i-1234567890 --statistics Maximum \
--start-time 2023-08-22T00:00:00 --end-time 2023-08-22T01:00:00 --period 300
# 結果例
{
"Label": "CPUUtilization",
"Datapoints": [
{
"Timestamp": "2023-08-22T00:45:00+00:00",
"Maximum": 18.85739046381014,
"Unit": "Percent"
},
{
"Timestamp": "2023-08-22T00:55:00+00:00",
"Maximum": 17.866666666666664,
"Unit": "Percent"
},
:
# (get-metric-data利用)指定期間における5分平均のCPU最大値を取得
aws cloudwatch get-metric-data \
--metric-data-queries '{"Id":"m1","MetricStat":{"Metric":{"Namespace":"AWS/EC2","MetricName":"CPUUtilization","Dimensions":[{"Name":"InstanceId","Value":"i-1234567890"}]},"Period":300,"Stat":"Maximum"}}' \
--start-time 2023-08-26T06:20:00+09:00 \
--end-time 2023-08-26T20:30:00+09:00
- statisticsはSampleCount, Average. Sum, Minimum, Maximumが利用可能です。
※事前に「aws cloudwatch list-metrics –namespace AWS/EC2」で該当ネームスペースで何が取得できるって点も調べるとスムーズです。
まとめ
本ページではEC2のモニタリング関係について触れました。最初はEC2サービス内の「モニタリング」タブより少しずつ慣れながら、必要に応じて詳細や内部メトリクスの監視と慣れていくのがいいように思います。
最後までご覧いただきありがとうございました!
コメント