日々の EstimatedCharges を監視し、使用しきい値に基づいて CloudWatch アラームをトリガーするにはどうすればよいですか?
最終更新日: 2020 年 9 月 14 日
日々の 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": "RATE(m1) * 86400",
"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:00Z | 2020-06-02T00:00:00Z | 2020-06-03T00:00:00Z | 2020-06-04T00:00:00Z |
---|---|---|---|---|
EstimatedCharges | 0.0 | 22.65 | 34.74 | 46.91 |
DailyEstimatedCharges | --- | 22.65 | 12.09 | 12.17 |
出力テーブルで、DailyEstimatedCharges が最新のデータポイントと前のデータポイントの差として正しく計算されていることを確認します。この式を使用して、CloudWatch アラームを作成します。
AWS マネジメントコンソールで CloudWatch アラームを作成する
1. MetricMath の出力結果に基づく CloudWatch アラームの作成の手順に従います。
2. CloudWatch メトリクスページの [Source] (ソース) タブに次のコードを入力します。このコードは、「m1」というラベルのベースメトリクスとして EstimatedCharges を使用して、MetricMath 式 [ RATE(m1) * 86400 ] を作成します。
{
"metrics": [
[ { "expression": "RATE(m1) * 86400", "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": "RATE(m1) * 86400",
"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'`
注意: StartTime と EndTime でサポートされている DateTime 形式は、'2020-01-01T00:00:00Z' です。
重要: 上記のコマンドでは、各 GetMetricData API 呼び出しによって取得されるメトリクスの数に基づいて料金が発生します。詳細については、Amazon CloudWatch の料金を参照してください。