CloudWatch 지표에 GetMetricData 또는 GetMetricStatistics를 사용해야 하나요?
최종 업데이트 날짜: 2022년 5월 26일
Amazon CloudWatch 지표에서 데이터 포인트를 검색하려고 합니다. GetMetricData 또는 GetMetricStatistics 중 어떤 API를 사용해야 하나요?
간략한 설명
GetMetricData를 사용하면 대규모 데이터를 더 빠르게 검색할 수 있으므로 GetMetricStatistics 대신 GetMetricData API를 사용하는 것이 가장 좋습니다. GetMetricData는 지표 수식도 지원하며 정렬된 결과를 여러 페이지로 반환합니다. 이러한 기능 차이는 각 서비스의 비용에 반영됩니다. CloudWatch의 프리 티어에는 최대 1백만 건의 API 요청에 대해 GetMetricStatistics가 포함되어 있지만 GetMetricData는 포함되어 있지 않습니다. 아래 차트와 CloudWatch 요금 차트를 참조하여 어떤 API가 더 적합한지 확인하세요.
호출당 지표 수 | 호출당 데이터 포인트 수 | 지표 수식 지원 | 정렬된 결과를 여러 페이지로 반환 | 프리 티어 한도에 포함됨 |
|
GetMetricData | 500 | 100,800 | 예 | 예* | 아니요 |
GetMetricStatistics | 1 | 1,440 | 아니요 | 아니요 | 예 |
*다음 데이터 포인트 세트를 반환하려면 응답에 제공된 NextToken(--next-token)을 사용하여 데이터를 반복해야 합니다.
GetMetricData API에 대한 service quotas는 다음과 같습니다.
- 50 TPS(초당 트랜잭션).
- 180,000 DPS(초당 데이터 포인트)(API 요청의 StartTime이 현재 시간을 기준으로 3시간 이내인 경우).
- StartTime이 현재 시간으로부터 3시간을 초과하는 경우 DPS가 396,000.
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.
AWS CLI에서 고유의 GetMetricData API 호출을 사용하려면 다음 예제 호출을 참조로 사용하세요.
1. GetMetricData API 호출에 대한 입력 파라미터(metric-data-queries.json)를 생성합니다. 이 입력 파라미터에는 두 개의 사용자 지정 지표(Invocations 및 Errors)와 하나의 계산 지표(ErrorRate)가 있습니다. ErrorRate는 다른 두 지표에 대한 지표 수식으로 계산됩니다.
$ cat metric-data-queries.json
[
{
"Id": "e1",
"Expression": "m1 / m2",
"Label": "ErrorRate"
},
{
"Id": "m1",
"MetricStat": {
"Metric": {
"Namespace": "MyApplication",
"MetricName": "Errors",
"Dimensions": [
{
"Name": "FunctionName",
"Value": "MyFunc"
}
]
},
"Period": 300,
"Stat": "Sum",
"Unit": "Count"
},
"ReturnData": false
},
{
"Id": "m2",
"MetricStat": {
"Metric": {
"Namespace": "MyApplication",
"MetricName": "Invocations",
"Dimensions": [
{
"Name": "FunctionName",
"Value": "MyFunc"
}
]
},
"Period": 300,
"Stat": "Sum",
"Unit": "Count"
},
"ReturnData": false
}
]
2. PutMetricData를 사용하여 샘플 지표 데이터를 사용자 지정 지표로 게시합니다. 예를 들면 다음과 같습니다.
$ aws cloudwatch put-metric-data --namespace MyApplication --metric-name Invocations --dimensions FunctionName=MyFunc --value 10 --unit Count --timestamp 2018-06-19T04:00:00Z
$ aws cloudwatch put-metric-data --namespace MyApplication --metric-name Invocations --dimensions FunctionName=MyFunc --value 10 --unit Count --timestamp 2018-06-19T04:05:00Z
$ aws cloudwatch put-metric-data --namespace MyApplication --metric-name Invocations --dimensions FunctionName=MyFunc --value 10 --unit Count --timestamp 2018-06-19T04:10:00Z
$ aws cloudwatch put-metric-data --namespace MyApplication --metric-name Invocations --dimensions FunctionName=MyFunc --value 10 --unit Count --timestamp 2018-06-19T04:15:00Z
$ aws cloudwatch put-metric-data --namespace MyApplication --metric-name Invocations --dimensions FunctionName=MyFunc --value 10 --unit Count --timestamp 2018-06-19T04:20:00Z
$ aws cloudwatch put-metric-data --namespace MyApplication --metric-name Errors --dimensions FunctionName=MyFunc --value 3 --unit Count --timestamp 2018-06-19T04:00:00Z
$ aws cloudwatch put-metric-data --namespace MyApplication --metric-name Errors --dimensions FunctionName=MyFunc --value 6 --unit Count --timestamp 2018-06-19T04:05:00Z
$ aws cloudwatch put-metric-data --namespace MyApplication --metric-name Errors --dimensions FunctionName=MyFunc --value 2 --unit Count --timestamp 2018-06-19T04:10:00Z
$ aws cloudwatch put-metric-data --namespace MyApplication --metric-name Errors --dimensions FunctionName=MyFunc --value 9 --unit Count --timestamp 2018-06-19T04:15:00Z
$ aws cloudwatch put-metric-data --namespace MyApplication --metric-name Errors --dimensions FunctionName=MyFunc --value 1 --unit Count --timestamp 2018-06-19T04:20:00Z
참고: 동일한 네임스페이스에서 단일 PutMetricData API 호출을 사용하여 최대 20개의 지표를 게시할 수도 있습니다. 이렇게 하려면PutMetricData 호출에서 -metric-data 옵션을 사용하세요.
3. 입력 파라미터와 함께 aws cloudwatch get-metric-data 명령을 실행합니다.
4. 출력을 검토합니다. 이 예시에서는 지표 수식을 사용하여 5개의 데이터 포인트가 계산된 후 결과가 시간순으로 정렬되어 반환됩니다. ReturnData가 false로 설정되었으므로 m1 및 m2는 응답에 포함되지 않습니다.
$ aws cloudwatch get-metric-data --metric-data-queries file://./metric-data-queries.json --start-time 2018-06-19T04:00:00Z --end-time 2018-06-19T04:30:00Z
{
"MetricDataResults": [
{
"Timestamps": [
"2018-06-19T04:20:00Z",
"2018-06-19T04:15:00Z",
"2018-06-19T04:10:00Z",
"2018-06-19T04:05:00Z",
"2018-06-19T04:00:00Z"
],
"StatusCode": "Complete",
"Values": [
0.1,
0.9,
0.2,
0.6,
0.3
],
"Id": "e1",
"Label": "ErrorRate"
}
]
}