Amazon Elastic Kubernetes Service OpenTelemetry 클러스터에서 AWS 배포판을 사용하여 지표 수집을 설정합니다. - Amazon Managed Service for Prometheus

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon Elastic Kubernetes Service OpenTelemetry 클러스터에서 AWS 배포판을 사용하여 지표 수집을 설정합니다.

AWS Distor for OpenTelemetry (ADOT) 컬렉터를 사용하여 Prometheus 계측 애플리케이션에서 메트릭을 스크랩하고 이 지표를 Prometheus용 Amazon Managed Service로 보낼 수 있습니다.

참고

컬렉터에 대한 자세한 내용은 배포판을 참조하십시오. ADOT AWS OpenTelemetry

Prometheus 계측 애플리케이션에 대한 자세한 내용은 을 참조하십시오. Prometheus 호환 지표란 무엇입니까?

에서 Prometheus ADOT 메트릭을 수집하려면 Prometheus 수신기, Prometheus 원격 쓰기 익스포터 및 Sigv4 인증 확장이라는 세 가지 OpenTelemetry 구성 요소가 포함됩니다.

기존 Prometheus 구성을 사용하여 서비스 검색 및 지표 스크래핑을 수행하도록 Prometheus Receiver를 구성할 수 있습니다. Prometheus Receiver는 Prometheus 표시 형식으로 지표를 스크래핑합니다. 스크래핑하려는 모든 애플리케이션 또는 엔드포인트는 Prometheus 클라이언트 라이브러리로 구성해야 합니다. Prometheus Receiver는 Prometheus 설명서의 구성에 설명된 Prometheus 스크래핑 및 레이블 재지정 구성의 전체 세트를 지원합니다. 이러한 구성을 Collector 구성에 직접 붙여넣을 수 있습니다. ADOT

Prometheus Remote Write Exporter는 remote_write 엔드포인트를 사용하여 스크래핑된 지표를 관리 포털 워크스페이스로 보냅니다. 데이터 내보내기 HTTP 요청은 AWS Sigv4 인증 확장을 통해 보안 인증을 위한 AWS 프로토콜인 SigV4로 서명됩니다. 자세한 내용은 서명 버전 4 서명 프로세스를 참조하세요.

수집기는 EKS Amazon에서 Prometheus 메트릭 엔드포인트를 자동으로 검색하고 에 있는 구성을 사용합니다. <kubernetes_sd_config>

다음 데모는 Amazon Elastic Kubernetes Service 또는 자체 관리형 Kubernetes를 실행하는 클러스터에서 사용되는 이러한 구성의 예입니다. 이 단계를 수행하려면 기본 자격 증명 체인에 있는 잠재적 옵션의 AWS 자격 증명이 있어야 합니다. AWS 자세한 내용은 AWS SDKGo용 구성을 참조하십시오. 이 데모에서는 프로세스의 통합 테스트에 사용되는 샘플 앱을 사용합니다. 샘플 앱은 Prometheus 클라이언트 라이브러리처럼 /metrics 엔드포인트에서 지표를 노출합니다.

사전 조건

다음 통합 설정 단계를 시작하기 전에 서비스 계정 및 신뢰 정책에 대한 IAM 역할을 설정해야 합니다.

서비스 계정 및 신뢰 IAM 정책에 대한 역할을 설정하려면
  1. 의 단계에 따라 서비스 계정의 IAM 역할을 생성합니다Amazon EKS 클러스터의 지표 수집을 위한 서비스 역할 설정.

    ADOTCollector는 지표를 스크랩하고 내보낼 때 이 역할을 사용합니다.

  2. 다음으로 신뢰 정책을 편집합니다. 에서 IAM https://console.aws.amazon.com/iam/콘솔을 엽니다.

  3. 왼쪽 탐색 창에서 역할을 선택하고 1단계에서 amp-iamproxy-ingest-role생성한 역할을 찾습니다.

  4. 신뢰 관계 탭을 선택한 후 신뢰 관계 편집을 선택합니다.

  5. 신뢰 관계 JSON 정책에서 aws-ampadot-col 대체한 다음 신뢰 정책 업데이트를 선택합니다. 결과 신뢰 정책은 다음과 같아야 합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::account-id:oidc-provider/oidc.eks.region.amazonaws.com/id/openid" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region.amazonaws.com/id/openid:sub": "system:serviceaccount:adot-col:amp-iamproxy-ingest-service-account" } } } ] }
  6. 권한 탭을 선택하고 다음 권한 정책이 역할에 연결되어 있는지 확인합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "aps:RemoteWrite", "aps:GetSeries", "aps:GetLabels", "aps:GetMetricMetadata" ], "Resource": "*" } ] }

Prometheus 지표 수집 활성화

참고

EKSAmazon에서 네임스페이스를 생성하면 노드 내보내기가 기본적으로 비활성화됩니다. alertmanager

Amazon 또는 쿠버네티스 클러스터에서 Prometheus 컬렉션을 활성화하려면 EKS
  1. 의 리포지토리에서 샘플 앱을 포크 및 복제합니다. aws-otel-community

    그런 후 다음 명령을 실행합니다.

    cd ./sample-apps/prometheus-sample-app docker build . -t prometheus-sample-app:latest
  2. 이 이미지를 Amazon ECR 또는 같은 레지스트리로 DockerHub 푸시하십시오.

  3. 이 Kubernetes 구성을 복사하고 적용하여 클러스터에 샘플 앱을 배포합니다. prometheus-sample-app.yaml 파일에서 {{PUBLIC_SAMPLE_APP_IMAGE}}를 대체하여 이미지를 방금 푸시한 이미지로 변경합니다.

    curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/examples/eks/aws-prometheus/prometheus-sample-app.yaml -o prometheus-sample-app.yaml kubectl apply -f prometheus-sample-app.yaml
  4. 다음 명령을 입력하여 샘플 앱이 시작되었는지 확인합니다. 명령 출력의 NAME 열에 prometheus-sample-app이 표시됩니다.

    kubectl get all -n aoc-prometheus-pipeline-demo
  5. ADOTCollector의 기본 인스턴스를 시작합니다. 이렇게 하려면 먼저 다음 명령을 입력하여 Collector용 쿠버네티스 구성을 가져오십시오. ADOT

    curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/examples/eks/aws-prometheus/prometheus-daemonset.yaml -o prometheus-daemonset.yaml

    그런 다음, 템플릿 파일을 편집하여 Amazon Managed Service for Prometheus 워크스페이스에 대한 remote_write 엔드포인트를 YOUR_ENDPOINT로 바꾸고 리전을 YOUR_REGION으로 바꿉니다. 워크스페이스 세부 정보를 확인할 때 Amazon Managed Service for Prometheus 콘솔에 표시되는 remote_write 엔드포인트를 사용합니다.

    또한 쿠버네티스 구성의 서비스 계정 섹션에서 계정 ID로 YOUR_ACCOUNT_ID 변경해야 합니다. AWS

    이 예제에서 ADOT Collector 구성은 주석 (scrape=true) 을 사용하여 스크랩할 대상 엔드포인트를 알려줍니다. 이를 통해 ADOT Collector는 샘플 앱 엔드포인트를 클러스터의 kube-system 엔드포인트와 구별할 수 있습니다. 다른 샘플 앱을 스크래핑하려는 경우 레이블 재지정 구성에서 이 앱을 제거할 수 있습니다.

  6. 다음 명령을 입력하여 컬렉터를 배포합니다. ADOT

    kubectl apply -f prometheus-daemonset.yaml
  7. 다음 명령을 입력하여 ADOT 수집기가 시작되었는지 확인합니다. NAMESPACE 열에서 adot-col을 찾아봅니다.

    kubectl get pods -n adot-col
  8. 로깅 내보내기를 사용하여 파이프라인이 작동하는지 확인합니다. 예제 템플릿은 로깅 내보내기와 이미 통합되어 있습니다. 다음 명령을 입력합니다.

    kubectl get pods -A kubectl logs -n adot-col name_of_your_adot_collector_pod

    샘플 앱에서 스크래핑한 지표 중 일부는 다음 예와 같습니다.

    Resource labels: -> service.name: STRING(kubernetes-service-endpoints) -> host.name: STRING(192.168.16.238) -> port: STRING(8080) -> scheme: STRING(http) InstrumentationLibraryMetrics #0 Metric #0 Descriptor: -> Name: test_gauge0 -> Description: This is my gauge -> Unit: -> DataType: DoubleGauge DoubleDataPoints #0 StartTime: 0 Timestamp: 1606511460471000000 Value: 0.000000
  9. Amazon Managed Service for Prometheus가 지표를 수신했는지 테스트하려면 awscurl을 사용합니다. 이 도구를 사용하면 AWS Sigv4 인증을 통해 명령줄을 통해 HTTP 요청을 보낼 수 있으므로 Prometheus용 Amazon Managed Service에서 쿼리하려면 올바른 권한을 가진 AWS 자격 증명을 로컬에 설정해야 합니다. 설치 지침은 awscurl을 참조하십시오. awscurl

    다음 명령에서 AMP_REGIONAMP_ENDPOINT를 사용자의 Amazon Managed Service for Prometheus WorkSpace에 대한 정보로 바꿉니다.

    awscurl --service="aps" --region="AMP_REGION" "https://AMP_ENDPOINT/api/v1/query?query=adot_test_gauge0" {"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"adot_test_gauge0"},"value":[1606512592.493,"16.87214000011479"]}]}}

    응답으로 지표가 수신되면 파이프라인 설정이 성공적으로 완료되었고 지표가 샘플 앱에서 Amazon Managed Service for Prometheus로 성공적으로 전파되었음을 의미합니다.

정리

이 데모를 정리하려면 다음 명령을 입력합니다.

kubectl delete namespace aoc-prometheus-pipeline-demo kubectl delete namespace adot-col

고급 구성

Prometheus Receiver는 Prometheus 설명서의 구성에 설명된 Prometheus 스크래핑 및 레이블 재지정 구성의 전체 세트를 지원합니다. 이러한 구성을 Collector 구성에 직접 붙여넣을 수 있습니다. ADOT

Prometheus Receiver의 구성에는 서비스 검색, 스크래핑 구성 및 레이블 재지정 구성이 포함됩니다. 수신기 구성은 다음과 같습니다.

receivers: prometheus: config: [[Your Prometheus configuration]]

다음은 예제 구성입니다.

receivers: prometheus: config: global: scrape_interval: 1m scrape_timeout: 10s scrape_configs: - job_name: kubernetes-service-endpoints sample_limit: 10000 kubernetes_sd_configs: - role: endpoints 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

기존 Prometheus 구성이 있는 경우 값이 환경 변수로 바뀌지 않도록 $ 문자를 $$로 바꿔야 합니다. *이 작업은 relabel_configurations의 대체 값에 특히 중요합니다. 예를 들어 다음과 같이 relabel_configuration으로 시작하는 경우

relabel_configs: - source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path] regex: (.+);(.+);(.+) replacement: ${1}://${2}${3} target_label: __param_target

다음과 같이 됩니다.

relabel_configs: - source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path] regex: (.+);(.+);(.+) replacement: $${1}://${2}${3} target_label: __param_target

Prometheus Remote Write Exporter 및 Sigv4 Authentication Extension

Prometheus Remote Write Exporter와 Sigv4 Authentication Extension의 구성은 Prometheus Receiver보다 간단합니다. 파이프라인의 이 단계에서는 이미 지표가 수집되었으며 이 데이터를 Amazon Managed Service for Prometheus로 내보낼 준비가 되었습니다. Amazon Managed Service for Prometheus와 통신하기 위한 성공적인 구성의 최소 요구 사항은 다음 예제에 나와 있습니다.

extensions: sigv4auth: service: "aps" region: "user-region" exporters: prometheusremotewrite: endpoint: "https://aws-managed-prometheus-endpoint/api/v1/remote_write" auth: authenticator: "sigv4auth"

이 구성은 기본 AWS 자격 증명 체인의 AWS 자격 증명을 사용하여 AWS SigV4에서 서명한 HTTPS 요청을 보냅니다. 자세한 내용은 AWS SDK for Go구성 섹션을 참조하세요. 서비스를 aps로 지정해야 합니다.

배포 방법에 관계없이 ADOT 수집기는 기본 AWS 자격 증명 체인에 나열된 옵션 중 하나에 액세스할 수 있어야 합니다. Sigv4 인증 확장은 에 AWS SDK for Go 의존하며 이를 사용하여 자격 증명을 가져오고 인증합니다. 이러한 보안 인증에 Amazon Managed Service for Prometheus에 대한 원격 쓰기 권한이 있는지 확인해야 합니다.