終了した EC2 のメトリクス(モニタリングデータ)が見当たりません。確認する方法を教えてください

2021.07.30

困っていた内容

約一ヶ月前に終了した EC2 のメトリクスを確認しようと思ったのですが、CloudWatch メトリクスに見当たりません。メトリクスは15ヶ月は保持される認識ですが、EC2 は別なのでしょうか。メトリクスを確認する方法を教えてください

[CloudWatch] メトリックの保持期間が14日→15ヶ月に延長されて、グラフ機能も強化されました | DevelopersIO

どう対応すればいいの?

AWS CLI をご使用ください。

ご認識の通り、メトリクスは15ヶ月間保持されますが、マネジメントコンソールからは、メトリクスが最後に登録されてから2週間以内のものしか表示できません。そのため、2週間前以上に終了した EC2 のメトリクスを取得するには、AWS CLI をご使用ください。

メトリクスの取得は複数のコマンドが用意されているため、取得内容に合わせてご選択ください。

参考:GetMetricData または GetMetricStatistics を使用して CloudWatch メトリクスからデータポイントを取得する

やってみた(画像で取得)

取得例(※起動時間が短いため、一部時間帯のみ表示されています)

取得したい EC2 インスタンスの「インスタンスID」を確認します。
Amazon EC2 コンソールでは、終了したインスタンスはしばらくすると非表示となるため、CloudTrailを利用するなどして確認します。

CloudTrail コンソールを使用した取得例

取得範囲や取得項目のフォーマットを取得するため、CloudWatch コンソールを表示します。

「取得したい期間」や「メトリクス項目」を選択して、「発信元」タブを選択します。
※実際に取得するインスタンスは後ほど変更するため、インスタンス名の選択は適当で構いません。

「イメージAPI」を選択して、「ソースのコピー」をクリックします。

テキストエディタを使用し、コピーした内容をmetrics.jsonという名前のテキストファイルとして保存します。
3行目の【インスタンスID】は確認したインスタンスIDに置き換えてください。

{
    "metrics": [
        [ "AWS/EC2", "CPUUtilization", "InstanceId", "【インスタンスID】" ]
    ],
    "view": "timeSeries",
    "stacked": false,
    "width": 1130,
    "height": 250,
    "start": "2021-06-22T15:00:00.000Z",
    "end": "2021-06-23T14:59:59.999Z",
    "timezone": "+0900"
}

次のコマンドを実施します。

$ aws cloudwatch get-metric-widget-image --metric-widget file://metrics.json --query MetricWidgetImage --output text | base64 --decode > ./metrics.png

metrics.pngという名前の画像形式でメトリクスデータが取得されました。

取得範囲等をカスタマイズしたい場合は、次のドキュメントを参照し、metrics.jsonを変更してください。

GetMetricWidgetImage:メトリックウィジェットの構造と構文-Amazon CloudWatch

参考資料

Q: Amazon EC2 インスタンスのモニタリングを無効にした場合、メトリクスデータを失いますか?

いいえ。すべての Amazon EC2 インスタンスのメトリクスデータは、上記の保存期間スケジュールに基づいて常に取得できます。ただし、CloudWatch コンソールでのメトリクスの検索は、メトリクスが最後に取り込まれてから 2 週間に制限され、名前空間で最新のインスタンスが表示されるようにします。