在使用Golang编写的OpenTelemetry导出器方面取得了部分成功。

huangapple go评论150阅读模式
英文:

Partial succes on opentelemtry exporter in golang

问题

我正在运行一个开放遥测收集器的Pod,它暴露在端口4318上(运行Node.js演示程序完美运行)。

但是运行这个基本的代码示例(基本上只是在初始化跟踪器并发送跨度后运行一个简单的程序):

  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "log"
  6. "os"
  7. "os/signal"
  8. "time"
  9. "go.opentelemetry.io/otel"
  10. "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
  11. "go.opentelemetry.io/otel/sdk/resource"
  12. sdktrace "go.opentelemetry.io/otel/sdk/trace"
  13. semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
  14. )
  15. func initProvider() func() {
  16. ctx := context.Background()
  17. _, err := resource.New(ctx,
  18. resource.WithAttributes(
  19. semconv.ServiceNameKey.String("test-service"),
  20. ),
  21. )
  22. handleErr(err, "failed to create resource")
  23. traceExporter, err := otlptracehttp.New(ctx,
  24. otlptracehttp.WithInsecure(),
  25. otlptracehttp.WithEndpoint("localhost:4318"),
  26. )
  27. handleErr(err, "failed to create trace exporter")
  28. bsp := sdktrace.NewBatchSpanProcessor(traceExporter)
  29. tracerProvider := sdktrace.NewTracerProvider(
  30. sdktrace.WithSpanProcessor(bsp),
  31. )
  32. otel.SetTracerProvider(tracerProvider)
  33. return func() {
  34. handleErr(tracerProvider.Shutdown(ctx), "failed to shutdown TracerProvider")
  35. }
  36. }
  37. func initialize() {
  38. traceExp, err := otlptracehttp.New(
  39. context.Background(),
  40. otlptracehttp.WithEndpoint("127.0.0.1:8082"),
  41. otlptracehttp.WithURLPath("v1/traces"),
  42. otlptracehttp.WithInsecure(),
  43. )
  44. if err != nil {
  45. fmt.Println(err)
  46. }
  47. bsp := sdktrace.NewBatchSpanProcessor(traceExp)
  48. tracerProvider := sdktrace.NewTracerProvider(
  49. sdktrace.WithSpanProcessor(bsp),
  50. )
  51. otel.SetTracerProvider(tracerProvider)
  52. }
  53. func main() {
  54. log.Printf("Waiting for connection...")
  55. ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
  56. defer cancel()
  57. initProvider()
  58. tracer := otel.Tracer("demo-client-tracer")
  59. ctx, span := tracer.Start(context.TODO(), "span-name")
  60. defer span.End()
  61. for i := 0; i < 10; i++ {
  62. _, iSpan := tracer.Start(ctx, fmt.Sprintf("Sample-%d", i))
  63. log.Printf("Doing really hard work (%d / 10)\n", i+1)
  64. <-time.After(time.Second)
  65. iSpan.End()
  66. }
  67. log.Printf("Done!")
  68. }
  69. func handleErr(err error, message string) {
  70. if err != nil {
  71. log.Fatalf("%s: %v", message, err)
  72. }
  73. }

我得到了:

OTLP部分成功:空消息(0个跨度被拒绝)

并且没有发送任何跟踪... 有什么想法吗?我漏掉了什么?

英文:

I'm running a pod of open telemetry collector that is exposed to port 4318 (running node js demo working perfectly)

but running this basic code sample (which basically just running a simple program after initiating the Tracer and sending spans)

  1. package main
  2. import (
  3. &quot;context&quot;
  4. &quot;fmt&quot;
  5. &quot;log&quot;
  6. &quot;os&quot;
  7. &quot;os/signal&quot;
  8. &quot;time&quot;
  9. &quot;go.opentelemetry.io/otel&quot;
  10. &quot;go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp&quot;
  11. // &quot;go.opentelemetry.io/otel/propagation&quot;
  12. &quot;go.opentelemetry.io/otel/sdk/resource&quot;
  13. sdktrace &quot;go.opentelemetry.io/otel/sdk/trace&quot;
  14. semconv &quot;go.opentelemetry.io/otel/semconv/v1.4.0&quot;
  15. )
  16. func initProvider() func() {
  17. ctx := context.Background()
  18. _, err := resource.New(ctx,
  19. resource.WithAttributes(
  20. semconv.ServiceNameKey.String(&quot;test-service&quot;),
  21. ),
  22. )
  23. handleErr(err, &quot;failed to create resource&quot;)
  24. traceExporter, err := otlptracehttp.New(ctx,
  25. otlptracehttp.WithInsecure(),
  26. otlptracehttp.WithEndpoint(&quot;localhost:4318&quot;),
  27. )
  28. handleErr(err, &quot;failed to create trace exporter&quot;)
  29. bsp := sdktrace.NewBatchSpanProcessor(traceExporter)
  30. tracerProvider := sdktrace.NewTracerProvider(
  31. // sdktrace.WithSampler(sdktrace.AlwaysSample()),
  32. // sdktrace.WithResource(res),
  33. sdktrace.WithSpanProcessor(bsp),
  34. )
  35. otel.SetTracerProvider(tracerProvider)
  36. // otel.SetTextMapPropagator(propagation.TraceContext{})
  37. return func() {
  38. handleErr(tracerProvider.Shutdown(ctx), &quot;failed to shutdown TracerProvider&quot;)
  39. }
  40. }
  41. func initialize() {
  42. traceExp, err := otlptracehttp.New(
  43. context.Background(),
  44. otlptracehttp.WithEndpoint(&quot;127.0.0.1:8082&quot;),
  45. otlptracehttp.WithURLPath(&quot;v1/traces&quot;),
  46. otlptracehttp.WithInsecure(),
  47. )
  48. if err != nil {
  49. fmt.Println(err)
  50. }
  51. bsp := sdktrace.NewBatchSpanProcessor(traceExp)
  52. tracerProvider := sdktrace.NewTracerProvider(
  53. sdktrace.WithSpanProcessor(bsp),
  54. )
  55. otel.SetTracerProvider(tracerProvider)
  56. }
  57. func main() {
  58. log.Printf(&quot;Waiting for connection...&quot;)
  59. ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
  60. defer cancel()
  61. // shutdown := initProvider()
  62. // defer shutdown()
  63. initProvider()
  64. tracer := otel.Tracer(&quot;demo-client-tracer&quot;)
  65. ctx, span := tracer.Start(context.TODO(), &quot;span-name&quot;)
  66. defer span.End()
  67. for i := 0; i &lt; 10; i++ {
  68. _, iSpan := tracer.Start(ctx, fmt.Sprintf(&quot;Sample-%d&quot;, i))
  69. log.Printf(&quot;Doing really hard work (%d / 10)\n&quot;, i+1)
  70. &lt;-time.After(time.Second)
  71. iSpan.End()
  72. }
  73. log.Printf(&quot;Done!&quot;)
  74. }
  75. func handleErr(err error, message string) {
  76. if err != nil {
  77. log.Fatalf(&quot;%s: %v&quot;, message, err)
  78. }
  79. }

and Im getting :

  1. OTLP partial success: empty message (0 spans rejected)

and no traces is being sent...
any ideas?
what am I missing ?

答案1

得分: 1

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

英文:

This was a bug between the OTLP exporter and collector that should have been resolved in the v1.11.2 release. Upgrading to the latest version of the go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp should resolve this.

huangapple
  • 本文由 发表于 2022年11月17日 17:49:09
  • 转载请务必保留本文链接:https://go.coder-hub.com/74473295.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定