다음을 통해 공유


관리 ID 인증을 사용하여 Prometheus 데이터를 Azure Monitor로 보내기

이 문서에서는 관리 ID 인증 및 Azure Monitor에서 제공하는 사이드 카 컨테이너를 사용하여 AKS(Azure Kubernetes Service) 클러스터 또는 Azure Arc 지원 Kubernetes 클러스터에서 실행되는 자체 관리되는 Prometheus 서버에서 데이터를 전송하도록 원격 쓰기를 설정하는 방법을 설명합니다. AKS에서 만든 기존 ID를 사용하거나 직접 만들 수 있습니다. 두 옵션 모두 여기에 설명되어 있습니다.

참고 항목

사용자가 할당한 관리 ID를 사용하는 경우, Azure Monitor 작업 영역에 원격으로 쓰기 위해 Kubernetes 클러스터에서 실행되는 Prometheus를 직접 구성하는 것이 좋습니다. 자세한 내용은 사용자가 할당한 관리 ID를 사용하여 Prometheus 데이터를 Azure Monitor에 보내기를 참조하세요. 아래 단계에서는 Azure Monitor 사이드 카 컨테이너를 사용합니다.

클러스터 구성

이 문서는 다음 클러스터 구성에 적용됩니다.

  • Azure Kubernetes Service 클러스터
  • Azure Arc 지원 Kubernetes 클러스터

참고 항목

다른 클라우드 또는 온-프레미스에서 실행되는 Kubernetes 클러스터에 대한 원격 쓰기를 설정하는 방법에 대한 내용은 Microsoft Entra 인증을 사용하여 Prometheus 데이터를 Azure Monitor로 보내기를 참조하세요.

필수 조건

지원되는 버전

관리 ID 인증에는 v2.45보다 큰 Prometheus 버전이 필요합니다.

Azure Monitor 작업 영역

이 문서에서는 Prometheus 메트릭을 Azure Monitor 작업 영역으로 보내는 방법을 다룹니다. Azure Monitor 작업 영역을 만들려면 Azure Monitor 작업 영역 관리를 참조하세요.

사용 권한

이 문서의 단계를 완료하려면 클러스터 또는 리소스에 대한 관리자 권한이 필요합니다.

관리 ID에 대한 애플리케이션 설정

관리 ID 인증을 사용하여 애플리케이션에 대한 Prometheus 원격 쓰기를 설정하는 프로세스에서는 다음 작업을 완료해야 합니다.

  1. AKS 노드 리소스 그룹의 이름을 가져옵니다.
  2. 사용자 할당 ID의 클라이언트 ID를 가져옵니다.
  3. 작업 영역 데이터 수집 규칙에 대한 모니터링 메트릭 게시자 역할을 관리 ID에 할당합니다.
  4. AKS 클러스터에 관리 ID에 대한 액세스 권한을 부여합니다.
  5. 사이드카 컨테이너를 배포하여 원격 쓰기를 설정합니다.

해당 작업은 다음 섹션에서 설명합니다.

AKS 노드 리소스 그룹의 이름 가져오기

AKS 클러스터의 노드 리소스 그룹에는 이 프로세스의 다른 단계에서 사용하는 리소스가 포함되어 있습니다. 이 리소스 그룹의 이름은 MC_<AKS-RESOURCE-GROUP>_<AKS-CLUSTER-NAME>_<REGION>입니다. Azure Portal에서 리소스 그룹 메뉴를 사용하여 리소스 그룹 이름을 찾을 수 있습니다.

리소스 그룹 목록을 보여 주는 스크린샷.

사용자 할당 ID의 클라이언트 ID 가져오기

사용할 ID의 클라이언트 ID를 가져와야 합니다. 프로세스의 뒷부분에서 사용하게 되므로 클라이언트 ID를 복사합니다.

고유한 클라이언트 ID를 만드는 대신 AKS에서 만든 ID 중 하나를 사용할 수 있습니다. ID에 대한 자세한 내용은 Azure Kubernetes Service에서 관리 ID 사용을 참조하세요.

이 문서에서는 kubelet ID를 사용합니다. 이 ID의 이름은 <AKS-CLUSTER-NAME>-agentpool이고 AKS 클러스터의 노드 리소스 그룹에 있습니다.

노드 리소스 그룹에 있는 리소스 목록을 보여 주는 스크린샷.

<AKS-CLUSTER-NAME>-agentpool 관리 ID를 선택합니다. 개요 페이지에서 클라이언트 ID의 값을 복사합니다. 자세한 내용은 사용자 할당 관리 ID 관리를 참조하세요.

관리 ID에 대한 개요 페이지의 클라이언트 ID를 보여 주는 스크린샷.

작업 영역 데이터 수집 규칙에 대한 모니터링 메트릭 게시자 역할을 관리 ID에 할당

관리 ID에는 Azure Monitor 작업 영역과 연결된 데이터 수집 규칙에 대한 모니터링 메트릭 게시자 역할을 할당해야 합니다.

  1. Azure Monitor 작업 영역에 대한 리소스 메뉴에서 개요를 선택합니다. 데이터 수집 규칙의 경우 링크를 선택합니다.

    Azure Monitor 작업 영역과 연결된 데이터 수집 규칙을 보여 주는 스크린샷.

  2. 데이터 수집 규칙의 리소스 메뉴에서 액세스 제어(IAM)를 선택합니다.

  3. 추가를 선택한 다음 역할 할당 추가를 선택합니다.

    액세스 제어 페이지에 역할 할당을 추가하는 것을 보여 주는 스크린샷.

  4. 모니터링 메트릭 게시자 역할을 선택하고 다음을 선택합니다.

    역할 할당 목록을 보여 주는 스크린샷.

  5. 관리 ID를 선택하고 멤버 선택을 선택합니다. 사용자 할당 ID가 있는 구독을 선택한 다음, 사용자 할당 관리 ID를 선택합니다. 사용할 사용자 할당 ID를 선택한 다음, 선택을 선택합니다.

    사용자 할당 관리 ID 선택을 보여 주는 스크린샷.

  6. 역할 할당을 완료하려면 검토 + 할당을 선택합니다.

AKS 클러스터에 관리 ID에 대한 액세스 권한 부여

AKS ID를 사용하는 경우에는 이 단계가 필요하지 않습니다. AKS ID에는 이미 클러스터에 대한 액세스 권한이 있습니다.

Important

이 섹션의 단계를 완료하려면 클러스터에 대한 소유자 또는 사용자 액세스 관리자 권한이 있어야 합니다.

  1. AKS 클러스터의 노드 리소스 그룹에서 가상 머신 확장 집합을 식별합니다.

    노드 리소스 그룹의 가상 머신 확장 집합을 보여 주는 스크린샷.

  2. 각 가상 머신 확장 집합에 대해 Azure CLI에서 다음 명령을 실행합니다.

    az vmss identity assign -g <AKS-NODE-RESOURCE-GROUP> -n <AKS-VMSS-NAME> --identities <USER-ASSIGNED-IDENTITY-RESOURCE-ID>
    

사이드카 컨테이너를 배포하여 원격 쓰기 설정

  1. 다음 YAML을 복사하여 파일에 저장합니다. YAML은 8081 포트를 수신 대기 포트로 사용합니다. 다른 포트를 사용하는 경우 YAML에서 포트를 수정합니다.

    prometheus:
      prometheusSpec:
        externalLabels:
              cluster: <AKS-CLUSTER-NAME>
    
        ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write    
        remoteWrite:
        - url: 'http://localhost:8081/api/v1/write'
      ## Azure Managed Prometheus currently exports some default mixins in Grafana. 
      ## These mixins are compatible with Azure Monitor agent on your Azure Kubernetes Service cluster. 
      ## However, these mixins aren't compatible with Prometheus metrics scraped by the Kube Prometheus stack. 
      ## In order to make these mixins compatible, uncomment remote write relabel configuration below:
    
      ## writeRelabelConfigs:
      ##   - sourceLabels: [metrics_path]
      ##     regex: /metrics/cadvisor
      ##     targetLabel: job
      ##     replacement: cadvisor
      ##     action: replace
      ##   - sourceLabels: [job]
      ##     regex: 'node-exporter'
      ##     targetLabel: job
      ##     replacement: node
      ##     action: replace
        containers:
        - name: prom-remotewrite
          image: <CONTAINER-IMAGE-VERSION>
          imagePullPolicy: Always
          ports:
            - name: rw-port
              containerPort: 8081
          livenessProbe:
            httpGet:
              path: /health
              port: rw-port
            initialDelaySeconds: 10
            timeoutSeconds: 10
          readinessProbe:
            httpGet:
              path: /ready
              port: rw-port
            initialDelaySeconds: 10
            timeoutSeconds: 10
          env:
          - name: INGESTION_URL
            value: <INGESTION_URL>
          - name: LISTENING_PORT
            value: '8081'
          - name: IDENTITY_TYPE
            value: userAssigned
          - name: AZURE_CLIENT_ID
            value: <MANAGED-IDENTITY-CLIENT-ID>
          # Optional parameter
          - name: CLUSTER
            value: <CLUSTER-NAME>
    
  2. YAML에서 다음 값을 바꿉니다.

    설명
    <AKS-CLUSTER-NAME> AKS 클러스터의 이름.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240617.1
    원격 쓰기 컨테이너 이미지 버전
    <INGESTION-URL> Azure Monitor 작업 영역에 대한 개요 페이지의 메트릭 수집 엔드포인트
    <MANAGED-IDENTITY-CLIENT-ID> 관리 ID에 대한 개요 페이지의 클라이언트 ID
    <CLUSTER-NAME> Prometheus가 실행 중인 클러스터의 이름

    Important

    Azure Government 클라우드의 경우 YAML 파일의 env 섹션에 다음 환경 변수를 추가합니다.

    - name: INGESTION_AAD_AUDIENCE value: https://monitor.azure.us/

  3. Azure Cloud Shell을 열고 YAML 파일을 업로드합니다.

  4. Helm을 사용하여 YAML 파일을 적용하고 Prometheus 구성을 업데이트합니다.

    # set context to your cluster 
    az aks get-credentials -g <aks-rg-name> -n <aks-cluster-name> 
    
    # use Helm to update your remote write config 
    helm upgrade -f <YAML-FILENAME>.yml prometheus prometheus-community/kube-prometheus-stack --namespace <namespace where Prometheus pod resides> 
    

확인 및 문제 해결

확인 및 문제 해결 정보는 원격 쓰기 문제 해결Azure Monitor Prometheus용 관리 서비스 원격 쓰기를 참조하세요.

다음 단계