如何通过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
相关产品推荐
相关产品推荐

