如何将Azure内置指标迁移至Prometheus以实现统一监控?
我来分享几个经过实践验证的方案,帮你把Azure平台及Dynamics 365云服务的指标导入Prometheus,打造统一的监控中枢:
方案1:Azure Monitor Exporter(官方推荐)
这是微软官方维护的工具,专门用于将Azure Monitor的指标转换为Prometheus兼容格式,支持绝大多数Azure服务(包括D365)。
步骤:
1. 创建权限适配的Azure AD服务主体
给服务主体分配Monitoring Reader权限,确保它能读取目标订阅下的所有监控数据。用Azure CLI执行:az ad sp create-for-rbac --name prometheus-azure-exporter --role "Monitoring Reader" --scopes /subscriptions/<你的订阅ID>保存返回的
appId、password、tenantID,后续配置会用到。2. 部署Exporter
可以用Docker容器直接部署,或者集成到Kubernetes集群(如果你的Prometheus运行在K8s上):docker run -d \ --name azure-monitor-exporter \ -e AZURE_CLIENT_ID=<刚才的appId> \ -e AZURE_CLIENT_SECRET=<刚才的password> \ -e AZURE_TENANT_ID=<刚才的tenantID> \ -e AZURE_SUBSCRIPTION_ID=<你的订阅ID> \ -p 9276:9276 \ mcr.microsoft.com/azuremonitor/prometheus-exporter:latest3. 配置Prometheus抓取
在prometheus.yml中添加抓取任务:scrape_configs: - job_name: 'azure-monitor' static_configs: - targets: ['<exporter的IP/域名>:9276'] metrics_path: '/metrics' # 可选:添加筛选规则,只抓取特定资源组/服务的指标 params: resource_groups: ['D365-Prod-Group'] resource_types: ['Microsoft.CommonServices/resources']
优势:
官方维护兼容性强,支持自定义指标筛选,无需额外开发即可覆盖大部分场景。
方案2:Prometheus Azure服务发现(动态资源适配)
如果你的Azure资源是动态创建/销毁的,用服务发现自动识别目标资源会更高效。
步骤:
- 1. 同样创建具备
Monitoring Reader权限的AD服务主体 - 2. 配置Prometheus服务发现与抓取
在prometheus.yml中添加:scrape_configs: - job_name: 'azure-dynamic-resources' azure_sd_configs: - authentication_method: OAuth client_id: '<appId>' client_secret: '<password>' tenant_id: '<tenantID>' subscription_id: '<订阅ID>' refresh_interval: 5m # 可选:限定监控的资源组 resource_groups: ['D365-Prod-Group'] # 用Relabel规则过滤出D365相关资源 relabel_configs: - source_labels: [__azure_resource_type] regex: 'Microsoft\.CommonServices\/resources' action: keep metrics_path: '/azure/metrics' params: metricnames: ['ActiveUsers', 'RequestLatency'] # 指定需要抓取的D365指标 aggregation: ['Average', 'Count'] # 指标聚合方式
注意:
确保你的Prometheus版本在2.10以上,这个版本才正式支持Azure服务发现功能。
方案3:D365 SaaS指标的特殊处理
对于D365专属的业务指标(比如活跃用户数、业务流程成功率),如果Azure Monitor未覆盖,可以通过API+Pushgateway的方式接入:
步骤:
1. 获取D365 API访问权限
在Azure AD中注册应用,给它分配D365的API权限(比如Dynamics CRM > Delegated Permissions > user_impersonation)。2. 编写脚本抓取并推送指标
示例Python脚本(定时调用D365 API,将指标推送到Prometheus Pushgateway):import requests from prometheus_client import CollectorRegistry, Gauge, push_to_gateway from datetime import datetime # 获取D365访问令牌 token_url = "https://login.microsoftonline.com/<tenantID>/oauth2/v2.0/token" token_payload = { 'client_id': '<D365应用的appId>', 'client_secret': '<D365应用的secret>', 'scope': 'https://<D365实例域名>.crm.dynamics.com/.default', 'grant_type': 'client_credentials' } token_response = requests.post(token_url, data=token_payload).json() access_token = token_response['access_token'] # 调用D365 API获取业务指标 metrics_url = "https://<D365实例域名>.crm.dynamics.com/api/data/v9.1/retrieveactiveusers" headers = {'Authorization': f'Bearer {access_token}'} metrics_data = requests.get(metrics_url, headers=headers).json() # 转换为Prometheus格式并推送 registry = CollectorRegistry() d365_active_users = Gauge( 'd365_active_users_total', 'Total active users in Dynamics 365', registry=registry ) d365_active_users.set(metrics_data['active_user_count']) push_to_gateway('pushgateway:9091', job='d365-business-metrics', registry=registry)3. 配置Prometheus抓取Pushgateway
在prometheus.yml中添加:scrape_configs: - job_name: 'd365-pushgateway' static_configs: - targets: ['pushgateway:9091']
验证与调试
- 先访问exporter/Pushgateway的
/metrics端点,确认能看到预期的指标数据 - 在Prometheus UI中搜索指标名称(比如
azure_vm_cpu_usage_average或d365_active_users_total),检查抓取状态是否正常 - 若遇到权限问题,检查AD服务主体的权限范围是否覆盖了所有需要监控的资源
内容的提问来源于stack exchange,提问作者user12589647




