Go语言 开放电信出口在戈兰取得部分成功

llmtgqce  于 2023-03-21  发布在  Go
关注(0)|答案(1)|浏览(181)

我正在运行一个开放的遥测收集器,暴露在端口4318荚(运行节点js演示完美工作)
但运行此基本代码示例(基本上只是在启动Tracer并发送范围后运行一个简单的程序)

package main

import (
    "context"
    "fmt"
    "log"
    "os"
    "os/signal"
    "time"

    "go.opentelemetry.io/otel"

    "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"

    // "go.opentelemetry.io/otel/propagation"
    "go.opentelemetry.io/otel/sdk/resource"
    sdktrace "go.opentelemetry.io/otel/sdk/trace"
    semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
)

func initProvider() func() {
    ctx := context.Background()

    _, err := resource.New(ctx,
        resource.WithAttributes(
            semconv.ServiceNameKey.String("test-service"),
        ),
    )
    handleErr(err, "failed to create resource")
    traceExporter, err := otlptracehttp.New(ctx,
        otlptracehttp.WithInsecure(),
        otlptracehttp.WithEndpoint("localhost:4318"),
    )

    handleErr(err, "failed to create trace exporter")

    bsp := sdktrace.NewBatchSpanProcessor(traceExporter)
    tracerProvider := sdktrace.NewTracerProvider(
        // sdktrace.WithSampler(sdktrace.AlwaysSample()),
        // sdktrace.WithResource(res),
        sdktrace.WithSpanProcessor(bsp),
    )

    otel.SetTracerProvider(tracerProvider)
    // otel.SetTextMapPropagator(propagation.TraceContext{})
    return func() {
        handleErr(tracerProvider.Shutdown(ctx), "failed to shutdown TracerProvider")
    }
}

func initialize() {

    traceExp, err := otlptracehttp.New(
        context.Background(),
        otlptracehttp.WithEndpoint("127.0.0.1:8082"),
        otlptracehttp.WithURLPath("v1/traces"),
        otlptracehttp.WithInsecure(),
    )
    if err != nil {
        fmt.Println(err)
    }

    bsp := sdktrace.NewBatchSpanProcessor(traceExp)
    tracerProvider := sdktrace.NewTracerProvider(
        sdktrace.WithSpanProcessor(bsp),
    )

    otel.SetTracerProvider(tracerProvider)
}

func main() {
    log.Printf("Waiting for connection...")

    ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
    defer cancel()

    // shutdown := initProvider()
    // defer shutdown()
    initProvider()

    tracer := otel.Tracer("demo-client-tracer")
    ctx, span := tracer.Start(context.TODO(), "span-name")

    defer span.End()
    for i := 0; i < 10; i++ {
        _, iSpan := tracer.Start(ctx, fmt.Sprintf("Sample-%d", i))
        log.Printf("Doing really hard work (%d / 10)\n", i+1)

        <-time.After(time.Second)
        iSpan.End()
    }

    log.Printf("Done!")
}

func handleErr(err error, message string) {
    if err != nil {
        log.Fatalf("%s: %v", message, err)
    }
}

我得到:

OTLP partial success: empty message (0 spans rejected)

而且没有任何痕迹被发送...有什么想法吗?我错过了什么?

slsn1g29

slsn1g291#

这是OTLP导出器和收集器之间的bug问题,本应在v1.11.2版本中解决。升级到最新版本的go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp应可解决此问题。

相关问题