你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn 。
将 Prometheus 指标从虚拟机、规模集或 Kubernetes 群集发送到 Azure Monitor 工作区
本文内容
Prometheus 不限于监视 Kubernetes 群集。 使用 Prometheus 监视服务器上运行的应用程序和服务,无论它们在哪里运行。 例如,可以监视虚拟机、虚拟机规模集,甚至本地服务器上运行的应用程序。 还可以将 Prometheus 指标从自托管群集和 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 应用程序身份验证配置远程写入。 有关详细信息,请参阅本文后面的使用 Microsoft Entra 应用程序身份验证进行远程写入 。
加入已启用 Azure Arc 的服务后,可以在 Azure 中管理和配置非 Azure 虚拟机。 有关详细信息,请参阅已启用 Azure Arc 的服务器 和已启用 Azure Arc 的 Kubernetes 。 已启用 Azure Arc 的服务器仅支持 Microsoft Entra 身份验证。
注意
系统分配的托管标识不支持远程写入到 Azure Monitor 工作区。 用户分配的托管标识或 Microsoft Entra 应用程序身份验证。
先决条件
支持的版本
托管标识身份验证需要高于 2.45 的 Prometheus 版本。
Microsoft Entra 应用程序身份验证需要高于 2.48 的 Prometheus 版本。
Azure Monitor 工作区
本文介绍如何将 Prometheus 指标发送到 Azure Monitor 工作区。 若要创建 Azure Monitor 工作区,请参阅管理 Azure Monitor 工作区 。
权限
完成本文中的步骤需要群集或资源的管理员权限。
为远程写入设置身份验证
根据 Prometheus 正在运行的环境,可以将远程写入配置为使用用户分配的托管标识或 Microsoft Entra 应用程序身份验证将数据发送到 Azure Monitor 工作区。
使用 Azure 门户或 Azure CLI 创建用户分配的托管标识或 Microsoft Entra 应用程序。
使用用户分配的托管标识身份验证进行远程写入
可在任何 Azure 托管环境中使用用户分配的托管标识身份验证。 如果 Prometheus 服务在非 Azure 环境中运行,则可以使用 Microsoft Entra 应用程序身份验证。
若要为远程写入到 Azure Monitor 工作区配置用户分配的托管标识,请完成以下步骤。
创建用户分配的托管标识
若要创建用于远程写入配置的用户托管标识,请参阅管理用户分配的托管标识 。
请注意所创建的托管标识 clientId
的值。 此 ID 用于 Prometheus 远程写入配置。
将“监视指标发布者”角色分配给应用程序
在工作区的数据收集规则中,为托管标识分配“监视指标发布者”角色:
在 Azure Monitor 工作区,概述页面上,选择“ 数据收集规则”链接。
在数据收集规则的页面中,选择“访问控制 (IAM)”。
选择“添加”>“添加角色分配”。
搜索并选择“ 监视指标发布服务器”,然后选择“ 下一步”。
选择“托管标识”。
选择“选择成员” 。
在“托管标识”下拉列表中,选择“用户分配的托管标识” 。
选择要使用的用户分配的标识,然后选择“选择”。
选择“查看 + 分配 ”以完成角色分配。
将托管标识分配给虚拟机或虚拟机规模集
重要
要完成本部分中的步骤,你必须具有对虚拟机或虚拟机规模集的所有者或用户访问管理员权限。
在 Azure 门户中,转到群集、虚拟机或虚拟机规模集的页面。
选择“标识 ”。
选择“用户分配” 。
选择 添加 。
选择创建的用户分配的托管标识,然后选择“添加 ”。
为 Azure Kubernetes 服务分配托管标识
对于 Azure Kubernetes 服务,必须将托管标识分配给虚拟机规模集。
AKS 创建包含虚拟机规模集的资源组。 资源组名称的格式为 MC_<resource group name>_<AKS cluster name>_<region>
。
对于资源组中的每个虚拟机规模集,请按照上一节(将托管标识分配给虚拟机或虚拟机规模集 )中的步骤分配托管标识。
使用 Microsoft Entra 应用程序身份验证进行远程写入
Microsoft Entra ID 应用程序身份验证可在任何环境中使用。 如果 Prometheus 服务在 Azure 托管环境中运行,请考虑使用用户分配的托管身份验证。
若要使用 Microsoft Entra 应用程序配置对 Azure Monitor 工作区的远程写入,请创建一个 Microsoft Entra 应用程序。 在 Azure Monitor 工作区的数据收集规则上,将“监视指标发布者”角色分配给 Microsoft Entra 应用程序。
注意
Microsoft Entra 应用程序使用客户端密码或密码。 客户端机密有一个到期日期。 请确保在客户端密码过期之前创建新的客户端密码,这样就不会丢失已经过身份验证的访问权限。
创建 Microsoft Entra ID 应用程序
若要使用门户创建 Microsoft Entra ID 应用程序,请参阅使用 Microsoft Entra ID 注册应用程序并创建服务主体 。
创建 Microsoft Entra 应用程序后,获取客户端 ID 并生成客户端密码:
在应用程序列表中,复制已注册应用程序的“客户端 ID”值 。 此值是在 Prometheus 远程写入配置中用作 client_id
的值。
选择“证书和机密”。
选择“客户端密码”,然后选择“新建客户端密码”以创建密码 。
输入说明,设置到期日期,然后选择“添加”。
安全地复制机密的值。 该值是在 Prometheus 远程写入配置中用作 client_secret
的值。 客户端密码值仅在创建时可见,并且以后无法检索该值。 如果丢失,则必须创建一个新密码。
将“监视指标发布者”角色分配给应用程序
为应用程序分配针对工作区数据收集规则的“监视指标发布者”角色:
在 Azure Monitor 工作区,概述页面上,选择“ 数据收集规则”链接。
在数据收集规则的页面中,选择“访问控制 (IAM)”。
依次选择“添加”、“添加角色分配”。
选择“监视指标发布者”角色,然后选择“下一步” 。
选择“用户、组或服务主体”,然后选择“选择成员” 。 选择你创建的应用程序,然后选择“选择” 。
若要完成角色分配,请选择“查看 + 分配”。
通过 Azure CLI 创建用户分配的标识和 Microsoft Entra ID 应用
创建用户分配的托管标识
使用以下步骤为远程写入创建用户分配的托管标识。
请注意所创建的托管标识 clientId
的值。 此 ID 用于 Prometheus 远程写入配置。
使用以下 Azure CLI 命令创建用户分配的托管标识:
az account set \
--subscription <subscription id>
az identity create \
--name <identity name> \
--resource-group <resource group name>
以下代码是显示输出的示例:
{
"clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/rg-001/providers/Microsoft.ManagedIdentity/userAssignedIdentities/PromRemoteWriteIdentity",
"location": "eastus",
"name": "PromRemoteWriteIdentity",
"principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"resourceGroup": "rg-001",
"systemData": null,
"tags": {},
"tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"type": "Microsoft.ManagedIdentity/userAssignedIdentities"
}
为托管标识分配针对工作区数据收集规则的“监视指标发布者”角色:
az role assignment create \
--role "Monitoring Metrics Publisher" \
--assignee <managed identity client ID> \
--scope <data collection rule resource ID>
例如:
az role assignment create \
--role "Monitoring Metrics Publisher" \
--assignee 00001111-aaaa-2222-bbbb-3333cccc4444 \
--scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MA_amw-001_eastus_managed/providers/Microsoft.Insights/dataCollectionRules/amw-001
将托管标识分配给虚拟机或虚拟机规模集。
下面是虚拟机的命令:
az vm identity assign \
-g <resource group name> \
-n <virtual machine name> \
--identities <user assigned identity resource ID>
下面是虚拟机规模集的命令:
az vmss identity assign \
-g <resource group name> \
-n <scale set name> \
--identities <user assigned identity resource ID>
以下示例显示了虚拟机规模集的命令:
az vm identity assign \
-g rg-prom-on-vm \
-n win-vm-prom \
--identities /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/rg-001/providers/Microsoft.ManagedIdentity/userAssignedIdentities/PromRemoteWriteIdentity
有关详细信息,请参阅 az identity create 和 az role assignment create 。
创建 Microsoft Entra 应用程序
若要使用 Azure CLI 创建 Microsoft Entra 应用程序,并分配监视指标发布服务器角色,请运行以下命令:
az ad sp create-for-rbac --name <application name> \
--role "Monitoring Metrics Publisher" \
--scopes <azure monitor workspace data collection rule Id>
例如:
az ad sp create-for-rbac \
--name PromRemoteWriteApp \
--role "Monitoring Metrics Publisher" \
--scopes /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MA_amw-001_eastus_managed/providers/Microsoft.nsights/dataCollectionRules/amw-001
以下代码是显示输出的示例:
{
"appId": "66667777-aaaa-8888-bbbb-9999cccc0000",
"displayName": "PromRemoteWriteApp",
"password": "Aa1Bb~2Cc3.-Dd4Ee5Ff6Gg7Hh8Ii9_Jj0Kk1Ll2",
"tenant": "ffff5f5f-aa6a-bb7b-cc8c-dddddd9d9d9d"
}
输出包含 appId
和 password
值。 保存这些值以在 Prometheus 远程写入配置中用作 client_id
和 client_secret
的值。 密码或客户端密码值仅在创建时可见,并且以后无法检索该值。 如果丢失,则必须创建一个新密码。
有关详细信息,请参阅 az ad app create 和 az ad sp create-for-rbac 。
远程写入在 Prometheus 配置文件 prometheus.yml
或在 Prometheus Operator 中进行配置。
有关配置远程写入的详细信息,请参阅 Prometheus.io 文章:配置 。 有关优化远程写入配置的详细信息,请参阅远程写入优化 。
若要将数据发送到 Azure Monitor 工作区,请将以下部分添加到自托管 Prometheus 实例的配置文件(prometheus.yml
):
remote_write:
- url: "<metrics ingestion endpoint for your Azure Monitor workspace>"
# Microsoft Entra ID configuration.
# The Azure cloud. Options are 'AzurePublic', 'AzureChina', or 'AzureGovernment'.
azuread:
cloud: 'AzurePublic'
managed_identity:
client_id: "<client-id of the managed identity>"
oauth:
client_id: "<client-id from the Entra app>"
client_secret: "<client secret from the Entra app>"
tenant_id: "<Azure subscription tenant Id>"
Prometheus Operator
如果使用运行 Prometheus Operator 的 Kubernetes 群集,请使用以下步骤将数据发送到 Azure Monitor 工作区:
如果使用 Microsoft Entra 身份验证,请使用 Base64 编码转换机密,然后将机密应用到 Kubernetes 群集。 将以下代码保存到 YAML 文件。 如果使用的是托管标识身份验证,则跳过此步骤。
apiVersion: v1
kind: Secret
metadata:
name: remote-write-secret
namespace: monitoring # Replace with the 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>
在 Prometheus Operator 中更新远程写入节的值。 复制以下 YAML 并将其保存为文件。 有关 Prometheus Operator 中的 Azure Monitor 工作区远程写入规范的详细信息,请参阅 Prometheus Operator 文档 。
prometheus:
prometheusSpec:
remoteWrite:
- url: "<metrics ingestion endpoint for your Azure Monitor workspace>"
azureAd:
# Microsoft Entra ID 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>"
使用 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 工作区的“概述”窗格找到它。
根据实现,使用 managed_identity
或 oauth
进行 Microsoft Entra 应用程序身份验证。 删除未使用的对象。
使用以下 Azure CLI 命令查找托管标识的客户端 ID:
az identity list --resource-group <resource group name>
有关详细信息,请参阅 az identity list 。
若要在门户中查找用于托管标识身份验证的客户端,请转到 Azure 门户中的“托管标识 ”,然后选择相关的标识名称。 从托管标识的“概述”窗格复制“客户端 ID”的值 。
若要查找 Microsoft Entra ID 应用程序的客户端 ID,请使用以下 Azure CLI 命令(或查看前面使用 Microsoft Entra 应用程序身份验证进行远程写入 部分的第一步):
$ 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 查询语言 (PromQL) 配合使用,查询你期望从自托管 Prometheus 环境中获得的指标。 有关详细信息,请参阅使用 PromQL 的 Azure Monitor 指标资源管理器 。
Azure Monitor 工作区中的 Prometheus 资源管理器
Prometheus 资源管理器提供了在 Azure 环境中与 Prometheus 指标交互的便捷方法,以便监视和故障排除更高效。 若要使用 Prometheus 资源管理器,请转到 Azure 门户中的 Azure Monitor 工作区,然后选择“Prometheus Explorer” 。 然后可以查询你期望从自托管 Prometheus 环境中获得的指标。
有关详细信息,请参阅使用 Azure 工作簿查询 Prometheus 指标 。
Grafana
在 Grafana 中使用 PromQL 查询,以验证结果是否会返回预期数据。 要配置 Grafana,请参阅使用托管 Prometheus 获取 Grafana 设置的文章 。
远程写入疑难解答
如果远程数据未显示在 Azure Monitor 工作区中,请参阅远程写入故障排除 以了解常见问题和解决方案。
相关内容