데이터 소스에 대한 사용자 지정 커넥터 생성
이 주제에서는 CloudWatch에 사용자 지정 데이터 소스를 연결하는 방법을 설명합니다. 다음 두 가지 방법으로 CloudWatch에 사용자 지정 데이터 소스를 연결할 수 있습니다.
-
CloudWatch에서 제공하는 샘플 템플릿 사용 이 템플릿에는 JavaScript 또는 Python을 사용할 수 있습니다. 이러한 템플릿에는 Lambda 함수를 생성할 때 유용하게 사용할 수 있는 샘플 Lambda 코드가 포함되어 있습니다. 그런 다음, 템플릿에서 Lambda 함수를 수정하여 사용자 지정 데이터 소스에 연결할 수 있습니다.
-
CloudWatch에서 사용할 데이터 소스 커넥터, 데이터 쿼리, 시계열 준비를 구현하는 AWS Lambda 함수를 처음부터 생성. 이 함수는 필요한 경우 데이터 포인트를 사전 집계하거나 병합해야 하며 CloudWatch와 호환되도록 기간과 타임스탬프도 정렬해야 합니다.
목차
템플릿 사용
템플릿을 사용하면 샘플 Lambda 함수가 생성되므로 사용자 지정 커넥터를 더 빨리 구축할 수 있습니다. 이러한 샘플 함수는 사용자 지정 커넥터 구축과 관련된 여러 일반적인 시나리오에 대한 샘플 코드를 제공합니다. 템플릿을 사용하여 커넥터를 생성한 후 Lambda 코드를 검사한 다음, 이를 수정하여 데이터 소스에 연결하는 데 사용할 수 있습니다.
또한 템플릿을 사용하는 경우 CloudWatch가 Lambda 권한 정책을 생성하고 Lambda 함수에 리소스 태그를 연결합니다.
템플릿을 사용하여 사용자 지정 데이터 소스에 대한 커넥터 생성
https://console.aws.amazon.com/cloudwatch/
에서 CloudWatch 콘솔을 엽니다. -
탐색 창에서 설정을 선택합니다.
지표 데이터 소스 탭을 선택합니다.
데이터 소스 생성을 선택합니다.
사용자 지정 - 시작하기 템플릿의 라디오 버튼을 선택한 후 다음을 선택합니다.
데이터 소스 이름을 입력합니다.
나열된 템플릿 중 하나를 선택합니다.
Node.js 또는 Python을 선택합니다.
데이터 소스 생성을 선택합니다.
방금 추가한 새 사용자 지정 소스는 AWS CloudFormation 스택 생성이 완료될 때까지 표시되지 않습니다. 진행 상황을 확인하려면 내 CloudFormation 스택의 상태 보기를 선택합니다. 또는 새로 고침 아이콘을 선택하여 이 목록을 업데이트할 수 있습니다.
새 데이터 소스가 이 목록에 나타나면 콘솔에서 테스트하고 수정할 준비가 된 것입니다.
(선택 사항) 콘솔에서 이 소스의 테스트 데이터를 쿼리하려면 다른 데이터 소스의 지표 그래프 생성의 지침을 따릅니다.
필요에 맞게 Lambda 함수를 수정합니다.
탐색 창에서 설정을 선택합니다.
지표 데이터 소스 탭을 선택합니다.
수정하려는 소스에 대해 Lambda 콘솔에서 보기를 선택합니다.
이제 데이터 소스에 액세스하도록 함수를 수정할 수 있습니다. 자세한 내용은 1단계: 함수 생성 단원을 참조하십시오.
참고
템플릿을 사용하면 Lambda 함수를 작성할 때 2단계: Lambda 권한 정책 생성 및 3단계: Lambda 함수에 리소스 태그 연결의 지침을 따를 필요가 없습니다. 템플릿을 사용했기 때문에 CloudWatch에서 이러한 단계를 수행했습니다.
처음부터 사용자 지정 데이터 소스 생성
이 섹션의 단계에 따라 데이터 소스에 CloudWatch를 연결하는 Lambda 함수를 생성합니다.
1단계: 함수 생성
사용자 지정 데이터 소스 커넥터는 CloudWatch의 GetMetricData
이벤트를 지원해야 합니다. 필요에 따라 DescribeGetMetricData
이벤트를 구현하여 CloudWatch 콘솔에서 커넥터 사용 방법에 대한 설명서를 사용자에게 제공할 수도 있습니다. DescribeGetMetricData
응답을 사용하여 CloudWatch 사용자 지정 쿼리 작성기에 사용되는 기본값을 설정할 수도 있습니다.
CloudWatch는 시작하는 데 도움이 되는 코드 조각을 샘플로 제공합니다. 자세한 내용은 https://github.com/aws-samples/cloudwatch-data-source-samples
제약 조건
Lambda의 응답은 6Mb보다 작아야 합니다. 응답이 6Mb를 초과하는 경우
GetMetricData
응답은 Lambda 함수를InternalError
로 표시하고 데이터가 반환되지 않습니다.Lambda 함수는 시각화 및 대시보드 작성의 경우 10초 이내에, 경보 사용의 경우 4.5초 이내에 실행을 완료해야 합니다. 실행 시간이 해당 시간을 초과하는 경우
GetMetricData
응답은 Lambda 함수를InternalError
로 표시하고 데이터가 반환되지 않습니다.Lambda 함수는 epoch 타임스탬프를 사용하여 출력을 초 단위로 전송해야 합니다.
Lambda 함수가 데이터를 리샘플링하지 않고 대신 CloudWatch 사용자가 요청한 시작 시간 및 기간 길이에 해당하지 않는 데이터를 반환하는 경우 CloudWatch에서 해당 데이터를 무시합니다. 추가 데이터는 모든 시각화 또는 경보에서 삭제됩니다. 시작 시간과 종료 시간 사이에 있지 않은 데이터도 모두 삭제됩니다.
예를 들어, 사용자가 5분 간격으로 10:00~11:00에 데이터를 요청하는 경우 '10:00:00~10:04:59' 및 '10:05:00~10:09:59'가 반환될 데이터의 유효한 시간 범위입니다.
10:00 value1
,10:05 value2
등을 포함하는 시계열을 반환해야 합니다. 예를 들어, 함수가10:03 valueX
를 반환하는 경우 10:03이 요청된 시작 시간 및 기간과 일치하지 않기 때문에 삭제됩니다.CloudWatch 데이터 소스 커넥터는 여러 줄 쿼리를 지원하지 않습니다. 쿼리가 실행되거나 쿼리로 경보 또는 대시보드 위젯을 생성할 때 모든 줄 바꿈이 공백으로 바뀝니다. 어떤 경우에는 이로 인해 쿼리가 유효하지 않게 될 수 있습니다.
GetMetricData 이벤트
요청 페이로드
다음은 Lambda 함수에 입력으로 전송된 GetMetricData
요청 페이로드의 예제입니다.
{ "EventType": "GetMetricData", "GetMetricDataRequest": { "StartTime": 1697060700, "EndTime": 1697061600, "Period": 300, "Arguments": ["serviceregistry_external_http_requests{host_cluster!=\"prod\"}"] } }
StartTime - 반환할 가장 빠른 데이터를 지정하는 타임스탬프입니다. 유형은 타임스탬프 epoch 초입니다.
EndTime - 반환할 최신 데이터를 지정하는 타임스탬프입니다. 유형은 타임스탬프 epoch 초입니다.
Period - 지표 데이터의 각 집계가 나타내는 시간(초)입니다. 최소 시간은 60초입니다. 유형은 초입니다.
Arguments - Lambda 지표 수학 표현식에 전달할 인수 배열입니다. 인수 전달에 대한 자세한 내용은 Lambda 함수에 인수를 전달하는 방법 섹션을 참조하세요.
응답 페이로드
다음은 Lambda 함수에서 반환하는 GetMetricData
응답 페이로드의 예제입니다.
{ "MetricDataResults": [ { "StatusCode": "Complete", "Label": "CPUUtilization", "Timestamps": [ 1697060700, 1697061000, 1697061300 ], "Values": [ 15000, 14000, 16000 ] } ] }
응답 페이로드는 MetricDataResults
필드 또는 Error
필드 중 하나를 포함하되 두 필드 모두를 포함하지는 않습니다.
MetricDataResults
필드는 MetricDataResult
유형의 시계열 필드 목록입니다. 각 시계열 필드는 다음 필드를 포함할 수 있습니다.
StatusCode – (선택 사항)
Complete
은 요청된 시간 범위의 모든 데이터 포인트가 반환되었음을 나타냅니다.PartialData
는 불완전한 데이터 포인트 세트가 반환되었음을 의미합니다. 생략 시 기본값은Complete
입니다.유효한 값:
Complete
|InternalError
|PartialData
|Forbidden
Messages – 반환된 데이터에 대한 추가 정보가 포함된 선택적 메시지 목록입니다.
유형:
Code
및Value
문자열이 포함된 MessageData 객체의 배열입니다.Label - 데이터와 연결된 사람이 읽을 수 있는 레이블입니다.
유형: 문자열
Timestamps – epoch 시간으로 형식이 지정된 데이터 포인트의 타임스탬프입니다. 타임스탬프 수는 항상 값 수와 일치하며
Timestamps[x]
값은Values[x
]입니다.유형: 타임스탬프의 배열입니다.
Values –
Timestamps
에 해당하는 지표의 데이터 포인트 값입니다. 값 수는 항상 타임스탬프 수와 일치하며Timestamps[x]
값은Values[x
]입니다.유형: 실수의 배열입니다.
Error
객체에 대한 자세한 내용은 다음 섹션을 참조하세요.
오류 응답 형식
필요에 따라 오류 응답을 사용하여 오류에 대한 자세한 정보를 제공할 수 있습니다. 파라미터가 누락되었거나 유형이 잘못된 경우와 같이 검증 오류가 발생하는 경우 코드 검증을 통해 오류를 반환하는 것이 좋습니다.
다음은 Lambda 함수가 GetMetricData
검증 예외를 발생시키려고 할 때 응답의 예제입니다.
{ "Error": { "Code": "Validation", "Value": "Invalid Prometheus cluster" } }
다음은 Lambda 함수가 액세스 문제로 인해 데이터를 반환할 수 없다고 표시할 때의 응답 예제입니다. 응답은 상태 코드가 Forbidden
인 단일 시계열로 변환됩니다.
{ "Error": { "Code": "Forbidden", "Value": "Unable to access ..." } }
다음은 Lambda 함수가 전체 InternalError
예외를 발생시키는 예로, 상태 코드가 InternalError
이고 메시지가 있는 단일 시계열로 변환됩니다. CloudWatch는 오류 코드에 Validation
또는 Forbidden
이외의 값이 있을 때마다 일반적인 내부 오류로 간주합니다.
{ "Error": { "Code": "PrometheusClusterUnreachable", "Value": "Unable to communicate with the cluster" } }
DescribeGetMetricData 이벤트
요청 페이로드
다음은 DescribeGetMetricData
요청 페이로드의 예제입니다.
{ "EventType": "DescribeGetMetricData" }
응답 페이로드
다음은 DescribeGetMetricData
응답 페이로드의 예제입니다.
{ "Description": "Data source connector", "ArgumentDefaults": [{ Value: "default value" }] }
Description – 데이터 소스 커넥터를 사용하는 방법에 대한 설명입니다. 이 설명은 CloudWatch 콘솔에 표시됩니다. 마크다운이 지원됩니다.
유형: 문자열
ArgumentDefaults – 사용자 지정 데이터 소스 작성기를 미리 채우는 데 사용되는 인수 기본값의 선택적 배열입니다.
[{ Value: "default value 1"}, { Value: 10}]
이 반환되면 CloudWatch 콘솔의 쿼리 작성기는 2개의 입력을 표시합니다. 첫 번째 입력은 "default value 1"이고 두 번째 입력은 10입니다.ArgumentDefaults
가 제공되지 않으면 기본 유형이String
으로 설정된 단일 입력이 표시됩니다.유형: 값과 유형을 포함하는 객체 배열입니다.
Error - (선택 사항) 모든 응답에 오류 필드를 포함할 수 있습니다. GetMetricData 이벤트에서 예제를 볼 수 있습니다.
CloudWatch 경보에 대한 중요 고려 사항
데이터 소스를 사용하여 CloudWatch 경보를 설정하려는 경우 1분마다 타임스탬프가 있는 데이터를 CloudWatch에 보고하도록 설정해야 합니다. 연결된 데이터 소스의 지표에 대한 경보를 생성하는 방법에 대한 자세한 내용과 기타 고려 사항은 연결된 데이터 소스를 기반으로 경보 생성 섹션을 참조하세요.
(선택 사항) AWS Secrets Manager를 사용하여 보안 인증 저장
Lambda 함수가 보안 인증을 사용하여 데이터 소스에 액세스해야 하는 경우 Lambda 함수에 보안 인증을 하드코딩하는 대신 AWS Secrets Manager를 사용하여 보안 인증을 저장하는 것이 좋습니다. Lambda에서 AWS Secrets Manager를 사용하는 방법에 대한 자세한 내용은 AWS Lambda 함수에서 AWS Secrets Manager 보안 암호 사용을 참조하세요.
(선택 사항) VPC의 데이터 소스에 연결
데이터 소스가 Amazon Virtual Private Cloud에서 관리하는 VPC에 있는 경우 이에 액세스하려면 Lambda 함수를 구성해야 합니다. 자세한 내용은 아웃바운드 네트워킹을 VPC의 리소스에 연결을 참조하세요.
AWS Secrets Manager와 같은 서비스에 액세스하려면 VPC 서비스 엔드포인트를 구성해야 할 수도 있습니다. 자세한 내용은 인터페이스 VPC 엔드포인트를 사용하여 AWS 서비스에 액세스를 참조하세요.
2단계: Lambda 권한 정책 생성
생성한 Lambda 함수를 사용할 수 있는 권한을 CloudWatch에 부여하는 정책 설명 생성을 사용해야 합니다. AWS CLI 또는 Lambda 콘솔을 사용하여 정책 설명을 생성할 수 있습니다.
AWS CLI를 사용하여 정책 설명 생성
다음 명령을 입력합니다.
123456789012
를 계정 ID로 바꾸고,my-data-source-function
을 Lambda 함수 이름으로 바꾸고,MyDataSource-DataSourcePermission1234
를 임의의 고유 값으로 바꿉니다.aws lambda add-permission --function-name
my-data-source-function
--statement-idMyDataSource-DataSourcePermission1234
--action lambda:InvokeFunction --principal lambda.datasource.cloudwatch.amazonaws.com --source-account123456789012
3단계: Lambda 함수에 리소스 태그 연결
CloudWatch 콘솔은 태그를 사용하여 어떤 Lambda 함수가 데이터 소스 커넥터인지 결정합니다. AWS CloudFormation 마법사 중 하나를 사용하여 데이터 소스를 생성하면 이를 구성하는 스택에 의해 태그가 자동으로 적용됩니다. 데이터 소스를 직접 생성할 때 Lambda 함수에 다음 태그를 사용할 수 있습니다. 이렇게 하면 지표를 쿼리할 때 CloudWatch 콘솔의 데이터 소스 드롭다운에 커넥터가 표시됩니다.
cloudwatch:datasource
가 키이고custom
이 값인 태그