You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何将Azure内置指标迁移至Prometheus以实现统一监控?

把Azure(含D365云服务)指标接入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>
    

    保存返回的appIdpasswordtenantID,后续配置会用到。

  • 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:latest
    
  • 3. 配置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_averaged365_active_users_total),检查抓取状态是否正常
  • 若遇到权限问题,检查AD服务主体的权限范围是否覆盖了所有需要监控的资源

内容的提问来源于stack exchange,提问作者user12589647

火山引擎 最新活动