远程写入疑难解答

本文介绍如何排查适用于 Prometheus 的 Azure Monitor 托管服务中的远程写入问题。 有关远程写入的详细信息,请参阅适用于 Prometheus 的 Azure Monitor 托管服务中的远程写入

支持的版本

  • 托管标识身份验证需要高于 v2.45 的 Prometheus 版本。
  • Microsoft Entra ID 应用程序身份验证需要高于 v2.48 的 Prometheus 版本。

Prometheus 日志中的 HTTP 403 错误

角色的分配需要大约 30 分钟才能生效。 在此期间,Prometheus 日志中可能会出现 HTTP 403 错误。 检查是否已使用工作区数据收集规则上的 Monitoring Metrics Publisher 角色正确配置托管标识或 Microsoft Entra ID 应用程序。 如果配置正确,请等待 30 分钟才能使角色分配生效。

没有 Kubernetes 数据正在流动

如果远程数据未流动,请运行以下命令,在远程写入容器中查找错误。

kubectl --namespace <Namespace> describe pod <Prometheus-Pod-Name>

容器重复重启

如果容器经常重启,可能是容器配置错误所致。 运行以下命令以查看为容器设置的配置值。 验证配置值,特别是 AZURE_CLIENT_IDIDENTITY_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 指标