远程写入疑难解答
本文介绍如何排查适用于 Prometheus 的 Azure Monitor 托管服务中的远程写入问题。 有关远程写入的详细信息,请参阅适用于 Prometheus 的 Azure Monitor 托管服务中的远程写入。
- 托管标识身份验证需要高于 v2.45 的 Prometheus 版本。
- Microsoft Entra ID 应用程序身份验证需要高于 v2.48 的 Prometheus 版本。
角色的分配需要大约 30 分钟才能生效。 在此期间,Prometheus 日志中可能会出现 HTTP 403 错误。 检查是否已使用工作区数据收集规则上的 Monitoring Metrics Publisher
角色正确配置托管标识或 Microsoft Entra ID 应用程序。 如果配置正确,请等待 30 分钟才能使角色分配生效。
如果远程数据未流动,请运行以下命令,在远程写入容器中查找错误。
kubectl --namespace <Namespace> describe pod <Prometheus-Pod-Name>
如果容器经常重启,可能是容器配置错误所致。 运行以下命令以查看为容器设置的配置值。 验证配置值,特别是 AZURE_CLIENT_ID
和IDENTITY_TYPE
。
kubectl get pod <Prometheus-Pod-Name> -o json | jq -c '.spec.containers[] | select( .name | contains("<Azure-Monitor-Side-Car-Container-Name>"))'
此命令的输出具有以下格式:
{"env":[{"name":"INGESTION_URL","value":"https://my-azure-monitor-workspace.chinanorth2-1.metrics.ingest.monitor.azure.cn/dataCollectionRules/dcr-00000000000000000/streams/Microsoft-PrometheusMetrics/api/v1/write?api-version=2021-11-01-preview"},{"name":"LISTENING_PORT","value":"8081"},{"name":"IDENTITY_TYPE","value":"userAssigned"},{"name":"AZURE_CLIENT_ID","value":"00000000-0000-0000-0000-00000000000"}],"image":"mcr.microsoft.com/azuremonitor/prometheus/promdev/prom-remotewrite:prom-remotewrite-20221012.2","imagePullPolicy":"Always","name":"prom-remotewrite","ports":[{"containerPort":8081,"name":"rw-port","protocol":"TCP"}],"resources":{},"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","volumeMounts":[{"mountPath":"/var/run/secrets/kubernetes.io/serviceaccount","name":"kube-api-access-vbr9d","readOnly":true}]}
配置 Prometheus 远程写入以将数据发送到 Azure Monitor 工作区时,通常首先使用 Azure Monitor 工作区概述页上显示的远程写入终结点。 此终结点涉及系统生成的数据收集规则 (DCR) 和数据收集终结点 (DCE)。 这些资源具有引入限制。 有关引入限制的详细信息,请参阅 Azure Monitor 服务限制。 为向同一终结点发送数据的多个群集设置远程写入时,可能会达到这些限制。 请考虑创建其他 DCR 和 DCE,以跨多个终结点分配引入负载。 此方法有助于优化性能并确保高效的数据处理。 有关创建 DCR 和 DCE 的详细信息,请参阅 如何为现有 Azure Monitor 工作区 (AMW) 创建自定义数据收集终结点 (DCE) 和自定义数据收集规则 (DCR),以引入 Prometheus 指标。