共用方式為


使用受控識別驗證將 Prometheus 資料傳送至 Azure 監視器

本文說明如何使用受控識別驗證和 Azure 監視器提供的側車容器設定遠端寫入,以從在 Azure Kubernetes Service (AKS) 叢集或已啟用 Azure Arc 的 Kubernetes 叢集中執行的自我管理 Prometheus 伺服器傳送資料。 您可以使用 AKS 建立的現有身分識別,或建立您自己的身分識別。 此處會說明這兩種選項。

注意

如果您使用使用者指派的受控識別,建議您直接設定在 Kubernetes 叢集上執行的 Prometheus,以遠端寫入 Azure 監視器工作區。 請參閱使用使用者指派的受控識別將 Prometheus 資料傳送至 Azure 監視器以深入了解。 下列步驟使用 Azure 監視器側車容器。

叢集組態

本文適用於下列叢集設定:

  • Azure Kubernetes Service 叢集
  • 已啟用 Azure Arc 的 Kubernetes 叢集

注意

如需在不同雲端或內部部署中執行的 Kubernetes 叢集設定遠端寫入的相關信息,請參閱使用 Microsoft Entra 驗證將 Prometheus 資料傳送至 Azure 監視器

必要條件

支援的版本

受控識別驗證需要大於 v2.45 的 Prometheus 版本。

Azure 監視器工作區

本文介紹將 Prometheus 計量傳送至 Azure 監視器工作區。 若要建立 Azure 監視器工作區,請參閱管理 Azure 監視器工作區

權限

需要叢集或資源的系統管理員權限,才能完成本文中的步驟。

設定受控識別的應用程式

使用受控識別驗證為應用程式設定 Prometheus 遠端寫入的流程包括完成下列工作:

  1. 取得 AKS 節點資源群組的名稱。
  2. 取得使用者指派之受控識別的用戶端識別碼。
  3. 依據工作區資料收集規則,將監視計量發行者角色指派給受控識別。
  4. 提供 AKS 叢集受控識別的存取權。
  5. 部署 Sidecar 容器以設定遠端寫入。

這些工作將於下列各節中說明。

取得 AKS 節點資源群組的名稱

AKS 叢集的節點資源群組包含此流程中其他步驟使用的資源。 此資源群組的名稱為 MC_<AKS-RESOURCE-GROUP>_<AKS-CLUSTER-NAME>_<REGION>。 您可以使用 Azure 入口網站中的 [資源群組] 選單來尋找資源群組名稱。

顯示資源群組清單的螢幕擷取畫面。

取得使用者指派之受控識別的用戶端識別碼

您必須取得您要使用之身分識別的用戶端識別碼。 複製用戶端識別碼以便稍後在流程中使用。

您可以使用 AKS 建立的其中一個身分識別,而不是建立您自己的用戶端識別碼。 如需身分識別的詳細資訊,請參閱在 Azure Kubernetes Service 中使用受控識別

本文使用 kubelet 身分識別。 此身分識別的名稱為 <AKS-CLUSTER-NAME>-agentpool,並位於 AKS 叢集的節點資源群組中。

顯示節點資源群組中的資源清單的螢幕擷取畫面。

選取 [受控識別]<AKS-CLUSTER-NAME>-agentpool。 在 [概觀] 頁面上,複製用戶端識別碼的值。 如需詳細資訊,請參閱管理使用者指派受控識別

顯示受控識別概觀頁面上用戶端標識碼的螢幕擷取畫面。

依據工作區資料收集規則,將監視計量發行者角色指派給受控識別

依據與 Azure 監視器工作區相關聯的資料收集規則,必須將監視計量發行者角色指派給受控識別。

  1. 在 Azure 監視器工作區的資源功能表上,選取 [概觀]。 在 [資料收集規則] 中,選取連結。

    顯示與 Azure 監視器工作區關聯之資料收集規則的螢幕擷取畫面。

  2. 在資料收集規則的資源功能表上,選取 [存取控制 (IAM)]

  3. 選取 [新增],然後選取 [新增角色指派]。

    顯示在存取控制頁面上新增角色指派的螢幕擷取畫面。

  4. 選取 [監視計量發行者] 角色,然後選取 [下一步]

    顯示角色指派清單的螢幕擷取畫面。

  5. 選取 [受控識別],然後選擇 [成員]。 選取使用者指派身分識別所在的訂用帳戶,然後選取 [使用者指派的受控識別]。 選取您要使用的使用者指派身分識別,然後選擇 [選取]

    顯示選取使用者指派的受控識別的螢幕擷取畫面。

  6. 若要完成角色指派,請選取 [檢閱 + 指派]

提供 AKS 叢集受控識別的存取權

如果您使用 AKS 身分識別,則不需要此步驟。 AKS 身分識別已經有叢集的存取權。

重要

若要完成本節中的步驟,您必須具有叢集的擁有者或使用者存取管理員的權限。

  1. 為您的 AKS 叢集在節點資源群組中識別虛擬機器擴展集。

    顯示節點資源群組中的虛擬機器擴展集的螢幕擷取畫面。

  2. 為每個虛擬機器擴展集在 Azure CLI 中執行下列命令:

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

部署 Sidecar 容器以設定遠端寫入

  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 中的值:

    Description
    <AKS-CLUSTER-NAME> AKS 叢集的名稱。
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240617.1
    這是遠端寫入容器映像版本。
    <INGESTION-URL> Azure 監視器工作區的 [概觀] 頁面中的 [計量擷取端點] 的值。
    <MANAGED-IDENTITY-CLIENT-ID> 受控識別的 [概觀] 頁面中 [用戶端識別碼] 的值。
    <CLUSTER-NAME> Prometheus 執行所在的叢集名稱。

    重要

    針對 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> 
    

驗證與疑難排解

如需驗證和疑難排解資訊,請參閱遠端寫入疑難排解Prometheus 遠端寫入的 Azure 監視器受管理服務

下一步