将 Prometheus 指标从虚拟机、规模集或 Kubernetes 群集发送到 Azure Monitor 工作区

Prometheus 不限于监视 Kubernetes 群集。 使用 Prometheus 监视服务器上运行的应用程序和服务,无论它们在哪里运行。 例如,可以监视虚拟机、虚拟机规模集,甚至本地服务器上运行的应用程序。 还可以将 Prometheus 指标从自托管群集和 Prometheus 服务器发送到 Azure Monitor 工作区。 在服务器上安装 prometheus,并将远程写入配置为将指标发送到 Azure Monitor 工作区。

本文会介绍如何配置远程写入,以将数据从自管理 Prometheus 实例发送到 Azure Monitor 工作区。

远程写入选项

自托管 Prometheus 可以在 Azure 和非 Azure 环境中运行。 下面是基于 Prometheus 正在运行的环境对 Azure Monitor 工作区进行远程写入的身份验证选项。

Azure 托管虚拟机、虚拟机规模集和 Kubernetes 群集

对在 Azure 环境中运行自托管 Prometheus 的服务使用用户分配的托管标识身份验证。 Azure 托管服务包括:

  • Azure 虚拟机
  • Azure 虚拟机规模集
  • Azure Kubernetes 服务 (AKS)

若要为 Azure 托管资源设置远程写入,请参阅使用用户分配的托管标识进行远程写入

在非 Azure 环境中运行的虚拟机和 Kubernetes 群集。

如果具有非 Azure 环境中的虚拟机或 Kubernetes 群集,或者已加入 Azure Arc,请安装自托管 Prometheus 并使用 Microsoft Entra ID 应用程序身份验证配置远程写入。 有关详细信息,请参阅“使用 Microsoft Entra ID 应用程序身份验证进行远程写入”。

加入已启用 Azure Arc 的服务后,可以在 Azure 中管理和配置非 Azure 虚拟机。 有关将虚拟机加入已启用 Azure Arc 的服务器的详细信息,请参阅已启用 Azure Arc 的服务器已启用 Azure Arc 的 Kubernetes。 已启用 Arc 的服务仅支持 Microsoft Entra ID 身份验证。

注意

系统分配的托管标识不支持远程写入到 Azure Monitor 工作区。 用户分配的托管标识或 Microsoft Entra ID 应用程序身份验证。

先决条件

支持的版本

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

Azure Monitor 工作区

本文介绍如何将 Prometheus 指标发送到 Azure Monitor 工作区。 若要创建 Azure Monitor 工作区,请参阅管理 Azure Monitor 工作区

权限

完成本文中的步骤需要群集或资源的管理员权限。

为远程写入设置身份验证

根据 Prometheus 正在运行的环境,可以将远程写入配置为使用用户分配的托管标识或 Microsoft Entra ID 应用程序身份验证将数据发送到 Azure Monitor 工作区。

使用 Azure 门户或 CLI 创建用户分配的托管标识或 Microsoft Entra ID 应用程序。

使用用户分配的托管标识身份验证进行远程写入

可在任何 Azure 托管环境中使用用户分配的托管标识身份验证。 如果 Prometheus 服务在非 Azure 环境中运行,则可以使用 Microsoft Entra ID 应用程序身份验证。

若要为远程写入到 Azure Monitor 工作区配置用户分配的托管标识,请完成以下步骤。

创建用户分配的托管标识

若要创建用于远程写入配置的用户托管标识,请参阅“管理用户分配的托管标识”。

请注意所创建的托管标识 clientId 的值。 此 ID 用于 Prometheus 远程写入配置。

将“监视指标发布者”角色分配给应用程序

在工作区的数据收集规则上,将 Monitoring Metrics Publisher 角色分配给托管标识。

  1. 在 Azure Monitor 工作区概述页面上,选择“数据收集规则”链接。

    显示 Azure Monitor 工作区页上的数据收集规则链接的屏幕截图。

  2. 在数据收集规则页上,选择“访问控制 (IAM)”。

  3. 选择“添加”和“添加角色分配”显示数据收集规则窗口的屏幕截图。

  4. 搜索并选择“监视指标发布服务器”,然后选择“下一步”。 显示数据收集规则的角色分配菜单的屏幕截图。

  5. 选择“托管标识”。

  6. 选择“选择成员”。

  7. 在“托管实体”下拉列表中,用户分配的托管标识

  8. 选择要使用的用户分配的标识,然后单击“选择”。

  9. 选择“查看 + 分配”以完成角色分配。

    显示数据收集规则的“选择成员”菜单的屏幕截图。

将托管标识分配给虚拟机或虚拟机规模集

重要

要完成本部分中的步骤,须有对虚拟机或虚拟机规模集的所有者或用户访问管理员权限。

  1. 在 Azure 门户中,转到群集、虚拟机或虚拟机规模集的页面。

  2. 选择“标识”。

  3. 选择“用户分配”

  4. 选择 添加

  5. 选择创建的用户分配的托管标识,然后选择“添加”。

    显示添加用户分配的托管标识页的屏幕截图。

为 Azure Kubernetes 服务分配托管标识

对于 Azure Kubernetes 服务 (AKS),必须将托管标识分配给虚拟机规模集。

AKS 创建包含虚拟机规模集的资源组。 资源组名称的格式为 MC_<resource group name>_<AKS cluster name>_<region>。 对于资源组中的每个虚拟机规模集,请按照上一节(将托管标识分配给虚拟机或虚拟机规模集)中的步骤分配托管标识。

配置远程写入

远程写入在 Prometheus 配置文件 prometheus.yml 或 Prometheus Operator 中进行配置。

有关配置远程写入的详细信息,请参阅 Prometheus.io 文章:配置。 有关优化远程写入配置的详细信息,请参阅“远程写入优化”。

如果在 Kubernetes 群集上运行 Prometheus Operator,请按照以下步骤将数据发送到 Azure Monitor 工作区。

  1. 如果使用 Microsoft Entra ID 身份验证,请使用 base64 编码转换机密,然后将机密应用到 Kubernetes 群集。 将以下内容保存到 yaml 文件。 如果使用的是托管标识身份验证,则跳过此步骤。
apiVersion: v1
kind: Secret
metadata:
  name: remote-write-secret
  namespace: monitoring # Replace with namespace where Prometheus Operator is deployed. 
type: Opaque
data:
  password: <base64-encoded-secret>

应用机密。

# set context to your cluster 
az aks get-credentials -g <aks-rg-name> -n <aks-cluster-name> 

kubectl apply -f <remote-write-secret.yaml>
  1. 需要在 Prometheus Operator 中更新远程写入节的值。 复制以下内容并将其保存为 yaml 文件。 有关 yaml 文件的值,请参阅以下部分。 若要更详细地了解 Prometheus Operator 中的 Azure Monitor 工作区远程写入规范,请参阅 Prometheus Operator 文档
prometheus:
  prometheusSpec:
    remoteWrite:
    - url: "<metrics ingestion endpoint for your Azure Monitor workspace>"
      azureAd:
# AzureAD configuration.
# The Azure Cloud. Options are 'AzurePublic', 'AzureChina', or 'AzureGovernment'.
        cloud: 'AzurePublic'
        managedIdentity:
          clientId: "<clientId of the managed identity>"
        oauth:
          clientId: "<clientId of the Entra app>"
          clientSecret:
            name: remote-write-secret
            key: password
          tenantId: "<Azure subscription tenant Id>"
  1. 使用 helm 通过上述 yaml 文件更新远程写入配置。
helm upgrade -f <YAML-FILENAME>.yml prometheus prometheus-community/kube-prometheus-stack --namespace <namespace where Prometheus Operator is deployed>

url 参数指定 Azure Monitor 工作区的指标引入终结点。 可以在 Azure 门户中 Azure Monitor 工作区的“概述页面”找到它。

显示 Azure Monitor 工作区的指标引入终结点的屏幕截图。

根据实现,使用 managed_identityoauth 进行 Microsoft Entra ID 应用程序身份验证。 删除未使用的对象。

使用以下 Azure CLI 命令查找托管标识的客户端 ID:

az identity list --resource-group <resource group name>

有关详细信息,请参阅 az identity list

若要在门户中查找用于托管标识身份验证的客户端,请转到 Azure 门户中的“托管标识”页,然后选择相关的标识名称。 从“标识概述”页复制“客户端 ID”的值。

显示“标识概述”页上的客户端 ID 的屏幕截图。

若要查找 Microsoft Entra ID 应用程序的客户端 ID,请使用以下 CLI 或查看使用 Azure 门户创建 Microsoft Entra ID 应用程序部分的第一步。

$ az ad app list --display-name < application name>

有关详细信息,请参阅 az ad app list

注意

编辑配置文件后,请重启 Prometheus,以便应用更改。

验证远程写入数据是否流动

使用以下方法验证 Prometheus 数据是否正在发送到 Azure Monitor 工作区。

使用 PromQL 的 Azure Monitor 指标资源管理器

若要检查指标是否流向 Azure Monitor 工作区,请在 Azure 门户中的 Azure Monitor 工作区中选择“指标”。 使用指标资源管理器查询你期望从自托管 Prometheus 环境中获得的指标。 有关详细信息,请参阅指标资源管理器

Azure Monitor 工作区中的 Prometheus 资源管理器

Prometheus 资源管理器提供了在 Azure 环境中与 Prometheus 指标交互的便捷方法,使监视和故障排除更高效。 若要使用 Prometheus 资源管理器,请转到 Azure 门户中的 Azure Monitor 工作区,然后选择“Prometheus 资源管理器”以查询你期望从自托管 Prometheus 环境中获得的指标。 有关详细信息,请参阅 Prometheus 资源管理器

Grafana

在 Grafana 中使用 PromQL 查询,以验证结果是否会返回预期数据。 要配置 Grafana,请参阅使用托管 Prometheus 获取 Grafana 设置

远程写入疑难解答

如果远程数据未显示在 Azure Monitor 工作区中,请参阅远程写入故障排除以了解常见问题和解决方案。

后续步骤