Prometheus 지표 - Amazon EKS

Prometheus 지표

중요

Amazon Managed Service for Prometheus는 AWS GovCloud(미국 동부) 및 AWS GovCloud(미국 서부)에서 사용할 수 없습니다.

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

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

활성화 후 Prometheus 지표를 사용하는 방법에 대한 자세한 내용은 Amazon Managed Service for Prometheus 사용 설명서를 참조하세요.

클러스터를 생성할 때 Prometheus 지표 켜기

중요

Amazon Managed Service for Prometheus 리소스는 클러스터 수명 주기를 벗어나며 클러스터에 독립적으로 유지 관리되어야 합니다. 클러스터를 삭제할 때 해당 스크레이퍼도 모두 삭제하여 관련 비용을 줄여야 합니다. 자세한 내용은 Amazon Managed Service for Prometheus 사용자 가이드의 스크레이퍼 찾기 및 삭제를 참조하세요.

새 클러스터를 생성할 때 지표를 Prometheus로 보내는 옵션을 켤 수 있습니다. AWS Management Console에서 이 옵션은 새 클러스터 생성의 관찰성 구성 단계에 있습니다. 자세한 내용은 Amazon EKS 클러스터 생성 섹션을 참조하세요.

Prometheus는 스크레이핑이라는 풀 기반 모델을 통해 클러스터에서 지표를 검색하고 수집합니다. 스크레이퍼는 클러스터 인프라 및 컨테이너화된 애플리케이션에서 데이터를 수집하도록 설정됩니다.

Prometheus 지표 전송 옵션을 켜면 Amazon Managed Service for Prometheus에서 에이전트 없는 완전 관리형 스크레이퍼를 제공합니다. 다음 고급 구성 옵션을 사용하여 필요에 따라 기본 스크레이퍼를 사용자 지정합니다.

스크레이퍼 별칭

(선택 사항) 스크레이퍼의 고유한 별칭을 입력합니다.

대상

Amazon Managed Service for Prometheus 작업 영역을 선택합니다. 작업 영역은 Prometheus 지표 보관 및 쿼리를 위한 전용 논리 공간입니다. 이 작업 영역을 사용하면 액세스 권한이 있는 계정에서 Prometheus 지표를 볼 수 있습니다. 새 작업 영역 생성 옵션은 Amazon EKS에 제공한 작업 영역 별칭을 사용하여 대신 작업 영역을 생성하도록 지시합니다. 기존 작업 영역 선택 옵션을 사용하면 드롭다운 목록에서 기존 작업 영역을 선택할 수 있습니다. 작업 영역에 대한 자세한 내용은 Amazon Managed Service for Prometheus 사용 설명서의 작업 영역 관리를 참조하세요.

서비스 액세스

이 섹션에는 Prometheus 지표를 전송할 때 부여하는 권한이 요약되어 있습니다.

  • Amazon Managed Service for Prometheus에 스크레이프된 Amazon EKS 클러스터 설명 허용

  • Amazon Managed Prometheus 작업 영역에 원격 쓰기 허용

AmazonManagedScraperRole이 이미 있는 경우 스크레이퍼가 이를 사용합니다. AmazonManagedScraperRole 링크를 선택하여 권한 세부 정보를 확인합니다. AmazonManagedScraperRole이 아직 없는 경우 권한 세부 정보 보기 링크를 선택하여 Prometheus 지표를 전송하여 부여하는 특정 권한을 확인합니다.

서브넷

스크레이퍼가 상속할 서브넷을 확인합니다. 변경해야 하는 경우 클러스터 생성 네트워킹 지정 단계로 돌아갑니다.

보안 그룹

스크레이퍼가 상속할 보안 그룹을 확인합니다. 변경해야 하는 경우 클러스터 생성 네트워킹 지정 단계로 돌아갑니다.

스크레이퍼 구성

필요에 따라 YAML 형식으로 스크레이퍼 구성을 수정합니다. 이렇게 하려면 양식을 사용하거나 대체 YAML 파일을 업로드합니다. 자세한 내용은 Amazon Managed Service for Prometheus 사용 설명서의 스크레이퍼 구성을 참조하세요.

Amazon Managed Service for Prometheus는 클러스터와 함께 AWS 관리형 컬렉터로 생성되는 에이전트 없는 스크레이퍼를 말합니다. AWS 관리형 컬렉터에 대한 자세한 내용은 Amazon Managed Service for Prometheus 사용 설명서의 AWS 관리형 컬렉터를 참조하세요.

중요

스크레이퍼에 클러스터 내 권한을 부여하려면 aws-auth ConfigMap을 설정해야 합니다. 자세한 내용은 Amazon Managed Service for Prometheus 사용 설명서의 Amazon EKS 클러스터 구성을 참조하세요.

Prometheus 스크레이퍼 세부 정보 보기

Prometheus 지표 옵션이 켜진 상태에서 클러스터를 생성한 후 Prometheus 스크레이퍼 세부 정보를 볼 수 있습니다. AWS Management Console에서 클러스터를 볼 때 관찰성 탭을 선택합니다. 테이블에는 스크레이퍼 ID, 별칭, 상태 및 생성 날짜와 같은 정보를 포함하여 클러스터의 스크레이퍼 목록이 표시됩니다.

스크레이퍼에 관한 추가 세부 정보를 확인하려면 스크레이퍼 ID 링크를 선택합니다. 예를 들어 스크레이퍼 구성, Amazon 리소스 이름(ARN), 원격 쓰기 URL 및 네트워킹 정보를 볼 수 있습니다. 스크레이퍼 ID를 DescribeScraperDeleteScraper와 같은 Amazon Managed Service for Prometheus API 작업의 입력으로 사용할 수 있습니다. API를 사용하여 더 많은 스크레이퍼를 생성할 수도 있습니다.

Prometheus API 사용에 대한 자세한 내용은 Amazon Managed Service for Prometheus API 참조를 참조하세요.

Helm 사용을 통한 Prometheus 배포

또는 Helm V3를 사용하여 클러스터에 Prometheus를 배포할 수도 있습니다. 이미 Helm이 설치되어 있는 경우 helm version 명령을 사용하여 버전을 확인할 수 있습니다. Helm은 Kubernetes 클러스터에 대한 패키지 관리자입니다. Helm 및 설치 방법에 대한 자세한 내용은 Amazon EKS에 Helm 사용 섹션을 참조하세요.

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

Helm 사용을 통해 Prometheus 배포
  1. Prometheus 네임스페이스를 생성합니다.

    kubectl create namespace prometheus
  2. prometheus-community 차트 리포지토리를 추가합니다

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
  3. Prometheus를 배포합니다.

    helm upgrade -i prometheus prometheus-community/prometheus \ --namespace prometheus \ --set alertmanager.persistentVolume.storageClass="gp2",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단계 명령을 다시 실행해봅니다.

  4. prometheus 네임스페이스의 모든 Pods가 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
  5. kubectl을 사용하여 포트를 통해 로컬 시스템에 Prometheus 콘솔을 전송합니다.

    kubectl --namespace=prometheus port-forward deploy/prometheus-server 9090
  6. 웹 브라우저에서 http://localhost:9090으로 이동하여 Prometheus 콘솔을 표시합니다.

  7. - insert metric at cursor(커서에 지표 삽입) 메뉴에서 지표를 선택한 후 Execute(실행)를 선택합니다. Graph(그래프) 탭을 선택하여 시간에 따른 지표를 표시합니다. 다음 이미지는 시간에 따른 container_memory_usage_bytes를 표시합니다.

    
                        Prometheus 지표
  8. 상단 탐색 모음에서 Status(상태)를 선택한 후 Targets(대상)를 선택합니다.

    
                        Prometheus 콘솔

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

컨트롤 플레인 원시 지표 보기

Prometheus 배포의 대안으로 Kubernetes API 서버는 Prometheus 형식으로 표시되는 여러 지표를 노출합니다. 이러한 지표는 모니터링 및 분석에 유용합니다. /metrics HTTP API를 나타내는 지표 엔드포인트를 통해 내부적으로 표시됩니다. 다른 엔드포인트와 마찬가지로 이 엔드포인트도 Amazon EKS 제어 영역에 표시됩니다. 이 엔드포인트는 주로 특정 지표를 살펴보는 데 유용합니다. 시간 경과에 따른 지표를 분석하려면 Prometheus 배포가 권장됩니다.

원시 지표 출력을 보려면 --raw 플래그와 함께 kubectl을 사용합니다. 이 명령을 사용하면 HTTP 경로를 전달할 수 있으며, 원시 응답이 반환됩니다.

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 서버가 표시하는 축자를 반환합니다. 다양한 지표가 줄별로 나열되며 각 줄에는 지표 이름, 태그 및 값이 포함됩니다.

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