추가 Prometheus 소스 스크레이핑 및 해당 지표 가져오기
Prometheus 모니터링이 포함된 CloudWatch 에이전트는 Prometheus 지표를 스크레이프하는 데 두 가지 구성이 필요합니다. 하나는 Prometheus 설명서의 <scrape_config>
Amazon ECS 클러스터의 경우 구성은 다음과 같이 Amazon ECS 태스크 정의의 보안 암호를 통해 AWS Systems Manager의 파라미터 스토어와 통합됩니다.
-
보안 암호
PROMETHEUS_CONFIG_CONTENT
는 Prometheus 스크레이프 구성을 위한 것입니다. -
보안 암호
CW_CONFIG_CONTENT
는 CloudWatch 에이전트 구성을 위한 것입니다.
추가 Prometheus 지표 소스를 스크레이프하고 해당 지표를 CloudWatch에 가져오려면 Prometheus 스크레이프 구성과 CloudWatch 에이전트 구성을 모두 수정한 다음, 업데이트된 구성으로 에이전트를 다시 배포합니다.
VPC 보안 그룹 요구 사항
Prometheus 워크로드의 보안 그룹 수신 규칙은 프라이빗 IP로 Prometheus 지표를 스크레이프하기 위해 CloudWatch 에이전트에 대한 Prometheus 포트를 열어야 합니다.
CloudWatch 에이전트의 보안 그룹 송신 규칙은 CloudWatch 에이전트가 프라이빗 IP로 Prometheus 워크로드의 포트에 연결할 수 있도록 허용해야 합니다.
Prometheus 스크레이프 구성
CloudWatch 에이전트는 Prometheus 설명서의 <scrape_config>
global: scrape_interval: 1m scrape_timeout: 10s
-
scrape_interval - 대상을 스크레이프하는 빈도를 정의합니다.
-
scrape_timeout - 스크레이프 요청 시간이 초과되기 전에 대기할 시간을 정의합니다.
작업 수준에서 이러한 설정에 다른 값을 정의하여 전역 구성을 재정의할 수도 있습니다.
Prometheus 스크레이핑 작업
CloudWatch 에이전트 YAML 파일에는 일부 기본 스크레이핑 작업이 이미 구성되어 있습니다. 예를 들어 cwagent-ecs-prometheus-metric-for-bridge-host.yaml
과 같은 Amazon ECS의 YAML 파일에서 기본 스크레이핑 작업은 ecs_service_discovery
섹션에서 구성됩니다.
"ecs_service_discovery": { "sd_frequency": "1m", "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml", "docker_label": { }, "task_definition_list": [ { "sd_job_name": "ecs-appmesh-colors", "sd_metrics_ports": "9901", "sd_task_definition_arn_pattern": ".*:task-definition\/.*-ColorTeller-(white):[0-9]+", "sd_metrics_path": "/stats/prometheus" }, { "sd_job_name": "ecs-appmesh-gateway", "sd_metrics_ports": "9901", "sd_task_definition_arn_pattern": ".*:task-definition/.*-ColorGateway:[0-9]+", "sd_metrics_path": "/stats/prometheus" } ] }
이러한 각 기본 대상은 스크레이프되고 지표는 임베디드 지표 형식을 사용하여 로그 이벤트로 CloudWatch에 전송됩니다. 자세한 내용은 로그 내에 지표 포함 섹션을 참조하세요.
Amazon ECS 클러스터의 로그 이벤트는 /aws/ecs/containerinsights/cluster_name
/prometheus 로그 그룹에 저장됩니다.
각 스크레이핑 작업은 이 로그 그룹의 서로 다른 로그 스트림에 포함됩니다.
새 스크레이핑 대상을 추가하려면 YAML 파일의 ecs_service_discovery
섹션 아래 task_definition_list
섹션에 새 항목을 추가하고 에이전트를 다시 시작합니다. 이 프로세스의 예는 새로운 Prometheus 스크레이프 대상을 추가하기 위한 튜토리얼: Prometheus API 서버 지표 단원을 참조하세요.
Prometheus에 대한 CloudWatch 에이전트 구성
CloudWatch 에이전트 구성 파일에는 metrics_collected
아래에 Prometheus 스크레이핑 구성에 대한 prometheus
섹션이 있습니다. 여기에는 다음 구성 옵션이 포함됩니다.
-
cluster_name - 로그 이벤트에서 레이블로 추가할 클러스터 이름을 지정합니다. 이 필드는 선택 사항입니다. 생략하는 경우 에이전트가 Amazon ECS 클러스터 이름을 감지할 수 있습니다.
-
log_group_name - 스크레이프한 Prometheus 지표의 로그 그룹 이름을 지정합니다. 이 필드는 선택 사항입니다. 생략하는 경우 CloudWatch는 Amazon ECS 클러스터의 로그에 /aws/ecs/containerinsights/
cluster_name
/prometheus를 사용합니다. -
prometheus_config_path - Prometheus 스크레이프 구성 파일 경로를 지정합니다. 이 필드의 값이
env:
로 시작하는 경우 Prometheus 스크레이프 구성 파일 내용이 컨테이너의 환경 변수에서 검색됩니다. 이 값은 변경하지 마세요. -
ecs_service_discovery - Amazon ECS Prometheus 대상 자동 검색 기능의 구성을 지정하는 섹션입니다. Prometheus 대상을 검색하기 위해 두 모드, 즉 컨테이너의 Docker 레이블을 기반으로 하는 검색 또는 Amazon ECS 태스크 정의 ARN 정규 표현식을 기반으로 하는 검색이 지원됩니다. 두 모드를 함께 사용할 수 있습니다. CloudWatch 에이전트는 {private_ip}:{port}/{metrics_path}를 기반으로 검색된 대상의 중복을 제거합니다.
ecs_service_discovery
섹션에는 다음 필드가 포함될 수 있습니다.-
sd_frequency
는 Prometheus Exporter를 검색하는 빈도입니다. 숫자와 단위 접미사를 지정합니다. 예를 들어 1분마다 한 번의 경우1m
또는 30초마다 한 번의 경우30s
입니다. 유효한 단위 접미사는ns
,us
,ms
,s
,m
,h
입니다.이 필드는 선택 사항입니다. 기본값은 60초(1분)입니다.
-
sd_target_cluster
는 자동 검색의 대상 Amazon ECS 클러스터 이름입니다. 이 필드는 선택 사항입니다. 기본값은 CloudWatch 에이전트가 설치된 Amazon ECS 클러스터의 이름입니다. -
sd_cluster_region
은 대상 Amazon ECS 클러스터의 리전입니다. 이 필드는 선택 사항입니다. 기본값은 CloudWatch 에이전트가 설치된 Amazon ECS 클러스터의 리전입니다. -
sd_result_file
은 Prometheus 대상 결과의 YAML 파일 경로입니다. Prometheus 스크레이프 구성은 이 파일을 참조합니다. -
docker_label
은 Docker 레이블 기반 서비스 검색을 위한 구성을 지정하는 데 사용할 수 있는 선택적 섹션입니다. 이 섹션을 생략하면 Docker 레이블 기반 검색이 사용되지 않습니다. 이 섹션에는 다음 필드가 포함될 수 있습니다.-
sd_port_label
은 Prometheus 지표에 대한 컨테이너 포트를 지정하는 컨테이너의 Docker 레이블 이름입니다. 기본값은ECS_PROMETHEUS_EXPORTER_PORT
입니다. 컨테이너에 이 Docker 레이블이 없다면 CloudWatch 에이전트는 이 필드를 건너뜁니다. -
sd_metrics_path_label
은 Prometheus 지표 경로를 지정하는 컨테이너의 Docker 레이블 이름입니다. 기본값은ECS_PROMETHEUS_METRICS_PATH
입니다. 컨테이너에 이 도커 레이블이 없다면 에이전트는 기본 경로/metrics
를 가정합니다. -
sd_job_name_label
은 Prometheus 스크레이프 작업 이름을 지정하는 컨테이너의 Docker 레이블 이름입니다. 기본값은job
입니다. 컨테이너에 이 Docker 레이블이 없다면 CloudWatch 에이전트는 Prometheus 스크레이프 구성의 작업 이름을 사용합니다.
-
-
task_definition_list
는 태스크 정의 기반 서비스 검색의 구성을 지정하는 데 사용할 수 있는 선택적 섹션입니다. 이 섹션을 생략하면 태스크 정의 기반 검색이 사용되지 않습니다. 이 섹션에는 다음 필드가 포함될 수 있습니다.-
sd_task_definition_arn_pattern
은 검색할 Amazon ECS 태스크 정의를 지정하는 데 사용할 패턴입니다. 이는 정규 표현식입니다. -
sd_metrics_ports
는 Prometheus 지표에 대한 containerPort를 나열합니다. containerPort를 세미콜론으로 구분합니다. -
sd_container_name_pattern
은 Amazon ECS 태스크 컨테이너 이름을 지정합니다. 이는 정규 표현식입니다. -
sd_metrics_path
는 Prometheus 지표 경로를 지정합니다. 이 필드를 생략하면 에이전트는 기본 경로/metrics
를 가정합니다. -
sd_job_name
은 Prometheus 스크레이프 작업 이름을 지정합니다. 이 필드를 생략하면 CloudWatch 에이전트는 Prometheus 스크레이프 구성의 작업 이름을 사용합니다.
-
-
service_name_list_for_tasks
는 서비스 이름 기반 검색의 구성을 지정하는 데 사용할 수 있는 선택적 섹션입니다. 이 섹션을 생략하면 서비스 이름 기반 검색이 사용되지 않습니다. 이 섹션에는 다음 필드가 포함될 수 있습니다.-
sd_service_name_pattern
은 태스크를 검색할 Amazon ECS 서비스를 지정하는 데 사용할 패턴입니다. 이는 정규 표현식입니다. -
sd_metrics_ports
는 Prometheus 지표에 대한containerPort
를 나열합니다. 여러containerPorts
를 세미콜론으로 구분합니다. -
sd_container_name_pattern
은 Amazon ECS 태스크 컨테이너 이름을 지정합니다. 이는 정규 표현식입니다. -
sd_metrics_path
는 Prometheus 지표 경로를 지정합니다. 이 필드를 생략하면 에이전트는 기본 경로/metrics
를 가정합니다. -
sd_job_name
은 Prometheus 스크레이프 작업 이름을 지정합니다. 이 필드를 생략하면 CloudWatch 에이전트는 Prometheus 스크레이프 구성의 작업 이름을 사용합니다.
-
-
-
metric_declaration - 생성할 임베디드 지표 형식이 있는 로그 배열을 지정하는 섹션입니다. CloudWatch 에이전트가 기본적으로 가져오는 각 Prometheus 소스에 대한
metric_declaration
섹션이 있습니다. 이러한 섹션에는 각각 다음 필드가 포함됩니다.-
label_matcher
는source_labels
에 나열된 레이블의 값을 확인하는 정규 표현식입니다. 일치하는 지표는 CloudWatch에 전송된 임베디드 지표 형식에 포함할 수 있습니다.source_labels
에 여러 레이블이 지정된 경우label_matcher
의 정규 표현식에^
또는$
문자를 사용하지 않는 것이 좋습니다. -
source_labels
는label_matcher
줄에 의해 확인되는 레이블의 값을 지정합니다. -
label_separator
는 여러source_labels
가 지정된 경우label_matcher
줄에 사용할 구분 기호를 지정합니다. 기본값은;
입니다. 다음 예에서label_matcher
줄에 이 기본값이 사용된 것을 볼 수 있습니다. -
metric_selectors
는 수집하여 CloudWatch에 보낼 지표를 지정하는 정규 표현식입니다. -
dimensions
는 선택한 각 지표의 CloudWatch 측정기준으로 사용할 레이블 목록입니다.
-
다음 metric_declaration
예를 참조하세요.
"metric_declaration": [ { "source_labels":[ "Service", "Namespace"], "label_matcher":"(.*node-exporter.*|.*kube-dns.*);kube-system$", "dimensions":[ ["Service", "Namespace"] ], "metric_selectors":[ "^coredns_dns_request_type_count_total$" ] } ]
이 예에서는 다음 조건이 충족될 경우 임베디드 지표 형식 섹션을 로그 이벤트로 전송하도록 구성합니다.
-
Service
의 값에node-exporter
또는kube-dns
가 포함되어 있습니다. -
Namespace
의 값이kube-system
입니다. -
Prometheus
coredns_dns_request_type_count_total
지표에Service
와Namespace
레이블이 모두 포함되어 있습니다.
전송되는 로그 이벤트에는 다음과 같은 강조 표시된 섹션이 포함됩니다.
{ "CloudWatchMetrics":[ { "Metrics":[ { "Name":"coredns_dns_request_type_count_total" } ], "Dimensions":[ [ "Namespace", "Service" ] ], "Namespace":"ContainerInsights/Prometheus" } ], "Namespace":"kube-system", "Service":"kube-dns", "coredns_dns_request_type_count_total":2562, "eks_amazonaws_com_component":"kube-dns", "instance":"192.168.61.254:9153", "job":"kubernetes-service-endpoints", ... }