일일 EstimatedCharges를 모니터링하고 사용량 임계값에 따라 CloudWatch 경보를 트리거하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 9월 14일

일일 EstimatedCharges를 모니터링하고 사용량 임계값에 따라 Amazon CloudWatch 경보를 트리거하려면 어떻게 해야 합니까?

간략한 설명

EstimatedCharges 지표는 약 6시간 간격을 두고 게시됩니다. 결과는 매월 다시 설정됩니다. MetricMath RATE 표현식은 최신 데이터 포인트 값과 이전 데이터 포인트 값의 차이를 두 값 사이의 시간(초)으로 나누어서 계산합니다. 이 표현식을 사용해서 각 날짜의 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 Management Console을 사용하여 CloudWatch 경보 생성

1.    지표 수식 표현식을 사용해서 CloudWatch 경보 생성 단계를 따라 하세요.

2.    CloudWatch 지표 페이지의 소스 탭에 다음의 코드를 붙여넣습니다. 이 코드는 EstimatedCharges를 레이블이 "m1"인 기본 지표로 사용하여 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 경보를 생성합니다. 이를 위해서는 그래프로 표시된 지표를 선택합니다. DailyEstimatedCharges 지표의 작업 열에서 경보 아이콘을 선택합니다.

4.    CloudWatch Alarm 생성 마법사:
지표 구성의 세부 정보를 확인합니다.
적절한 임계값을 추가하여 임계값을 초과하면 알림을 수신하도록 합니다(예: 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_IDSNS_TOPIC_NAME을 해당 값으로 업데이트하세요.

2.    PutMetricAlarm API 호출:

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

(선택 사항) 최대 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'`

참고: StartTimeEndTime에 지원되는 DateTime 형식은 '2020-01-01T00:00:00Z'입니다.

중요: 앞의 명령은 각 GetMetricData API 호출로 검색된 지표 수를 기준으로 요금이 발생합니다. 자세한 내용은 Amazon CloudWatch 요금을 참조하세요.


이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?