

 **이 페이지 개선에 도움 주기** 

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 **GitHub에서 이 페이지 편집** 링크를 선택합니다.

# Prometheus를 사용한 클러스터 지표 모니터링
<a name="prometheus"></a>

 [Prometheus](https://prometheus.io/)는 엔드포인트를 스크레이프하는 모니터링 및 시계열 데이터베이스입니다. 수집된 데이터를 쿼리, 집계 및 저장하는 기능을 제공합니다. 알림 및 알림 집계에도 사용할 수 있습니다. 이 주제에서는 관리형 또는 오픈 소스 옵션으로 Prometheus를 설정하는 방법을 설명합니다. Amazon EKS 컨트롤 플레인 지표 모니터링은 일반적인 사용 사례입니다.

Amazon Managed Service for Prometheus는 컨테이너화된 애플리케이션과 인프라를 대규모로 쉽게 모니터링할 수 있는 Prometheus 호환 모니터링 및 알림 서비스입니다. 지표의 수집, 스토리지, 쿼리 및 알림을 자동으로 확장하는 완전관리형 서비스입니다. 또한 AWS 보안 서비스와 통합되어 데이터에 빠르고 안전하게 액세스할 수 있습니다. 오픈 소스 PromQL 쿼리 언어를 사용하여 지표를 쿼리하고 지표에 대해 알릴 수 있습니다. 또한 Prometheus용 Amazon 관리형 서비스의 알림 관리자를 사용하여 중요한 알림에 대한 알림 규칙을 설정할 수 있습니다. 그런 다음 이러한 중요한 알림을 Amazon SNS 주제에 대한 알림으로 보낼 수 있습니다.

Amazon EKS에서 Prometheus를 사용하는 데는 여러 가지 옵션이 있습니다.
+ Amazon EKS 클러스터를 처음 생성할 때 Prometheus 지표를 켜거나 기존 클러스터에 대해 자체 Prometheus 스크레이퍼를 생성할 수 있습니다. 이 주제에서는 이 두 가지 옵션을 모두 다룹니다.
+ Helm을 사용하여 Prometheus를 배포할 수 있습니다. 자세한 내용은 [Helm을 사용하여 Prometheus 배포](deploy-prometheus.md) 섹션을 참조하세요.
+ 컨트롤 플레인 원시 지표를 Prometheus 형식으로 볼 수 있습니다. 자세한 내용은 [컨트롤 플레인 원시 지표를 Prometheus 형식으로 가져오기](view-raw-metrics.md) 섹션을 참조하세요.

## 1단계: Prometheus 지표 켜기
<a name="turn-on-prometheus-metrics"></a>

**중요**  
Prometheus용 Amazon 관리형 서비스 리소스는 클러스터 수명 주기를 벗어나며 클러스터에 독립적으로 유지 관리되어야 합니다. 클러스터를 삭제할 때 해당 스크레이퍼도 모두 삭제하여 관련 비용을 줄여야 합니다. 자세한 내용은 **Prometheus용 Amazon 관리형 서비스 사용자 가이드의 [스크레이퍼 찾기 및 삭제](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html#AMP-collector-list-delete)를 참조하세요.

Prometheus는 스크레이핑이라는 풀 기반 모델을 통해 클러스터에서 지표를 검색하고 수집합니다. Scraper는 클러스터 인프라 및 컨테이너화된 애플리케이션에서 데이터를 수집하도록 설정됩니다. Prometheus 지표 전송 옵션을 켜면 Amazon Managed Service for Prometheus에서 에이전트 없는 완전 관리형 스크레이퍼를 제공합니다.

아직 클러스터를 생성하지 않은 경우 클러스터를 처음 생성할 때 Prometheus에 지표를 보내는 옵션을 켤 수 있습니다. Amazon EKS 콘솔에서 이 옵션은 새 클러스터를 생성하는 통합 **관찰성 구성** 단계에 있습니다. 자세한 내용은 [Amazon EKS 클러스터 생성](create-cluster.md) 섹션을 참조하세요.

이미 기존 클러스터가 있는 경우 자체 Prometheus 스크레이퍼를 생성할 수 있습니다. Amazon EKS 콘솔에서 이렇게 하려면 클러스터의 **관찰성** 탭으로 이동하여 **Scraper 추가** 버튼을 선택합니다. AWS API 또는 AWS CLI로 Prometheus 스크레이퍼를 생성하려면 *Amazon Managed Service for Prometheus User Guide*의 [Create a scraper](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html#AMP-collector-create)를 참조하세요.

Amazon EKS 콘솔을 사용하여 Scraper를 생성할 때 다음 옵션을 사용할 수 있습니다.

 **Scraper 별칭**   
(선택사항) Scraper의 고유한 별칭을 입력합니다.

 **대상**   
Amazon Managed Service for Prometheus 작업 영역을 선택합니다. 워크스페이스는 Prometheus 지표 보관 및 쿼리를 위한 전용 논리 공간입니다. 이 작업 영역을 사용하면 액세스 권한이 있는 계정에서 Prometheus 지표를 볼 수 있습니다. **새 작업 영역 생성** 옵션은 Amazon EKS에 제공한 **작업 영역 별칭**을 사용하여 대신 작업 영역을 생성하도록 지시합니다. **기존 작업 영역 선택** 옵션을 사용하면 드롭다운 목록에서 기존 작업 영역을 선택할 수 있습니다. 작업 영역에 대한 자세한 내용은 **Prometheus용 Amazon 관리형 서비스 사용 설명서의 [작업 영역 관리](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-manage-ingest-query.html)를 참조하세요.

 **서비스 액세스**   
이 섹션에는 Prometheus 지표를 전송할 때 부여하는 권한이 요약되어 있습니다.  
+ Prometheus용 Amazon 관리형 서비스에 스크레이프된 Amazon EKS 클러스터 설명 허용
+ Amazon Managed Prometheus 작업 영역에 원격 쓰기 허용
`AmazonManagedScraperRole`이 이미 있는 경우 Scraper가 이를 사용합니다. `AmazonManagedScraperRole` 링크를 선택하여 **권한 세부 정보**를 확인합니다. `AmazonManagedScraperRole`이 아직 없는 경우 **권한 세부 정보 보기** 링크를 선택하여 Prometheus 지표를 전송하여 부여하는 특정 권한을 확인합니다.

 **서브넷**   
필요에 따라 Scraper가 상속할 서브넷을 수정합니다. 회색으로 표시된 서브넷 옵션을 추가해야 하는 경우 클러스터 만들기 **네트워킹 지정** 단계로 돌아가세요.

 **Scraper 구성**   
필요에 따라 YAML 형식으로 Scraper 구성을 수정합니다. 이렇게 하려면 양식을 사용하거나 대체 YAML 파일을 업로드합니다. 자세한 내용은 **Prometheus용 Amazon 관리형 서비스 사용 설명서의 [Scraper 구성](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html#AMP-collector-configuration)을 참조하세요.

Prometheus용 Amazon 관리형 서비스는 클러스터와 함께 AWS 관리형 컬렉터로 생성되는 에이전트 없는 Scraper를 말합니다. AWS 관리형 컬렉터에 대한 자세한 내용은 *Prometheus용 Amazon Managed Service 사용 설명서*의 [AWS 관리형 컬렉터](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector.html)를 참조하세요.

**중요**  
AWS CLI 또는 AWS API를 사용하여 Prometheus 스크레이퍼를 생성하는 경우 스크레이퍼에 클러스터 내 권한을 부여하도록 구성을 조정해야 합니다. 자세한 내용은 **Prometheus용 Amazon 관리형 서비스 사용 설명서의 [Amazon EKS 클러스터 구성](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html#AMP-collector-eks-setup)을 참조하세요.
액세스 항목 대신 `aws-auth` `ConfigMap`을 사용하는 2024년 11월 11일 이전에 생성된 Prometheus 스크레이퍼가 있는 경우 Amazon EKS 클러스터 컨트롤 플레인에서 추가 지표에 액세스하려면 스크레이퍼를 업데이트해야 합니다. 업데이트된 구성은 *Amazon Managed Service for Prometheus 사용 설명서*에서 [스크레이퍼 액세스를 위한 Amazon EKS 수동 구성](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html#AMP-collector-eks-manual-setup)을 참조하세요.

## 2단계: Prometheus 지표 사용
<a name="use-prometheus-metrics"></a>

클러스터에 대해 Prometheus 지표를 켠 후 사용하는 방법에 대한 자세한 내용은 [Amazon Managed Service for Prometheus User Guide](https://docs.aws.amazon.com/prometheus/latest/userguide/what-is-Amazon-Managed-Service-Prometheus.html)를 참조하세요.

## 3단계: Prometheus 스크레이퍼 관리
<a name="viewing-prometheus-scraper-details"></a>

Scraper를 관리하려면 Amazon EKS 콘솔에서 **관찰성** 탭을 선택합니다. 테이블에는 Scraper ID, 별칭, 상태 및 생성 날짜와 같은 정보를 포함하여 클러스터의 Scraper 목록이 표시됩니다. 스크레이퍼를 더 추가하거나, 스크레이퍼를 편집하거나, 스크레이퍼를 삭제하거나, 현재 스크레이퍼에 대한 자세한 정보를 볼 수 있습니다.

Scraper에 관한 추가 세부 정보를 확인하려면 Scraper ID 링크를 선택합니다. 예를 들어, ARN, 환경, 작업 영역 ID, IAM 역할, 구성 및 네트워킹 정보를 볼 수 있습니다. 스크레이퍼 ID를 [https://docs.aws.amazon.com/prometheus/latest/APIReference/API_DescribeScraper.html](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_DescribeScraper.html), [https://docs.aws.amazon.com/prometheus/latest/APIReference/API_UpdateScraper.html](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_UpdateScraper.html), [https://docs.aws.amazon.com/prometheus/latest/APIReference/API_DeleteScraper.html](https://docs.aws.amazon.com/prometheus/latest/APIReference/API_DeleteScraper.html) 등의 Prometheus용 Amazon 관리형 서비스 API 작업의 입력으로 사용할 수 있습니다. Prometheus API 사용에 대한 자세한 내용은 [Amazon Managed Service for Prometheus API Reference](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-APIReference.html)를 참조하세요.

# Helm을 사용하여 Prometheus 배포
<a name="deploy-prometheus"></a>

Amazon Managed Service for Prometheus를 사용하는 대신 헬름을 사용하여 Prometheus를 클러스터에 배포할 수 있습니다. 이미 Helm이 설치되어 있는 경우 `helm version` 명령을 사용하여 버전을 확인할 수 있습니다. Helm은 Kubernetes 클러스터를 위한 패키지 관리자입니다. Helm 및 Helm 설치 방법에 대한 자세한 내용은 [Amazon EKS에서 Helm을 사용하여 애플리케이션 배포](helm.md) 단원을 참조하십시오.

Amazon EKS 클러스터에 대해 Helm을 구성하면 이 Helm을 사용하여 다음 단계에 따라 Prometheus를 배포할 수 있습니다.

1. Prometheus 네임스페이스를 생성합니다.

   ```
   kubectl create namespace prometheus
   ```

1. `prometheus-community` 차트 리포지토리를 추가합니다

   ```
   helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
   ```

1. Prometheus를 배포합니다.

   ```
   helm upgrade -i prometheus prometheus-community/prometheus \
       --namespace prometheus \
       --set alertmanager.persistence.storageClass="gp2" \
       --set server.persistentVolume.storageClass="gp2"
   ```
**참고**  
이 명령을 실행할 때 `Error: failed to download "stable/prometheus" (hint: running helm repo update may help)` 오류가 발생하면 `helm repo update prometheus-community`를 실행한 다음 2단계 명령을 다시 실행해봅니다.

   `Error: rendered manifests contain a resource that already exists` 오류가 발생하면 `helm uninstall your-release-name -n namespace `를 실행한 다음 3단계 명령을 다시 실행해봅니다.

1. `prometheus` 네임스페이스의 모든 포드가 `READY` 상태인지 확인합니다.

   ```
   kubectl get pods -n prometheus
   ```

   예제 출력은 다음과 같습니다.

   ```
   NAME                                             READY   STATUS    RESTARTS   AGE
   prometheus-alertmanager-59b4c8c744-r7bgp         1/2     Running   0          48s
   prometheus-kube-state-metrics-7cfd87cf99-jkz2f   1/1     Running   0          48s
   prometheus-node-exporter-jcjqz                   1/1     Running   0          48s
   prometheus-node-exporter-jxv2h                   1/1     Running   0          48s
   prometheus-node-exporter-vbdks                   1/1     Running   0          48s
   prometheus-pushgateway-76c444b68c-82tnw          1/1     Running   0          48s
   prometheus-server-775957f748-mmht9               1/2     Running   0          48s
   ```

1. `kubectl`을 사용하여 포트를 통해 로컬 시스템에 Prometheus 콘솔을 전송합니다.

   ```
   kubectl --namespace=prometheus port-forward deploy/prometheus-server 9090
   ```

1. 웹 브라우저에서 `http://localhost:9090`으로 이동하여 Prometheus 콘솔을 봅니다.

1. **- 커서에 지표 삽입** 메뉴에서 지표를 선택한 후 **실행**을 선택합니다. **그래프** 탭을 선택하여 시간에 따른 지표를 표시합니다. 다음 이미지는 시간에 따른 `container_memory_usage_bytes`를 표시합니다.  
![\[Prometheus 지표\]](http://docs.aws.amazon.com/ko_kr/eks/latest/userguide/images/prometheus-metric.png)

1. 상단 탐색 모음에서 **상태**를 선택한 후 **대상**을 선택합니다.  
![\[Prometheus 콘솔\]](http://docs.aws.amazon.com/ko_kr/eks/latest/userguide/images/prometheus.png)

   서비스 검색을 사용하여 Prometheus에 연결된 모든 Kubernetes 엔드포인트가 표시됩니다.

# 컨트롤 플레인 원시 지표를 Prometheus 형식으로 가져오기
<a name="view-raw-metrics"></a>

Kubernetes 컨트롤 플레인은 [Prometheus 형식](https://github.com/prometheus/docs/blob/master/content/docs/instrumenting/exposition_formats.md)으로 표시되는 여러 지표를 노출합니다. 이러한 지표는 모니터링 및 분석에 유용합니다. 지표 엔드포인트를 통해 내부적으로 노출되며 Prometheus를 완전히 배포하지 않고도 액세스할 수 있습니다. 그러나 Prometheus를 더 쉽게 배포하면 시간 경과에 따른 지표를 분석할 수 있습니다.

원시 지표 출력을 보려면 `endpoint`를 바꾸고 다음 명령을 실행합니다.

```
kubectl get --raw endpoint
```

이 명령을 사용하면 엔드포인트 경로를 전달할 수 있으며 원시 응답이 반환됩니다. 출력에 다양한 지표가 줄별로 나열되며 각 줄에는 지표 이름, 태그, 값이 포함됩니다.

```
metric_name{tag="value"[,...]} value
```

## API 서버에서 지표 가져오기
<a name="fetch-metrics"></a>

일반 API 서버 엔드포인트는 Amazon EKS 컨트롤 플레인에 노출됩니다. 이 엔드포인트는 주로 특정 지표를 살펴보는 데 유용합니다.

```
kubectl get --raw /metrics
```

예제 출력은 다음과 같습니다.

```
[...]
# HELP rest_client_requests_total Number of HTTP requests, partitioned by status code, method, and host.
# TYPE rest_client_requests_total counter
rest_client_requests_total{code="200",host="127.0.0.1:21362",method="POST"} 4994
rest_client_requests_total{code="200",host="127.0.0.1:443",method="DELETE"} 1
rest_client_requests_total{code="200",host="127.0.0.1:443",method="GET"} 1.326086e+06
rest_client_requests_total{code="200",host="127.0.0.1:443",method="PUT"} 862173
rest_client_requests_total{code="404",host="127.0.0.1:443",method="GET"} 2
rest_client_requests_total{code="409",host="127.0.0.1:443",method="POST"} 3
rest_client_requests_total{code="409",host="127.0.0.1:443",method="PUT"} 8
# HELP ssh_tunnel_open_count Counter of ssh tunnel total open attempts
# TYPE ssh_tunnel_open_count counter
ssh_tunnel_open_count 0
# HELP ssh_tunnel_open_fail_count Counter of ssh tunnel failed open attempts
# TYPE ssh_tunnel_open_fail_count counter
ssh_tunnel_open_fail_count 0
```

이 원시 출력은 API 서버가 표시하는 축자를 반환합니다.

## `metrics.eks.amazonaws.com`의 컨트롤 플레인 지표 가져오기
<a name="fetch-metrics-prometheus"></a>

Kubernetes 버전 `1.28` 이상인 클러스터의 경우 Amazon EKS는 API 그룹 `metrics.eks.amazonaws.com`에도 지표를 공개합니다. 이러한 지표에는 `kube-scheduler` 및 `kube-controller-manager`와 같은 컨트롤 플레인 구성 요소가 포함됩니다.

**참고**  
클러스터에서 새 `APIService` 리소스 `v1.metrics.eks.amazonaws.com`의 생성을 차단할 수 있는 웹후크 구성이 있는 경우 지표 엔드포인트 기능을 사용하지 못할 수 있습니다. `v1.metrics.eks.amazonaws.com` 키워드를 검색하여 `kube-apiserver` 감사 로그에서 확인할 수 있습니다.

### `kube-scheduler` 지표 가져오기
<a name="fetch-metrics-scheduler"></a>

다음 명령을 사용하여 `kube-scheduler` 지표를 검색합니다.

```
kubectl get --raw "/apis/metrics.eks.amazonaws.com/v1/ksh/container/metrics"
```

예제 출력은 다음과 같습니다.

```
# TYPE scheduler_pending_pods gauge
scheduler_pending_pods{queue="active"} 0
scheduler_pending_pods{queue="backoff"} 0
scheduler_pending_pods{queue="gated"} 0
scheduler_pending_pods{queue="unschedulable"} 18
# HELP scheduler_pod_scheduling_attempts [STABLE] Number of attempts to successfully schedule a pod.
# TYPE scheduler_pod_scheduling_attempts histogram
scheduler_pod_scheduling_attempts_bucket{le="1"} 79
scheduler_pod_scheduling_attempts_bucket{le="2"} 79
scheduler_pod_scheduling_attempts_bucket{le="4"} 79
scheduler_pod_scheduling_attempts_bucket{le="8"} 79
scheduler_pod_scheduling_attempts_bucket{le="16"} 79
scheduler_pod_scheduling_attempts_bucket{le="+Inf"} 81
[...]
```

### `kube-controller-manager` 지표 가져오기
<a name="fetch-metrics-controller"></a>

다음 명령을 사용하여 `kube-controller-manager` 지표를 검색합니다.

```
kubectl get --raw "/apis/metrics.eks.amazonaws.com/v1/kcm/container/metrics"
```

예제 출력은 다음과 같습니다.

```
[...]
workqueue_work_duration_seconds_sum{name="pvprotection"} 0
workqueue_work_duration_seconds_count{name="pvprotection"} 0
workqueue_work_duration_seconds_bucket{name="replicaset",le="1e-08"} 0
workqueue_work_duration_seconds_bucket{name="replicaset",le="1e-07"} 0
workqueue_work_duration_seconds_bucket{name="replicaset",le="1e-06"} 0
workqueue_work_duration_seconds_bucket{name="replicaset",le="9.999999999999999e-06"} 0
workqueue_work_duration_seconds_bucket{name="replicaset",le="9.999999999999999e-05"} 19
workqueue_work_duration_seconds_bucket{name="replicaset",le="0.001"} 109
workqueue_work_duration_seconds_bucket{name="replicaset",le="0.01"} 139
workqueue_work_duration_seconds_bucket{name="replicaset",le="0.1"} 181
workqueue_work_duration_seconds_bucket{name="replicaset",le="1"} 191
workqueue_work_duration_seconds_bucket{name="replicaset",le="10"} 191
workqueue_work_duration_seconds_bucket{name="replicaset",le="+Inf"} 191
workqueue_work_duration_seconds_sum{name="replicaset"} 4.265655885000002
[...]
```

### 스케줄러 및 컨트롤러 관리자 지표 이해
<a name="scheduler-controller-metrics"></a>

다음 표에서는 Prometheus 스타일 스크레이핑에 사용할 수 있는 스케줄러 및 컨트롤러 관리자 지표를 설명합니다. 이러한 지표에 대한 자세한 내용은 Kubernetes Documentation의 [Kubernetes Metrics Reference](https://kubernetes.io/docs/reference/instrumentation/metrics/)를 참조하세요.


| 지표 | 컨트롤 플레인 구성 요소 | 설명 | 
| --- | --- | --- | 
|  scheduler\$1pending\$1pods  |  scheduler  |  실행을 위해 노드에 예약되기를 기다리는 포드 수입니다.  | 
|  scheduler\$1schedule\$1attempts\$1total  |  scheduler  |  포드를 예약하기 위해 시도한 횟수입니다.  | 
|  scheduler\$1preemption\$1attempts\$1total  |  scheduler  |  우선순위가 낮은 포드를 제거하여 우선순위가 높은 포드를 예약하기 위해 스케줄러가 시도한 횟수입니다.  | 
|  scheduler\$1preemption\$1victims  |  scheduler  |  우선순위가 더 높은 포드를 위한 공간을 만들기 위해 제거하기로 선택한 포드 수입니다.  | 
|  scheduler\$1pod\$1scheduling\$1attempts  |  scheduler  |  포드를 성공적으로 예약하기 위해 시도한 횟수입니다.  | 
|  scheduler\$1scheduling\$1attempt\$1duration\$1seconds  |  scheduler  |  스케줄러가 리소스 가용성 및 예약 규칙과 같은 다양한 요인을 기반으로 포드를 실행할 적절한 위치를 얼마나 빨리 또는 느리게 찾을 수 있는지를 나타냅니다.  | 
|  scheduler\$1pod\$1scheduling\$1sli\$1duration\$1seconds  |  scheduler  |  포드가 예약 대기열에 진입한 시점부터 예약 중인 포드의 엔드 투 엔드 지연 시간입니다. 여기에는 여러 번의 예약 시도가 포함될 수 있습니다.  | 
|  cronjob\$1controller\$1job\$1creation\$1skew\$1duration\$1seconds  |  컨트롤러 관리자  |  cronjob이 실행되도록 예약된 시점과 해당 작업이 생성된 시점 사이의 시간입니다.  | 
|  workqueue\$1depth  |  컨트롤러 관리자  |  현재 대기열 깊이입니다.  | 
|  workqueue\$1adds\$1total  |  컨트롤러 관리자  |  작업 대기열에서 처리한 총 추가 수입니다.  | 
|  workqueue\$1queue\$1duration\$1seconds  |  컨트롤러 관리자  |  항목이 요청되기 전에 작업 대기열에 남아 있는 시간(초)입니다.  | 
|  workqueue\$1work\$1duration\$1seconds  |  컨트롤러 관리자  |  작업 대기열에서 항목을 처리하는 데 걸리는 시간(초)입니다.  | 

## Prometheus 스크레이퍼를 배포하여 지표를 일관되게 스크레이핑
<a name="deploy-prometheus-scraper"></a>

Prometheus 스크레이퍼를 배포하여 지표를 일관되게 스크레이핑하려면 다음 구성을 사용합니다.

```
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-conf
data:
  prometheus.yml: |-
    global:
      scrape_interval: 30s
    scrape_configs:
    # apiserver metrics
    - job_name: apiserver-metrics
      kubernetes_sd_configs:
      - role: endpoints
      scheme: https
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        insecure_skip_verify: true
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
      relabel_configs:
      - source_labels:
          [
            __meta_kubernetes_namespace,
            __meta_kubernetes_service_name,
            __meta_kubernetes_endpoint_port_name,
          ]
        action: keep
        regex: default;kubernetes;https
    # Scheduler metrics
    - job_name: 'ksh-metrics'
      kubernetes_sd_configs:
      - role: endpoints
      metrics_path: /apis/metrics.eks.amazonaws.com/v1/ksh/container/metrics
      scheme: https
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        insecure_skip_verify: true
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
      relabel_configs:
      - source_labels:
          [
            __meta_kubernetes_namespace,
            __meta_kubernetes_service_name,
            __meta_kubernetes_endpoint_port_name,
          ]
        action: keep
        regex: default;kubernetes;https
    # Controller Manager metrics
    - job_name: 'kcm-metrics'
      kubernetes_sd_configs:
      - role: endpoints
      metrics_path: /apis/metrics.eks.amazonaws.com/v1/kcm/container/metrics
      scheme: https
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        insecure_skip_verify: true
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
      relabel_configs:
      - source_labels:
          [
            __meta_kubernetes_namespace,
            __meta_kubernetes_service_name,
            __meta_kubernetes_endpoint_port_name,
          ]
        action: keep
        regex: default;kubernetes;https
---
apiVersion: v1
kind: Pod
metadata:
  name: prom-pod
spec:
  containers:
  - name: prom-container
    image: prom/prometheus
    ports:
    - containerPort: 9090
    volumeMounts:
    - name: config-volume
      mountPath: /etc/prometheus/
  volumes:
  - name: config-volume
    configMap:
      name: prometheus-conf
```

포드가 새 지표 엔드포인트에 액세스하려면 다음 권한이 필요합니다.

```
{
  "effect": "allow",
  "apiGroups": [
    "metrics.eks.amazonaws.com"
  ],
  "resources": [
    "kcm/metrics",
    "ksh/metrics"
  ],
  "verbs": [
    "get"
  ] },
```

사용 중인 역할을 패치하려면 다음 명령을 사용할 수 있습니다.

```
kubectl patch clusterrole <role-name> --type=json -p='[
  {
    "op": "add",
    "path": "/rules/-",
    "value": {
      "verbs": ["get"],
      "apiGroups": ["metrics.eks.amazonaws.com"],
      "resources": ["kcm/metrics", "ksh/metrics"]
    }
  }
]'
```

그런 다음 Prometheus 스크레이퍼의 포트를 로컬 포트로 프록시하여 Prometheus 대시보드를 볼 수 있습니다.

```
kubectl port-forward pods/prom-pod 9090:9090
```

Amazon EKS 클러스터의 경우 코어 Kubernetes 컨트롤 플레인 지표도 `AWS/EKS` 네임스페이스 아래의 Amazon CloudWatch 지표에 수집됩니다. 이를 보려면 [CloudWatch 콘솔](https://console.aws.amazon.com/cloudwatch/home#logs:prefix=/aws/eks)을 열고 왼쪽 탐색 창에서 **모든 지표**를 선택합니다. **지표** 선택 페이지에서 클러스터의 `AWS/EKS` 네임스페이스와 지표 차원을 선택합니다.