.net Jaeger未收到任何OpenTelemetry跟踪

ca1c2owp  于 2023-05-19  发布在  .NET
关注(0)|答案(2)|浏览(170)

我正试着把开放遥测的追踪信息发给耶格我试着把轨迹发送到控制台,它工作正常。但是我把它发给耶格的时候什么都没收到。

builder.Services.AddOpenTelemetryTracing(b =>
{
    b.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("ServiceA"))
        .AddSource("TelemetryDemo")
        .AddHttpClientInstrumentation()
        .AddAspNetCoreInstrumentation()
        .AddOtlpExporter(o =>
        {
            o.Endpoint = new Uri("http://localhost:4317");
            o.ExportProcessorType = ExportProcessorType.Simple;
        })
        .AddConsoleExporter();
});

我正在从Docker Hub运行Jaeger的All-in-One:https://hub.docker.com/r/jaegertracing/all-in-one
这是我正在运行的命令:docker run -d --name jaeger -p 16686:16686 -p 6831:6831/udp -p 4317:4317 -p 55680:55680 jaegertracing/all-in-one
控制台上显示了痕迹,但当我打开耶格的 Jmeter 板时,什么也没有。这是怎么了?
编辑:Figured it out. Jaeger有两个Docker镜像:一个是Otel兼容的,另一个不是。在这个问题中,我使用的是一个不是,所以这就是为什么Otlp出口没有工作。
我已经在https://hub.docker.com/r/jaegertracing/opentelemetry-all-in-one/中使用了OTEL兼容的镜像(注意这个镜像中有“OTEL”的名字)

kcugc4gi

kcugc4gi1#

我相信截至2022年,AIO映像确实支持OTLP。尝试使用下面的命令运行docker容器

docker run -d --name jaeger \
  -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
  -e COLLECTOR_OTLP_ENABLED=true \
  -p 6831:6831/udp \
  -p 6832:6832/udp \
  -p 5778:5778 \
  -p 16686:16686 \
  -p 4317:4317 \
  -p 4318:4318 \
  -p 14250:14250 \
  -p 14268:14268 \
  -p 14269:14269 \
  -p 9411:9411 \
  jaegertracing/all-in-one:<version>

替换为您拥有的任何版本的图像。我试过1.37

wko9yo5t

wko9yo5t2#

更新05/2023

对于.net,你需要这样的东西:

.AddOtlpExporter(otlpOptions =>
{
    otlpOptions.Endpoint = new Uri("http://localhost:4317");
})

更多细节在这里:https://opentelemetry.io/docs/instrumentation/net/exporters/#otlp-endpoint
在你的.NET应用程序中设置了这个设置,你可以启动一个Jaeger All-in-one容器,如下所述:https://www.jaegertracing.io/docs/1.45/getting-started/#all-in-one
或者使用以下Collector配置通过OTel Collector发送跟踪:

receivers:
  otlp:
    protocols:
      grpc:
      http:

exporters:
  otlp:
    endpoint: "jaeger:4317"
    tls:
      insecure: true
  logging:
    loglevel: debug

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: []
      exporters: [logging,otlp]

旧答案

您需要使用JaegerExporter或将跟踪发送到otel-collector,然后从collector发送到Jaeger。
对于.net,你需要这样的东西:

.AddJaegerExporter(o =>
    {
        o.AgentHost = "localhost";
        o.AgentPort = 14250;
    })

确保将Jaeger端口暴露给本地主机。
这是最简单的方法,如果你愿意,你可以在这里停下来。
但是如果您考虑在将来更改后端,那么现在投入一些时间来配置otel-collector可能是一个好主意。
OTel-collector docs
你需要一个像这样的conf.yml(在这种情况下,日志记录是可选的):

receivers:
  otlp:
    protocols:
      grpc:
      http:

exporters:
  jaeger:
    endpoint: "jaeger:14250"
    tls:
      insecure: true
  logging:
    loglevel: debug

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: []
      exporters: [logging,jaeger]

你的收集器Dockerfile应该是这样的:

FROM otel/opentelemetry-collector-contrib:0.48.0
COPY conf.yml .
EXPOSE 1888
EXPOSE 8888
EXPOSE 8889
EXPOSE 13133
EXPOSE 4317
EXPOSE 55670
CMD [ "--config=conf.yml" ]

您可以将跟踪发送到收集器,收集器将接收OTLP并发送到Jaeger。
在第二个场景中,如果将收集器配置为将其端口公开给localhost,则可以继续使用"http://localhost:4317"

相关问题