opentelemetry-api从0.5.0到0.8.0的迁移问题

问题描述

opentelemetry-api 0.5.0 升级 0.8.0 时,我遇到了这个问题。

考虑以下代码段,

import io.opentelemetry.OpenTelemetry
import io.opentelemetry.context.Scope
import io.opentelemetry.trace._

object Main4 extends App {

  val a: Tracer = OpenTelemetry.getTracer(getClass.getSimpleName)
  val b: Span = a.spanBuilder("test").startSpan()
  val c: Scope = a.withSpan(b)
  try {
    val d: Span = TracingContextUtils.getCurrentSpan
    val e: SpanContext = d.getContext
    val f: Span = DefaultSpan.getInvalid
    val g: SpanContext = f.getContext
    println(d)
    println(e)
    println(e.isValid)
    println(e.getSpanId)
    println(e.getTraceId)

    println()
    println()
    println()

    println(f)
    println(g)
    println(g.isValid)
    println(g.getSpanId)
    println(g.getTraceId)

    println()
    println()

    println(d == f)

  } finally {
    c.close()
  }
}

使用 0.5.0 ,我得到的输出为:-

DefaultSpan
SpanContext{traceId=TraceId{traceId=f153124023eeab63d027ca493e05cbdf},spanId=SpanId{spanId=fb8136024af9a4ae},traceFlags=TraceFlags{sampled=false},traceState=TraceState{entries=[]},remote=false}
true
SpanId{spanId=fb8136024af9a4ae}
TraceId{traceId=f153124023eeab63d027ca493e05cbdf}



DefaultSpan
SpanContext{traceId=TraceId{traceId=00000000000000000000000000000000},spanId=SpanId{spanId=0000000000000000},remote=false}
false
SpanId{spanId=0000000000000000}
TraceId{traceId=00000000000000000000000000000000}


false

使用 0.8.0 ,我得到的输出为:-

DefaultSpan
SpanContext{traceId=TraceId{traceId=00000000000000000000000000000000},remote=false}
false
SpanId{spanId=0000000000000000}
TraceId{traceId=00000000000000000000000000000000}



DefaultSpan
SpanContext{traceId=TraceId{traceId=00000000000000000000000000000000},remote=false}
false
SpanId{spanId=0000000000000000}
TraceId{traceId=00000000000000000000000000000000}


true

我认为使用 0.8.0 时,我的代码中缺少某些内容,原因是该代码未按预期正确运行。

有人能让我知道我需要对我的代码进行哪些更改,以便获得正确的 Span ,而不是无效的 Span 。 0.5.0 ?

注意:-我正在使用:- scala -> 2.13.3, jvm -> 14, sbt -> 1.3.13

解决方法

在0.8.0中,如果没有安装的SDK,API将不再生成跨度。这样做主要是出于性能方面的考虑,因此在未安装SDK的情况下,API本身将以较低的开销运行。

如果您想要有效的跨度,只需将SDK添加到您的类路径中,您将获得它们。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...