golang 中的 opentelemtry exporter 部分成功

问题描述 投票:0回答:1

我正在运行一个暴露于端口 4318 的开放式遥测收集器 pod(运行 node js 演示完美运行)

但是运行这个基本代码示例(基本上只是在启动 Tracer 和发送 span 之后运行一个简单的程序)


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)

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

go trace open-telemetry
1个回答
0
投票

这是 OTLP 导出器和收集器之间的bug,应该在 v1.11.2 版本中解决。升级到最新版本的

go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp
应该可以解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.