Amazon EKS 및 Kubernetes 클러스터의 Prometheus 지표 문제 해결 - Amazon CloudWatch

Amazon EKS 및 Kubernetes 클러스터의 Prometheus 지표 문제 해결

이 단원에서는 Amazon EKS 및 Kubernetes 클러스터에서 Prometheus 지표 설정 문제를 해결하기 위한 도움말을 제공합니다.

Amazon EKS의 일반적인 문제 해결 단계

CloudWatch 에이전트가 실행 중인지 확인하려면 다음 명령을 입력합니다.

kubectl get pod -n amazon-cloudwatch

출력에는 NAME 열에 cwagent-prometheus-id가 있고 STATUS column.Running이 있는 행이 포함되어 있습니다.

실행 중인 포드에 대한 세부 정보를 표시하려면 다음 명령을 입력합니다. pod-namecw-agent-prometheus로 시작하는 이름이 있는 포드의 전체 이름으로 바꿉니다.

kubectl describe pod pod-name -n amazon-cloudwatch

CloudWatch Container Insights를 설치한 경우 CloudWatch Logs Insights를 사용하여 Prometheus 지표를 수집하는 CloudWatch 에이전트에서 로그를 쿼리할 수 있습니다.

애플리케이션 로그를 쿼리하려면
  1. https://console.aws.amazon.com/cloudwatch/에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 창에서 [CloudWatch Logs Insights]를 선택합니다.

  3. 애플리케이션 로그의 로그 그룹 /aws/containerinsights/cluster-name/application을 선택합니다.

  4. 검색 쿼리 표현식을 다음 쿼리로 바꾸고 쿼리 실행을 선택합니다.

    fields ispresent(kubernetes.pod_name) as haskubernetes_pod_name, stream, kubernetes.pod_name, log | filter haskubernetes_pod_name and kubernetes.pod_name like /cwagent-prometheus

Prometheus 지표 및 메타데이터가 CloudWatch Logs 이벤트로 수집되고 있는지 확인할 수도 있습니다.

Prometheus 데이터가 수집되는지 확인하려면
  1. https://console.aws.amazon.com/cloudwatch/에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 창에서 [CloudWatch Logs Insights]를 선택합니다.

  3. /aws/containerinsights/cluster-name/prometheus를 선택합니다.

  4. 검색 쿼리 표현식을 다음 쿼리로 바꾸고 쿼리 실행을 선택합니다.

    fields @timestamp, @message | sort @timestamp desc | limit 20

삭제된 Prometheus 지표 로깅

이 릴리스는 히스토그램 유형의 Prometheus 지표를 수집하지 않습니다. CloudWatch 에이전트를 사용하면 Prometheus 지표가 히스토그램 지표라서 삭제되고 있는지 여부를 확인할 수 있습니다. Prometheus 지표가 히스토그램 지표이므로 삭제되고 CloudWatch에 전송되지 않은 처음 500개의 Prometheus 지표 목록을 로그할 수도 있습니다.

지표가 삭제되는지 확인하려면 다음 명령을 입력합니다.

kubectl logs -l "app=cwagent-prometheus" -n amazon-cloudwatch --tail=-1

지표가 삭제되는 경우 /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log 파일에 다음 줄이 표시됩니다.

I! Drop Prometheus metrics with unsupported types. Only Gauge, Counter and Summary are supported. I! Please enable CWAgent debug mode to view the first 500 dropped metrics

이러한 줄이 표시되는 경우 삭제되는 지표가 무엇인지 알고 싶다면 다음 단계를 사용하세요.

삭제된 Prometheus 지표 목록을 로깅하려면
  1. prometheus-eks.yaml 또는 prometheus-k8s.yaml 파일에 다음과 같이 굵게 표시된 줄을 추가하여 CloudWatch 에이전트를 디버그 모드로 변경하고 파일을 저장합니다.

    { "agent": { "debug": true },

    파일의 이 섹션은 다음과 같아야 합니다.

    cwagentconfig.json: | { "agent": { "debug": true }, "logs": { "metrics_collected": {
  2. 다음 명령을 입력함으로써 CloudWatch 에이전트를 다시 설치하여 디버그 모드를 사용합니다.

    kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch kubectl apply -f prometheus.yaml

    삭제된 지표는 CloudWatch 에이전트 포드에 로그됩니다.

  3. CloudWatch 에이전트 포드에서 로그를 검색하려면 다음 명령을 입력합니다.

    kubectl logs -l "app=cwagent-prometheus" -n amazon-cloudwatch --tail=-1

    또는 Container Insights Fluentd 로깅을 설치한 경우 로그는 CloudWatch Logs 로그 그룹 /aws/containerinsights/cluster_name/application에도 저장됩니다.

    이러한 로그를 쿼리하려면 Amazon EKS의 일반적인 문제 해결 단계에서 애플리케이션 로그를 쿼리하는 단계를 수행 할 수 있습니다.

CloudWatch Logs 로그 이벤트로 수집된 Prometheus 지표는 어디에 있습니까?

CloudWatch 에이전트는 각 Prometheus 스크레이프 작업 구성에 대한 로그 스트림을 생성합니다. 예를 들어 prometheus-eks.yamlprometheus-k8s.yaml 파일에서 job_name: 'kubernetes-pod-appmesh-envoy' 줄은 App Mesh 지표를 스크레이프합니다. Prometheus 대상은 kubernetes-pod-appmesh-envoy로 정의됩니다. 따라서 모든 App Mesh Prometheus 지표는 /aws/containerinsights/cluster-name/Prometheus라는 로그 그룹 아래의 로그 스트림 kubernetes-pod-appmesh-envoy에 CloudWatch Logs 이벤트로 수집됩니다.

CloudWatch 지표에 Amazon EKS 또는 Kubernetes Prometheus 지표가 표시되지 않음

먼저 Prometheus 지표가 로그 그룹 /aws/containerinsights/cluster-name/Prometheus의 로그 이벤트로 수집되는지 확인합니다. CloudWatch Logs 로그 이벤트로 수집된 Prometheus 지표는 어디에 있습니까?의 정보를 사용하여 대상 로그 스트림을 확인할 수 있습니다. 로그 스트림이 생성되지 않았거나 로그 스트림에 새 로그 이벤트가 없는 경우 다음을 확인하세요.

  • Prometheus 지표 익스포터 엔드포인트가 올바르게 설정되었는지 확인합니다.

  • CloudWatch 에이전트 YAML 파일의 config map: cwagent-prometheus 섹션에서 Prometheus 스크레이핑 구성이 올바른지 확인합니다. 구성은 Prometheus 구성 파일에 있는 구성과 동일해야 합니다. 자세한 내용은 Prometheus 설명서의 <scrape_config>를 참조하세요.

Prometheus 지표가 로그 이벤트로 올바르게 수집되는 경우, 포함된 지표 형식 설정이 로그 이벤트에 추가되어 CloudWatch 지표를 생성하는지 확인합니다.

"CloudWatchMetrics":[ { "Metrics":[ { "Name":"envoy_http_downstream_cx_destroy_remote_active_rq" } ], "Dimensions":[ [ "ClusterName", "Namespace" ] ], "Namespace":"ContainerInsights/Prometheus" } ],

포함된 지표 형식에 대한 자세한 내용은 사양: 임베디드 지표 형식 단원을 참조하세요.

로그 이벤트에 임베디드 지표 형식이 없는 경우 CloudWatch 에이전트 설치 YAML 파일의 config map: prometheus-cwagentconfig 섹션에서 metric_declaration 섹션이 올바르게 구성되었는지 확인합니다. 자세한 내용은 새로운 Prometheus 스크레이프 대상을 추가하기 위한 튜토리얼: Prometheus API 서버 지표 단원을 참조하십시오.