使用受控識別驗證將 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 遠端寫入的流程包括完成下列工作:
- 取得 AKS 節點資源群組的名稱。
- 取得使用者指派之受控識別的用戶端識別碼。
- 依據工作區資料收集規則,將監視計量發行者角色指派給受控識別。
- 提供 AKS 叢集受控識別的存取權。
- 部署 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 監視器工作區相關聯的資料收集規則,必須將監視計量發行者角色指派給受控識別。
在 Azure 監視器工作區的資源功能表上,選取 [概觀]。 在 [資料收集規則] 中,選取連結。
在資料收集規則的資源功能表上,選取 [存取控制 (IAM)]。
選取 [新增],然後選取 [新增角色指派]。
選取 [監視計量發行者] 角色,然後選取 [下一步]。
選取 [受控識別],然後選擇 [成員]。 選取使用者指派身分識別所在的訂用帳戶,然後選取 [使用者指派的受控識別]。 選取您要使用的使用者指派身分識別,然後選擇 [選取]。
若要完成角色指派,請選取 [檢閱 + 指派]。
提供 AKS 叢集受控識別的存取權
如果您使用 AKS 身分識別,則不需要此步驟。 AKS 身分識別已經有叢集的存取權。
重要
若要完成本節中的步驟,您必須具有叢集的擁有者或使用者存取管理員的權限。
為您的 AKS 叢集在節點資源群組中識別虛擬機器擴展集。
為每個虛擬機器擴展集在 Azure CLI 中執行下列命令:
az vmss identity assign -g <AKS-NODE-RESOURCE-GROUP> -n <AKS-VMSS-NAME> --identities <USER-ASSIGNED-IDENTITY-RESOURCE-ID>
部署 Sidecar 容器以設定遠端寫入
複製下列 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>
取代下列 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/
開啟 Azure Cloud Shell 並上傳 YAML 檔案。
使用 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 監視器受管理服務。