

# Amazon EKS 및 Kubernetes 클러스터의 Prometheus 지표 문제 해결
<a name="ContainerInsights-Prometheus-troubleshooting-EKS"></a>

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

## Amazon EKS의 일반적인 문제 해결 단계
<a name="ContainerInsights-Prometheus-troubleshooting-general"></a>

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

```
kubectl get pod -n amazon-cloudwatch
```

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

실행 중인 포드에 대한 세부 정보를 표시하려면 다음 명령을 입력합니다. *pod-name*을 `cw-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/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

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

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

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

   ```
   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/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

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

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

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

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

## 삭제된 Prometheus 지표 로깅
<a name="ContainerInsights-Prometheus-troubleshooting-droppedmetrics"></a>

이 릴리스는 히스토그램 유형의 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": {
   ```

1. 다음 명령을 입력함으로써 CloudWatch 에이전트를 다시 설치하여 디버그 모드를 사용합니다.

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

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

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

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

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

   이러한 로그를 쿼리하려면 [Amazon EKS의 일반적인 문제 해결 단계](#ContainerInsights-Prometheus-troubleshooting-general)에서 애플리케이션 로그를 쿼리하는 단계를 수행 할 수 있습니다.

## CloudWatch Logs 로그 이벤트로 수집된 Prometheus 지표는 어디에 있습니까?
<a name="ContainerInsights-Prometheus-troubleshooting-metrics_ingested"></a>

CloudWatch 에이전트는 각 Prometheus 스크레이프 작업 구성에 대한 로그 스트림을 생성합니다. 예를 들어 `prometheus-eks.yaml` 및 `prometheus-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 지표가 표시되지 않음
<a name="ContainerInsights-Prometheus-troubleshooting-no-metrics"></a>

먼저 Prometheus 지표가 로그 그룹 **/aws/containerinsights/cluster-name/Prometheus**의 로그 이벤트로 수집되는지 확인합니다. [CloudWatch Logs 로그 이벤트로 수집된 Prometheus 지표는 어디에 있습니까?](#ContainerInsights-Prometheus-troubleshooting-metrics_ingested)의 정보를 사용하여 대상 로그 스트림을 확인할 수 있습니다. 로그 스트림이 생성되지 않았거나 로그 스트림에 새 로그 이벤트가 없는 경우 다음을 확인하세요.
+ Prometheus 지표 익스포터 엔드포인트가 올바르게 설정되었는지 확인합니다.
+ CloudWatch 에이전트 YAML 파일의 `config map: cwagent-prometheus` 섹션에서 Prometheus 스크레이핑 구성이 올바른지 확인합니다. 구성은 Prometheus 구성 파일에 있는 구성과 동일해야 합니다. 자세한 내용은 Prometheus 설명서의 [<scrape\$1config>](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config)를 참조하세요.

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

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

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

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