日々の EstimatedCharges をモニタリングし、使用量のしきい値に基づいて CloudWatch アラームをトリガーするにはどうすればよいですか?

所要時間3分
0

日々の EstimatedCharges をモニタリングし、使用量のしきい値に基づいて Amazon CloudWatch アラームをトリガーするにはどうすればよいですか?

簡単な説明

EstimatedCharges メトリクスは、約 6 時間の間隔で公開されます。結果は毎月リセットされます。MetricMath RATE 式は、最新のデータポイント値と以前のデータポイント値の差を、2 つの値の時間差 (秒単位) で除することによって計算されます。この式を使用して、日々の EstimatedCharges の値を計算できます。

解決方法

注: AWS コマンドラインインターフェイス (AWS CLI) のコマンド実行時にエラーが発生した場合は、最新バージョンの AWS CLI を使用していることを確認してください

RATE 式をテストし、出力を確認する

CloudWatch アラームを作成する前に、GetMetricData API を呼び出して RATE 式をテストします。

$ cat metric_data_queries.json
{
    "MetricDataQueries": [
        {
            "Id": "m1",
            "MetricStat": {
                "Metric": {
                    "Namespace": "AWS/Billing",
                    "MetricName": "EstimatedCharges",
                    "Dimensions": [
                        {
                            "Name": "Currency",
                            "Value": "USD"
                        }
                    ]
                },
                "Period": 86400,
                "Stat": "Maximum"
            }
        },
    {
            "Id": "e1",
            "Expression": "IF(RATE(m1)>0,RATE(m1)*86400,0)",
            "Label": "DailyEstimatedCharges",
        "Period": 86400
        }
    ],
    "StartTime": "2020-06-01T00:00:00Z",
    "EndTime": "2020-06-05T00:00:00Z",
    "ScanBy": "TimestampAscending"
}


$ aws cloudwatch get-metric-data --cli-input-json file://metric_data_queries.json
{
    "MetricDataResults": [
        {
            "Id": "m1",
            "Label": "EstimatedCharges",
            "Timestamps": [
                "2020-06-01T00:00:00Z",
                "2020-06-02T00:00:00Z",
                "2020-06-03T00:00:00Z",
                "2020-06-04T00:00:00Z"
            ],
            "Values": [
                0.0,
                22.65,
                34.74,
                46.91
            ],
            "StatusCode": "Complete"
        },
        {
            "Id": "e1",
            "Label": "DailyEstimatedCharges",
            "Timestamps": [
                "2020-06-02T00:00:00Z",
                "2020-06-03T00:00:00Z",
                "2020-06-04T00:00:00Z"
            ],
            "Values": [
                22.65,
                12.090000000000003,
                12.169999999999995
            ],
            "StatusCode": "Complete"
        }
    ],
    "Messages": []
}

出力テーブル:

タイムスタンプ2020-06-01T00:00:00Z2020-06-02T00:00:00Z2020-06-03T00:00:00Z2020-06-04T00:00:00Z
EstimatedCharges0.022.6534.7446.91
DailyEstimatedCharges---22.6512.0912.17

出力テーブルで、DailyEstimatedCharges が最新のデータポイントと前のデータポイントの差として正しく計算されていることを確認します。この式を使用して、CloudWatch アラームを作成します。

AWS マネジメントコンソールで CloudWatch アラームを作成する

1.    「Metric Math 式の出力結果に基づく CloudWatch アラームの作成」の手順に従います。

2.    CloudWatch メトリクスページの [Source] (ソース) タブに次のコードを入力します。このコードは、「m1」というラベルのベースメトリクスとして EstimatedCharges を使用して、Metric Math 式 [ IF(RATE(m1)>0,RATE(m1)*86400,0) ] を作成します。

{
    "metrics": [
        [ { "expression": "IF(RATE(m1)>0,RATE(m1)*86400,0)", "label": "Expression1", "id": "e1", "period": 86400, "stat": "Maximum" } ],
        [ "AWS/Billing", "EstimatedCharges", "Currency", "USD", { "id": "m1" } ]
    ],    
    "view": "timeSeries",
    "stacked": false,
    "region": "us-east-1",
    "stat": "Maximum",
    "period": 86400
}

3.    MetricMath 式の CloudWatch アラームを作成します。これを行うには、[Graphed metrics] (グラフ化されたメトリクス) を選択します。DailyEstimatedCharges メトリクスの [Actions] (アクション ) 列で [Alarm] (アラーム) アイコンを選択します。

4.    CloudWatch アラーム作成ウィザードで、メトリクス設定の詳細を確認します。しきい値を超えたときに通知を受け取る適切なしきい値を追加します (50 USD など)。アラームアクションを設定します。アラームの名前と説明を追加します。

AWS CLI を使用して CloudWatch アラームを作成する

1.    アラーム設定を JSON ファイルとして作成します。

$ cat alarm_config.json
{
    "AlarmName": "DailyEstimatedCharges",
    "AlarmDescription": "This alarm would be triggered if the daily estimated charges exceeds 50$",
    "ActionsEnabled": true,
    "AlarmActions": [
        "arn:aws:sns:<REGION>:<ACCOUNT_ID>:<SNS_TOPIC_NAME>"
    ],
    "EvaluationPeriods": 1,
    "DatapointsToAlarm": 1,
    "Threshold": 50,
    "ComparisonOperator": "GreaterThanOrEqualToThreshold",
    "TreatMissingData": "breaching",
    "Metrics": [{
        "Id": "m1",
        "MetricStat": {
            "Metric": {
                "Namespace": "AWS/Billing",
                "MetricName": "EstimatedCharges",
                "Dimensions": [{
                    "Name": "Currency",
                    "Value": "USD"
                }]
            },
            "Period": 86400,
            "Stat": "Maximum"
        },
        "ReturnData": false
    },
    {
        "Id": "e1",
        "Expression": "IF(RATE(m1)>0,RATE(m1)*86400,0)",
        "Label": "DailyEstimatedCharges",
        "ReturnData": true
    }]
}

注: REGION、ACCOUNT_ID、 および SNS_TOPIC_NAME を対応する値で更新してください。

2.    PutMetricAlarm API を呼び出します。

aws cloudwatch put-metric-alarm --cli-input-json file://alarm_config.json

(オプション) Maximum DailyEstimatedCharges 値に対する前日の貢献者の上位 10 名を検索する

次のクエリを使用します。

$ cat top_contributors_query.json
{
    "MetricDataQueries": [{
        "Id": "e1",
        "Expression": "SORT(RATE(SEARCH('{AWS/Billing,Currency,ServiceName} AWS/Billing ServiceName', 'Maximum', 86400))*86400, MAX, DESC, 10)",
        "Label": "DailyEstimatedCharges",
        "Period": 86400
    }],
    "ScanBy": "TimestampAscending"
}


$ aws cloudwatch get-metric-data --cli-input-json file://top_contributors_query.json --start-time `date -v -2d '+%Y-%m-%dT%H:%M:%SZ'` --end-time `date '+%Y-%m-%dT%H:%M:%SZ'` --region us-east-1

注: [StartTime][EndTime] でサポートされている DateTime 形式は、'2020-01-01T00:00:00Z' です。

重要: 上記のコマンドでは、各 GetMetricData API コールによって取得されるメトリクスの数に基づいて料金が発生します。詳細については、「Amazon CloudWatch の料金」を参照してください。


AWS公式
AWS公式更新しました 2年前