OpenTelemetry Java如何获取OTEL_RESOURCE_ATTRIBUTES的键值对?
获取OTEL_RESOURCE_ATTRIBUTES中的自定义属性
当然可以获取,OpenTelemetry Java SDK会自动将OTEL_RESOURCE_ATTRIBUTES中的自定义属性与HostResource、OsResource等内置资源属性合并到同一个Resource对象中,直接通过该对象即可遍历所有属性:
- 获取全局OpenTelemetry实例的Resource:
OpenTelemetry openTelemetry = OpenTelemetrySdk.getGlobal(); Resource resource = openTelemetry.getResource();
- 遍历所有属性(包含内置和自定义):
for (AttributeKey<?> key : resource.getAttributeKeys()) { Object value = resource.getAttribute(key); System.out.printf("Resource Attribute: %s = %s%n", key.getKey(), value); }
如果是手动构建OpenTelemetry SDK实例,也可以显式加载环境变量中的资源属性并合并:
Resource defaultResource = Resource.getDefault(); Resource envResource = Resource.fromEnvironmentVariables(); Resource combinedResource = defaultResource.merge(envResource); // 后续将combinedResource传入TracerProvider、LogEmitterProvider的构建器
资源属性如何关联到日志和追踪
追踪(Traces):当你通过Tracer创建Span时,OpenTelemetry会自动将Resource中的所有属性附加到Span的元数据中。所有由该Tracer生成的Span都会携带这些属性,在Jaeger、Zipkin等追踪后端查看Span详情时,就能看到包括自定义属性在内的所有Resource字段。
日志(Logs):
- 直接使用OpenTelemetry的
LogEmitter创建日志时,LogRecord会自动关联当前的Resource属性; - 如果你使用Logback、SLF4J等日志框架的OpenTelemetry Instrumentation插件,插件会自动将Resource属性注入到每条日志的属性字段中,这些属性会随日志一起发送到后端(如Loki、Elasticsearch),方便后续过滤和分析。
- 直接使用OpenTelemetry的
内容的提问来源于stack exchange,提问作者David Andalcio
相关产品推荐
相关产品推荐

