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

如何在Python OpenTelemetry中为Jaeger Span的Process添加自定义标签

解决方案

OpenTelemetry中进程级别的标签全部通过Resource对象配置即可,Jaeger Exporter会自动将所有Resource属性转换为你期望的process.tags结构,不需要额外做特殊处理。
你代码中trace.set_attribute("hostname","018.zeus.run")的写法是给当前活跃Span加属性,只会出现在单个Span的标签中,不会作用到进程层级。

你之前配置不生效的核心原因大概率是2点:

  • 没有将创建的TracerProvider设置为全局生效的实例
  • 没有给TracerProvider绑定Jaeger Exporter对应的Span处理器,导致配置的Resource没有被导出器识别

修正后的完整初始化代码如下:

from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk.resources import Resource
from opentelemetry.exporter.jaeger.thrift import JaegerExporter
from opentelemetry.semconv.resource import ResourceAttributes

# 所有在Resource中定义的属性都会自动转为process.tags下的条目
resource = Resource.create({
    ResourceAttributes.SERVICE_NAME: "xxxx",
    ResourceAttributes.SERVICE_INSTANCE_ID: "1",
    ResourceAttributes.HOST_NAME: "xxxx",
    # 自定义的进程标签直接加在这个字典里即可
    "hostname": "018.zeus.run",
    "自定义标签key": "自定义标签值"
})

# 初始化TracerProvider
provider = TracerProvider(resource=resource)

# 初始化Jaeger导出器
jaeger_exporter = JaegerExporter(
    agent_host_name='xxxxx',
    agent_port=6831,
    collector_endpoint='http://xxxxx:14268/api/traces?format=jaeger.thrift'
)

# 绑定Span处理器,负责将生成的Span导出到Jaeger
provider.add_span_processor(
    BatchSpanProcessor(jaeger_exporter)
)

# 将当前TracerProvider设置为全局生效,后续所有get_tracer调用都会使用该配置
trace.set_tracer_provider(provider)

# 后续正常获取tracer创建Span即可
tracer = trace.get_tracer(__name__)

按以上代码调整后,你导出的Trace结构就会自动生成你需要的process.tags结构,所有Resource中定义的属性都会自动对应到tags数组中的条目,vType会根据属性值的类型自动识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:24:03