04 / 06
ecs-discovery
ECS Task 자동 탐지, Docker Labels 파싱, ecs_file_sd.yml 생성, PRD/DEV 클러스터 수집
ECS Discovery
ecs-discovery 개요
ecs-discovery 컨테이너는 AWS ECS 클러스터의 Fargate Task를 자동으로 탐지하여 Prometheus가 메트릭을 수집할 수 있도록 연결하는 핵심 구성 요소이다. ECS API를 주기적으로 호출하여 실행 중인 Task 목록을 조회하고, 각 Task의 Docker Labels와 포트 정보를 파싱하여 Prometheus용 ecs_file_sd.yml 파일을 생성한다. 이 파일은 Prometheus 설정에 의해 지속적으로 참조되어, 새로운 Task가 배포되거나 IP가 변경되어도 자동으로 수집 대상이 갱신된다.
Discovery Flow
Task 목록 조회
ecs-discovery가 ECS API를 주기적으로 호출하여 클러스터 내 실행 중인 Task 목록을 조회
Docker Labels 파싱
각 Task의 Docker Labels와 포트 정보를 파싱하여 메트릭 엔드포인트 정보를 추출
ecs_file_sd.yml 생성
파싱된 정보를 기반으로 Prometheus가 읽을 수 있는 ecs_file_sd.yml 파일을 생성
Prometheus 참조
Prometheus가 file_sd_configs 설정을 통해 ecs_file_sd.yml을 지속적으로 참조하여 수집 대상을 갱신
Constraints
ECS Service 제약사항
LB Target Group 재생성 필요
ECS Service를 한 번 만들고 난 후에는 LB Target Group에 Fargate를 추가하는 것이 불가하여, Service를 다시 새로 만들어야 한다. 운영 환경에 적용 시 반드시 고려해야 하는 부분이다.
컨테이너당 LB 연결 제한
한 개의 ECS Service에 여러 컨테이너가 있을 수 있지만, 로드 밸런서 대상 그룹 연결은 각 ECS Service마다 한 개의 컨테이너에만 가능하다는 제약이 있다.
ecs-discovery 도입으로 해결
ecs-discovery를 도입하면 LB를 거치지 않고 ECS API를 통해 직접 Task IP를 탐지하므로, 위 제약사항에 영향을 받지 않고 모든 컨테이너의 메트릭을 수집할 수 있다.
Docker Commands
Docker 명령어
운영(PRD)과 테스트(DEV) 클러스터 모두에서 ECS Task를 수집하기 위해 각각의 docker run 명령어를 실행한다.
docker run -d \
--name ecs-discovery-cluster_prd \
-v /[COMPANY]_SW/monitoring/output_prd:/output \
-e AWS_REGION=ap-northeast-2 \
-e AWS_ACCESS_KEY_ID=... \
-e AWS_SECRET_ACCESS_KEY=... \
tkgregory/prometheus-ecs-discovery \
--config.write-to=/output/ecs_file_sd.yml \
--config.cluster=[Company]_Clusterdocker run -d \
--name ecs-discovery-cluster_dev \
-v /[COMPANY]_SW/monitoring/output_dev:/output \
-e AWS_REGION=ap-northeast-2 \
-e AWS_ACCESS_KEY_ID=... \
-e AWS_SECRET_ACCESS_KEY=... \
tkgregory/prometheus-ecs-discovery \
--config.write-to=/output/ecs_file_sd.yml \
--config.cluster=[Company]_Cluster_Dev* AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY 값은 보안상 마스킹 처리했습니다
Prometheus Config
Prometheus 설정
ecs-discovery가 생성한 ecs_file_sd.yml 파일을 Prometheus가 참조하도록 prometheus.yml 설정을 변경한다. PRD와 DEV 클러스터의 출력 파일을 모두 등록하여 두 환경의 ECS Task 메트릭을 동시에 수집한다.
scrape_configs:
- job_name: 'ecs-tasks'
file_sd_configs:
- files:
- /[COMPANY]_SW/monitoring/output_prd/ecs_file_sd.yml
- /[COMPANY]_SW/monitoring/output_dev/ecs_file_sd.yml핵심 요약
ecs-discovery는 ECS API를 통해 Fargate Task를 자동 탐지하고, Prometheus의 file_sd_configs 메커니즘을 활용하여 동적으로 수집 대상을 갱신한다. LB Target Group 제약사항을 우회하면서도 PRD/DEV 두 클러스터의 모든 Task 메트릭을 안정적으로 수집할 수 있는 구조이다.