You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Dapr Sidecar暴露自定义指标?附Python实现疑问

让Dapr Sidecar统一暴露应用自定义指标的实现方案

一、通过Dapr Sidecar代理应用自定义指标到9090端口

Dapr支持将应用的自定义指标合并到Sidecar的9090指标端口统一输出,无需OTEL分别采集。需完成以下两步:

1. 配置Dapr抓取应用指标

在Dapr配置文件(如config.yaml)中添加指标抓取规则,指定应用的指标地址和端口:

apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
  name: dapr-config
spec:
  metrics:
    enabled: true
    scrapeConfig:
      - jobName: "python-app-metrics"
        scrapeInterval: "15s"
        staticConfigs:
          - targets: ["localhost:9091"] # 对应Python应用暴露指标的端口

如果是Kubernetes环境,也可通过Pod注解配置:

annotations:
  dapr.io/enabled: "true"
  dapr.io/app-metrics-port: "9091" # 告知Dapr应用的指标端口

2. Python应用指标暴露代码(你的现有代码已满足要求)

你的代码已通过Prometheus客户端在9091端口暴露自定义指标,且通过Resource设置了服务标识,确保指标带有service.name标签,符合Dapr指标规范。核心代码如下:

import time
from prometheus_client import start_http_server
from opentelemetry import metrics
from opentelemetry.exporter.prometheus import PrometheusMetricReader
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.resources import SERVICE_NAME, Resource

if __name__ == '__main__':
    # 设置服务名称,为指标添加服务标识
    resource = Resource(attributes={
        SERVICE_NAME: "otel-prom-test"
    })

    # 在9091端口暴露指标,供Dapr Sidecar抓取
    start_http_server(port=9091, addr="0.0.0.0")
    reader = PrometheusMetricReader()
    provider = MeterProvider(resource=resource, metric_readers=[reader])
    metrics.set_meter_provider(provider)

    meter = metrics.get_meter_provider().get_meter("getting-started", "0.1.2")
    counter = meter.create_counter("test_counter")
    
    counter.add(1)
    time.sleep(10)
    counter.add(1)

配置完成后,访问http://localhost:9090/metrics即可同时获取Dapr标准指标和你的自定义test_counter_total指标。

二、备选方案:OTEL Collector分别采集两个端口

若Dapr代理方案不符合需求,可配置OTEL Collector的Prometheus接收器,添加两个抓取任务:

receivers:
  prometheus:
    config:
      scrape_configs:
        - job_name: "dapr-sidecar"
          scrape_interval: 15s
          static_configs:
            - targets: ["localhost:9090"]
        - job_name: "python-app"
          scrape_interval: 15s
          static_configs:
            - targets: ["localhost:9091"]

processors:
  batch:

exporters:
  # 配置你的目标导出器,如OTLP、Prometheus等

service:
  pipelines:
    metrics:
      receivers: [prometheus]
      processors: [batch]
      exporters: [your-exporter]

此配置下,OTEL Collector会分别从Dapr Sidecar和Python应用采集指标,再统一导出到后端存储。


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 17:05:31