使用托管标识身份验证将 Prometheus 数据发送到 Azure Monitor
本文介绍如何设置远程写入,以使用托管标识身份验证和 Azure Monitor 提供的挎斗容器从 Azure Kubernetes 服务 (AKS) 群集或已启用 Azure Arc 的 Kubernetes 群集中运行的自托管 Prometheus 服务器发送数据。 可以使用 AKS 创建的现有标识,也可以创建自己的标识。 此处对这两个选项均有介绍。
注意
如果使用用户分配的托管标识,建议直接将 Kubernetes 群集上运行的 Prometheus 配置为远程写入 Azure Monitor 工作区。 请参阅使用用户分配的托管标识将 Prometheus 数据发送到 Azure Monitor,了解详细信息。 以下步骤使用 Azure Monitor 挎斗容器。
群集配置
本文适用于以下群集配置:
- Azure Kubernetes 服务群集
- 已启用 Azure Arc 的 Kubernetes 群集
注意
有关为在不同云或本地运行的 Kubernetes 群集设置远程写入的信息,请参阅使用 Microsoft Entra 身份验证将 Prometheus 数据发送到 Azure Monitor。
先决条件
支持的版本
托管标识身份验证需要高于 v2.45 的 Prometheus 版本。
Azure Monitor 工作区
本文介绍如何将 Prometheus 指标发送到 Azure Monitor 工作区。 若要创建 Azure Monitor 工作区,请参阅管理 Azure Monitor 工作区。
权限
完成本文中的步骤需要群集或资源的管理员权限。
为托管标识设置应用程序
使用托管标识身份验证为应用程序设置 Prometheus 远程写入的过程涉及到以下任务的完成:
- 获取 AKS 节点资源组的名称。
- 获取用户分配的托管标识的客户端 ID。
- 为托管标识分配针对工作区数据收集规则的“监视指标发布者”角色。
- 授予 AKS 群集对托管标识的访问权限。
- 部署挎斗容器以设置远程写入。
以下部分描述了这些任务。
获取 AKS 节点资源组的名称
AKS 群集的节点资源组包含在此过程的其他步骤中使用的资源。 此资源组名为 MC_<AKS-RESOURCE-GROUP>_<AKS-CLUSTER-NAME>_<REGION>
。 可以使用 Azure 门户中的“资源组”菜单找到资源组名称。
获取用户分配的托管标识的客户端 ID
需要获取要使用的标识的客户端 ID。 复制客户端 ID,以便稍后在进程中使用。
可以使用 AKS 创建的标识之一,而不用创建自己的客户端 ID。 若要详细了解标识,请参阅在 Azure Kubernetes 服务中使用托管标识。
本文使用 kubelet 标识。 此标识名为 <AKS-CLUSTER-NAME>-agentpool
,位于 AKS 群集的节点资源组中。
选择 <AKS-CLUSTER-NAME>-agentpool
托管标识。 在“概述”页上,复制客户端 ID 的值。 有关详细信息,请参阅管理用户分配的托管标识。
为托管标识分配针对工作区数据收集规则的“监视指标发布者”角色
托管标识必须分配有针对与 Azure Monitor 工作区关联的数据收集规则的“监视指标发布者”角色。
在 Azure Monitor 工作区的资源菜单上,选择“概述”。 对于“数据收集规则”,请选择该链接。
在数据收集规则的资源菜单上,选择“访问控制(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>
部署挎斗容器以设置远程写入
复制以下 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 中的以下值:
值 说明 <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”的值。 <CLUSTER-NAME>
运行 Prometheus 的群集的名称。 重要
对于由世纪互联云运营的 Microsoft Azure,请在 YAML 文件的
env
部分中添加以下环境变量:- name: INGESTION_AAD_AUDIENCE value: https://monitor.azure.cn/
使用 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 的托管服务远程写入。