Share via


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

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

叢集組態

本文適用於下列叢集組態:

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

注意

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

必要條件

支援的版本

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

Azure 監視器工作區

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

權限

需要叢集或資源的 管理員 istrator 許可權,才能完成本文中的步驟。

設定受控識別的應用程式

使用受控識別驗證為應用程式設定 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-20240507.1
    遠端寫入容器映像版本。
    <INGESTION-URL> Azure 監視器工作區的 [概觀] 頁面擷取計量擷取端點的值
    <MANAGED-IDENTITY-CLIENT-ID> 受控識別 [概觀] 頁面的 [用戶端標識符] 值
    <CLUSTER-NAME> Prometheus 正在執行的叢集名稱。

    重要

    針對 Azure Government 雲端,請在 env YAML 檔案的 區段中新增下列環境變數:

    - 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 監視器受控服務進行疑難解答。

下一步