CloudWatch Metrics Insights의 쿼리 구성 요소 및 구문 - Amazon CloudWatch

CloudWatch Metrics Insights의 쿼리 구성 요소 및 구문

CloudWatch Metrics Insights 구문은 다음과 같습니다.

SELECT FUNCTION(metricName) FROM namespace | SCHEMA(...) [ WHERE labelKey OPERATOR labelValue [AND ... ] ] [ GROUP BY labelKey [ , ... ] ] [ ORDER BY FUNCTION() [ DESC | ASC ] ] [ LIMIT number ]

Metrics Insights 쿼리에서 가능한 절은 다음과 같습니다. 키워드는 대소문자를 구분하지 않지만 지표 이름, 네임스페이스 및 측정기준 등의 식별자는 대소문자를 구분합니다.

SELECT

필수 사항입니다. 각 시간 버킷에서 관측치를 집계하는 데 사용할 함수를 지정합니다(제공된 기간까지 결정). 쿼리할 지표 이름도 지정합니다.

FUNCTION에 유효한 값은 AVG, COUNT, MAX, MINSUM입니다.

  • AVG는 쿼리와 일치하는 관측치의 평균을 계산합니다.

  • COUNT는 쿼리와 일치하는 관측치의 개수를 반환합니다.

  • MAX는 쿼리와 일치하는 관측치의 최대값을 반환합니다.

  • MIN은 쿼리와 일치하는 관측치의 최소값을 반환합니다.

  • SUM은 쿼리와 일치하는 관측치의 합계를 계산합니다.

FROM

필수 사항입니다. 지표의 소스을 지정합니다. 쿼리할 지표가 포함된 지표 네임스페이스 또는 SCHEMA 테이블 함수를 지정할 수 있습니다. 지표 네임스페이스의 예는 "AWS/EC2", "AWS/Lambda" 및 사용자 지정 지표에 대해 생성한 지표 네임스페이스입니다.

/ 또는 문자, 숫자 또는 밑줄이 아닌 다른 문자가 포함된 지표 네임스페이스는 큰따옴표로 묶어야 합니다. 자세한 내용은 따옴표 또는 이스케이프 문자는 무엇에 필요한가요? 단원을 참조하십시오.

스키마

FROM 절에서 사용할 수 있는 테이블 함수(선택 사항). SCHEMA를 사용하여 쿼리 결과를 측정기준 목록과 정확히 일치하는 지표 또는 측정기준이 없는 지표로 범위를 축소합니다.

SCHEMA 절을 사용하는 경우 적어도 하나의 인수를 포함해야 하며 이 첫 번째 인수는 쿼리되는 지표 네임스페이스여야 합니다. SCHEMA를 네임스페이스 인수만 사용해서 지정한 경우 결과 범위가 측정기준이 없는 지표로만 축소됩니다.

SCHEMA를 추가 인수와 함께 지정한 경우 네임스페이스 인수 뒤에 있는 추가 인수는 레이블 키여야 합니다. 레이블 키는 측정기준 이름이어야 합니다. 이러한 레이블 키 중 하나 이상을 지정하면 정확한 측정기준 집합이 있는 지표로만 결과 범위가 축소됩니다. 이러한 레이블 키의 순서는 중요하지 않습니다.

예:

  • SELECT AVG(CPUUtilization) FROM "AWS/EC2"는 측정기준과 관계없이 CPUUtilization 네임스페이스에 있는 AWS/EC2 지표와 일치하면 단일 집계된 시계열을 반환합니다.

  • SELECT AVG(CPUUtilization) FROM SCHEMA("AWS/EC2")는 정의되지 않은 측정기준이 없는 AWS/EC2 네임스페이스에서 CPUUtilization 지표와만 일치합니다.

  • SELECT AVG(CPUUtilization) FROM SCHEMA("AWS/EC2", InstanceId)는 정확히 하나의 InstanceId 측정기준으로 CloudWatch에 보고된 CPUUtilization 지표와만 일치합니다.

  • SELECT SUM(RequestCount) FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone)는 정확히 LoadBalancerAvailabilityZone 측정기준을 사용한 AWS/ApplicationELB에서 CloudWatch로 보고된 RequestCount 지표와만 일치합니다.

WHERE

선택 사항. 1개 이상의 레이블 키에 대해 특정 레이블 값을 사용하여 지정된 표현식과 일치하는 지표로만 결과를 필터링합니다. 예를 들어 WHERE InstanceType = 'c3.4xlarge'는 결과를 c3.4xlarge 인스턴스 유형으로만 필터링하며 WHERE InstanceType != 'c3.4xlarge'c3.4xlarge를 제외한 모든 인스턴스 유형으로 결과를 필터링합니다.

모니터링 계정에서 쿼리를 실행하는 경우 WHERE AWS.AccountId를 사용하여 지정된 계정으로만 결과를 제한할 수 있습니다. 예를 들어, WHERE AWS.AccountId=444455556666은 계정 444455556666의 지표만 쿼리합니다. 모니터링 계정 자체의 지표로만 쿼리를 제한하려면 WHERE AWS.AccountId=CURRENT_ACCOUNT_ID()를 사용합니다.

레이블 값은 항상 작은따옴표로 묶어야 합니다.

지원되는 연산자

WHERE 절은 다음과 같은 연산자를 지원합니다.

  • = 레이블 값은 지정된 문자열과 일치해야 합니다.

  • != 레이블 값은 지정된 문자열과 일치하지 않아야 합니다.

  • AND. 지정된 두 조건과 모두 일치하려면 true여야 합니다. 여러 AND 키워드를 사용하여 2개 이상의 조건을 지정할 수 있습니다.

GROUP BY

선택 사항. 쿼리 결과를 여러 시계열로 그룹화합니다. 각 시계열은 지정된 레이블 키 또는 키에 대한 여러 값에 해당합니다. 예를 들어 GROUP BY InstanceId를 사용하면 InstanceId의 각 값에 대한 여러 시계열을 반환합니다. GROUP BY ServiceName, Operation을 사용하면 가능한 각 ServiceNameOperation 값에 대해 서로 다른 시계열을 생성합니다.

GROUP BY 절을 사용하면 기본적으로 결과는 GROUP BY 절에 지정된 레이블 시퀀스를 사용하여 알파벳 오름차순으로 정렬됩니다. 결과 순서를 변경하려면 ORDER BY 절을 쿼리에 추가합니다.

모니터링 계정에서 쿼리를 실행할 때 GROUP BY AWS.AccountId를 사용하여 결과를 가져온 계정을 기준으로 결과를 그룹화할 수 있습니다.

참고

일치하는 지표 일부에 GROUP BY 절로 지정된 특정 레이블 키가 포함되어 있지 않은 경우 Other로 이름이 지정된 null 그룹이 반환됩니다. 예를 들어 GROUP BY ServiceName, Operation을 지정하고 반환된 지표 일부에 측정기준인 ServiceName이 포함되지 않은 경우 해당 지표는 ServiceName 값으로 Other를 표시합니다.

ORDER BY

선택 사항. 쿼리가 2개 이상의 시계열을 반환하는 경우 반환된 시계열에 사용할 순서를 지정합니다. 순서는 ORDER BY 절에서 지정한 FUNCTION으로 찾은 값을 기준으로 합니다. FUNCTION은 반환된 각 시계열에서 단일 스칼라 값을 계산하는 데 사용되며 해당 값은 순서를 결정하는 데 사용됩니다.

ASC로 오름차순 사용 여부 또는 DESC로 내림차순 사용 여부를 지정할 수도 있습니다. 생략하는 경우 기본값은 ASC로 오름차순입니다.

예를 들어, ORDER BY MAX() DESC 절을 추가하면 시간 범위 내에서 관찰된 최대 데이터 포인트별로 결과를 내림차순으로 정렬합니다. 즉, 최대 데이터 포인트가 가장 높은 시계열이 먼저 반환됩니다.

ORDER BY 절에서 사용할 유효 함수는 AVG(), COUNT(), MAX(), MIN()SUM()입니다.

ORDER BY 절을 LIMIT 절과 함께 사용하는 경우 결과 쿼리는 "상위 N" 쿼리입니다. ORDER BY로 각 쿼리는 500개 이하의 시계열을 반환할 수 있으므로 많은 수의 지표를 반환할 수 있는 쿼리에도 유용합니다. 쿼리가 500개 이상의 시계열과 일치하고 ORDER BY 절을 사용하는 경우 시계열이 정렬된 후 정렬 순서에서 먼저 나오는 500개 시계열이 반환되는 시계열입니다.

LIMIT

선택 사항. 쿼리에 의해 반환되는 시계열 수를 지정한 값으로 제한합니다. 지정할 수 있는 최대값은 500이며 LIMIT을 지정하지 않은 쿼리도 500개 이하의 시계열을 반환할 수 있습니다.

ORDER BY가 있는 LIMIT 절을 사용하면 "상위 N" 쿼리를 제공합니다.

따옴표 또는 이스케이프 문자는 무엇에 필요한가요?

쿼리에서 레이블 값은 항상 작은따옴표로 묶어야 합니다. 예: SELECT MAX(CPUUtilization) FROM "AWS/EC2" WHERE AutoScalingGroupName = 'my-production-fleet'.

문자, 숫자 및 밑줄(_) 이외의 문자가 포함된 지표 네임스페이스, 지표 이름 및 레이블 키는 큰따옴표로 묶어야 합니다. 예: SELECT MAX("My.Metric").

이들 중 하나에 큰따옴표나 작은따옴표가 포함된 경우(예:Bytes"Input") SELECT AVG("Bytes\"Input\"")와 같이 백슬래시를 사용하여 각 따옴표를 이스케이프 처리해야 합니다.

지표 네임스페이스, 지표 이름 또는 레이블 키에 Metrics Insights의 예약된 키워드 단어가 포함되어 있는 경우 이러한 단어도 큰따옴표로 묶어야 합니다. 예를 들어 LIMIT으로 이름 붙인 지표가 있는 경우 SELECT AVG("LIMIT")를 사용합니다. 예약어가 포함되어 있지 않더라도 네임스페이스, 지표 이름 또는 레이블을 큰따옴표로 묶는 것도 유효합니다.

전체 예약어 목록은 예약어 섹션을 참조하세요.

리치 쿼리 작성 단계별 방법

이 섹션에서는 가능한 모든 절을 단계별로 사용하는 전체 예제를 작성하는 방법을 설명합니다.

측정기준 LoadBalancerAvailabilityZone을 사용하여 수집된 모든 Application Load Balancer RequestCount 지표를 집계하는 다음 쿼리로 시작합니다.

SELECT SUM(RequestCount) FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone)

이제 특정 로드 밸런서의 지표만 보고 싶다면 WHERE 절을 추가하여 LoadBalancer 측정기준 값이 app/load-balancer-1인 해당 지표만 반환되는 지표로 제한할 수 있습니다.

SELECT SUM(RequestCount) FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone) WHERE LoadBalancer = 'app/load-balancer-1'

앞의 쿼리는 이 로드 밸런서에 대한 모든 가용 영역의 RequestCount 지표를 하나의 시계열로 집계합니다. 각 가용 영역에 대해 서로 다른 시계열을 보려면 GROUP BY 절을 추가할 수 있습니다.

SELECT SUM(RequestCount) FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone) WHERE LoadBalancer = 'app/load-balancer-1' GROUP BY AvailabilityZone

다음으로 가장 높은 값을 먼저 확인하기 위해 이러한 결과를 정렬할 수 있습니다. 다음 ORDER BY 절은 쿼리 시간 범위 동안 각 시계열에 의해 보고된 최대값만큼 내림차순으로 시계열을 정렬합니다.

SELECT SUM(RequestCount) FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone) WHERE LoadBalancer = 'app/load-balancer-1' GROUP BY AvailabilityZone ORDER BY MAX() DESC

마지막으로 "상위 N" 유형의 쿼리에 주로 관심이 있다면 LIMIT 절을 사용할 수 있습니다. 마지막 예에서는 결과를 상위 5개의 MAX 값을 가진 시계열로만 제한합니다.

SELECT SUM(RequestCount) FROM SCHEMA("AWS/ApplicationELB", LoadBalancer, AvailabilityZone) WHERE LoadBalancer = 'app/load-balancer-1' GROUP BY AvailabilityZone ORDER BY MAX() DESC LIMIT 5

크로스 계정 쿼리 예제

이러한 예제는 CloudWatch 크로스 계정 관찰성에서 모니터링 계정으로 설정된 계정에서 실행할 때 유효합니다.

다음 예제에서는 소스 계정 123456789012에서 모든 Amazon EC2 인스턴스를 검색하고 평균을 반환합니다.

SELECT AVG(CpuUtilization) FROM "AWS/EC2" WHERE AWS.AccountId ='123456789012'

다음 예제는 연결된 모든 소스 계정에서 AWS/EC2CPUUtilization 지표를 쿼리하고 결과를 계정 ID 및 인스턴스 유형별로 그룹화합니다.

SELECT AVG(CpuUtilization) FROM "AWS/EC2" GROUP BY AWS.AccountId, InstanceType

다음 예제는 모니터링 계정 자체에서 CPUUtilization을 쿼리합니다.

SELECT AVG(CpuUtilization) FROM "AWS/EC2" WHERE AWS.AccountId = CURRENT_ACCOUNT_ID()