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

如何在Python中实现OpenTelemetry Resource区分多主机上报至New Relic的指标

解决OpenTelemetry Python按主机区分指标的问题

问题根源分析

你代码里的核心问题有两个:

  • 重复调用metrics.set_meter_provider,第二次调用会完全覆盖第一次的配置,导致之前设置的Resource失效
  • 仅自定义host.ip属性,既没有遵循OpenTelemetry标准属性规范,也没有合并默认资源,导致Collector和New Relic无法正确识别主机标识

正确实现步骤

1. 安装依赖

确保安装所需的OpenTelemetry Python包:

pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp-proto-http

2. 正确配置Resource与MeterProvider

使用OpenTelemetry官方定义的标准主机属性键,合并默认资源(避免丢失服务标识等基础元数据),且仅初始化一次MeterProvider:

from opentelemetry import metrics
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.resources import Resource, SERVICE_NAME, HOST_NAME, HOST_IP

# 创建包含主机信息的Resource,合并OTel默认资源
resource = Resource.create({
    SERVICE_NAME: "your-service-identifier",  # 必填,标识你的服务
    HOST_NAME: "target-host-name",             # 主机名,New Relic优先识别该字段
    HOST_IP: "192.168.1.100"                   # 主机IP,作为补充标识
})

# 仅初始化一次MeterProvider
metrics.set_meter_provider(MeterProvider(resource=resource))

# 创建指标并上报数据
meter = metrics.get_meter("custom-metric-meter")
counter = meter.create_counter(
    name="custom.request.count",  # 建议使用带业务前缀的命名规范
    description="Count of custom requests"
)

# 添加指标数据,这里的属性是指标维度,与Resource的主机标识不冲突
counter.add(1, {"request_status": "SUCCESS", "request_type": "API"})

3. 配置OTLP导出器对接Collector

要确保指标能发送到OpenTelemetry Collector,需添加导出器配置:

from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter

# 配置导出器指向你的Collector地址
otlp_exporter = OTLPMetricExporter(endpoint="http://your-collector-address:4318/v1/metrics")
# 创建周期性指标读取器
metric_reader = PeriodicExportingMetricReader(otlp_exporter)

# 关联读取器到MeterProvider(替换之前的set_meter_provider配置)
meter_provider = MeterProvider(resource=resource, metric_readers=[metric_reader])
metrics.set_meter_provider(meter_provider)

关键注意事项

  • 标准属性规范:必须使用HOST_NAME、HOST_IP这类OTel官方定义的常量,而非自定义字符串键,否则Collector和New Relic无法正确解析主机元数据
  • 避免重复初始化:set_meter_provider只能调用一次,多次调用会直接覆盖之前的所有配置
  • New Relic关联逻辑:New Relic会通过host.name或host.ip将指标关联到对应主机实体,你可在New Relic的实体浏览器中找到目标主机,查看关联的指标数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:05:20