View a markdown version of this page

Amazon CloudWatch 솔루션: Amazon ECS에서 Prometheus 지표 수집 - Amazon CloudWatch

Amazon CloudWatch 솔루션: Amazon ECS에서 Prometheus 지표 수집

이 솔루션을 사용하면 자체 수집 인프라를 실행하거나 확장하지 않고도 Amazon ECS 태스크에서 Prometheus 호환 지표를 수집할 수 있습니다. 태스크는 Prometheus 내보내기 도구를 통해 지표를 노출합니다. Amazon CloudWatch 관리형 Prometheus 수집기는 DNS 기반 서비스 검색을 통해 VPC의 태스크를 검색하고, /metrics 엔드포인트를 스크레이핑하고, 지표를 CloudWatch에 전송합니다. Amazon ECS 태스크는 임시 태스크이고 해당 IP 주소가 변경되므로, 이 솔루션은 AWS Cloud Map 서비스 검색을 사용하여 수집기가 항상 현재 태스크 세트를 스크레이핑합니다. CloudWatch 관찰성 솔루션에서 모든 CloudWatch 관찰성 솔루션에 대한 일반 정보를 참조하세요. 관리형 수집기에 대한 자세한 내용은 Amazon CloudWatch 관리형 Prometheus 수집기 섹션을 참조하세요.

요구 사항

이 솔루션 관련 조건은 다음과 같습니다.

  • 컴퓨팅: Prometheus 호환 지표를 노출하는 Amazon ECS 태스크(Amazon EC2 또는 AWS Fargate에서).

  • DNS 기반 서비스 검색을 위해 AWS Cloud Map에 등록하는 Amazon ECS 서비스.

  • DNS가 활성화된 Amazon VPC 및 수집기에 대해 서로 다른 가용 영역에 있는 서브넷 2개 이상.

  • 수집기가 태스크의 지표 포트에 도달하도록 허용하는 보안 그룹. 태스크와 수집기가 보안 그룹을 공유하는 경우 지표 포트에 대한 자체 참조 수신 규칙을 추가합니다.

Prometheus 내보내기 도구 활성화

Prometheus 내보내기 도구는 HTTP /metrics 엔드포인트에서 지표를 Prometheus 노출 형식으로 노출하는 프로세스입니다. Amazon ECS에서는 일반적으로 애플리케이션과 동일한 태스크 정의에서 사이드카 컨테이너로 내보내기 도구를 실행하거나 지표를 직접 노출하도록 애플리케이션을 계측합니다. 일반적으로 사용되는 내보내기 도구는 다음과 같습니다.

  • Node Exporter - Amazon EC2 시작 유형의 태스크에 대한 호스트 수준 인프라 지표입니다(기본 포트 9100). 자세한 내용은 GitHub의 Node Exporter 리포지토리를 참조하세요.

  • JMX Exporter - Java 워크로드에 대한 JVM 및 Java 애플리케이션 지표입니다. 자세한 내용은 GitHub의 JMX Exporter 리포지토리를 참조하세요.

  • NGINX Prometheus Exporter - NGINX 웹 서버 및 역방향 프록시 지표입니다. 자세한 내용은 GitHub의 NGINX Prometheus Exporter 리포지토리를 참조하세요.

  • DCGM Exporter - GPU 워크로드에 대한 NVIDIA GPU 지표입니다(기본 포트 9400). 자세한 내용은 GitHub의 DCGM Exporter 리포지토리를 참조하세요.

  • HAProxy Exporter - HAProxy 로드 밸런서 지표입니다. 자세한 내용은 GitHub의 HAProxy Exporter 리포지토리를 참조하세요.

  • Apache Exporter - Apache HTTP 서버 지표입니다. 자세한 내용은 GitHub의 Apache Exporter 리포지토리를 참조하세요.

내보내기 도구의 공식 설명서에 따라 태스크 정의에 내보내기 도구를 추가하고 해당 지표 포트를 노출합니다. 사용 가능한 전체 내보내기 도구 목록은 Prometheus 설명서의 Exporters and integrations를 참조하세요.

1단계: 보안 그룹 설정

Amazon ECS 태스크의 보안 그룹이 지표 포트의 수집기로부터의 인바운드 트래픽을 허용하는지 확인합니다. 태스크와 수집기가 보안 그룹을 공유할 때 동일한 보안 그룹의 리소스가 통신할 수 있도록 자체 참조 수신 규칙을 추가합니다. 다음 명령은 포트 80에서 동일한 보안 그룹의 인바운드 트래픽을 허용합니다.

aws ec2 authorize-security-group-ingress \ --group-id sg-security-group-id \ --ip-permissions IpProtocol=tcp,FromPort=80,ToPort=80,UserIdGroupPairs='[{GroupId=sg-security-group-id}]'

2단계: 스크레이프 구성 설정

AWS Cloud Map에 등록하는 Amazon ECS 태스크의 경우 DNS 기반 서비스 검색(dns_sd_configs)을 사용하여 태스크가 시작 및 중지될 때 태스크를 자동으로 찾아 스크레이프합니다. 이 dns_sd_configs 섹션에서는 수집기에 AWS Cloud Map DNS 이름을 쿼리하고 반환된 모든 IP 주소를 스크레이핑하도록 지시합니다. Amazon ECS가 태스크를 바꾸면 수집기는 다음 DNS 쿼리에서 변경 사항을 적용합니다. 이 relabel_configs 섹션에서는 여러 서비스에서 쿼리하고 필터링할 수 있도록 지표에 일관된 레이블을 추가합니다. 지원되는 전체 구성 옵션 세트는 스크레이퍼 구성 섹션을 참조하세요.

global: scrape_interval: 30s scrape_timeout: 10s scrape_configs: - job_name: 'ecs-payforadoption' dns_sd_configs: - names: ['payforadoption-go.Workshop-space'] type: A port: 80 metrics_path: '/metrics' relabel_configs: - target_label: service_name replacement: 'payforadoption-go' - target_label: cloudmap_namespace replacement: 'Workshop-space' - target_label: environment replacement: 'production' - target_label: compute_platform replacement: 'ecs-fargate'

3단계: 스크레이퍼 설정

Amazon ECS 태스크를 스크레이핑하고 CloudWatch 데이터세트에 지표를 전송하는 VPC 연결 관리형 수집기를 생성하세요.

GetDefaultScraperConfiguration을 사용하여 범용 스크레이퍼 구성을 검색하거나 직접 제공할 수 있습니다.

AWS API

CreateScraper API 작업을 사용하여 CloudWatch 대상과 함께 스크레이퍼를 생성하세요. 서브넷, 보안 그룹 및 데이터세트 정보를 사용자 고유의 값으로 바꾸세요.

POST /scrapers HTTP/1.1 { "alias": "ecs-payforadoption-scraper", "source": { "vpcConfiguration": { "subnetIds": ["subnet-subnet-id-1", "subnet-subnet-id-2"], "securityGroupIds": ["sg-security-group-id"] } }, "destination": { "cloudWatchConfiguration": { "datasetArn": "arn:aws:cloudwatch:us-west-2:123456789012:dataset/default" } }, "scrapeConfiguration": { "configurationBlob": "base64-encoded-blob" } }
AWS CLI

create-scraper 명령을 사용하여 CloudWatch 대상과 함께 스크레이퍼를 생성하세요. 서브넷, 보안 그룹 및 데이터세트 정보를 사용자 고유의 값으로 바꾸세요.

aws amp create-scraper \ --alias "ecs-payforadoption-scraper" \ --source '{ "vpcConfiguration": { "subnetIds": ["subnet-subnet-id-1", "subnet-subnet-id-2"], "securityGroupIds": ["sg-security-group-id"] } }' \ --scrape-configuration configurationBlob=$(cat ecs-scraper.yml | base64 -w 0) \ --destination '{ "cloudWatchConfiguration": { "datasetArn": "arn:aws:cloudwatch:us-west-2:123456789012:dataset/default" } }'

지표 수집 검증

수집기가 지표 전송을 시작한 후 Query Studio를 사용하여 CloudWatch에서 임시 쿼리를 실행하여 지표가 도착했는지 확인하세요. 예를 들어 다음 쿼리는 지난 5분 동안의 Amazon ECS 태스크에 대한 초당 평균 요청 수를 반환합니다.

rate(payforadoption_requests_total[5m])

사용자 지정 대시보드 구축

수집기가 Amazon ECS 지표를 CloudWatch로 전송하기 시작하면 사용자 지정 CloudWatch 대시보드를 구축하여 이를 시각화할 수 있습니다. 사용자 지정 대시보드를 사용하면 Prometheus 내보내기 도구의 지표를 위젯으로 결합하고, PromQL 기반 쿼리를 추가하며, 모니터링 요구 사항에 맞게 위젯을 구성할 수 있습니다. 자세한 내용은 CloudWatch 대시보드 사용을 참조하세요.

비용

Prometheus 수집기에 대해 시간 단위로 요금이 부과되며, CloudWatch OpenTelemetry 지표 수집 요금이 적용됩니다. CloudWatch 요금에 대한 자세한 내용은 Amazon CloudWatch 요금을 참조하세요.