使用 ILogger (.Net web api) 将日志添加到跟踪中

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

我想使用 ILogger、opentrlemetry 协议和 Jaegercollector 将一些日志添加到我的跟踪中。

这是我的代码:

var serviceName = "some_service_name" + mode.ToString();
var jaegrCollectorUrl = "http://jaeger_collector_url:4317";


builder.Services.AddOpenTelemetry()
                    .ConfigureResource(resource => resource.AddService(serviceName: serviceName))
                    .WithMetrics()
                    .WithTracing(tracing => tracing
                        .AddJaegerExporter(a =>
                        {
                            a.Endpoint = new Uri(jaegrCollectorUrl);
                        })
                        .AddAspNetCoreInstrumentation(opt =>
                        {
                            opt.EnrichWithHttpRequest = (activity, httpRequest) =>
                            {
                                activity.DisplayName = httpRequest.Path.Value;
                            };
                        })
                        .AddHttpClientInstrumentation()
                        .AddEntityFrameworkCoreInstrumentation(options =>
                        {
                            options.EnrichWithIDbCommand = (activity, command) =>
                            {
                                activity.DisplayName = $"EFCore DB Command: ({command.CommandType})";
                                activity.SetTag("command_text", command.CommandText);
                                activity.AddTag("method_name", null);
                            };
                        })
                        .AddOtlpExporter(otlpOptions =>
                        {
                            otlpOptions.Endpoint = new Uri(jaegrCollectorUrl);
                            otlpOptions.Protocol = OtlpExportProtocol.Grpc;
                        }));

builder.Logging.ClearProviders();
Log.Logger = new LoggerConfiguration()
               .MinimumLevel.Information()
               .WriteTo.Console()
               .WriteTo.OpenTelemetry(a =>
               {
                   a.Endpoint = jaegrCollectorUrl;
                   a.Protocol = OtlpProtocol.Grpc;
               })
               .CreateLogger();
builder.Logging.AddSerilog(Log.Logger);

但是当我使用时:

 activity = ActivitySource.StartActivity("Welcome");
 var event1 = new ActivityEvent("log 1", DateTimeOffset.Now, []);
 Activity.Current.AddEvent(event1);

我在 jaeger-ui 中看到我的日志

但是当我使用

logger.LogInformation("Starting work. 2: ");

我没有看到任何日志

我有什么地方说错了吗?

我使用serilog和microsoft logger,但我无法处理问题

.net serilog jaeger ilogger
2个回答
2
投票

当您使用

ActivityEvent
时,事件是活动/跨度文档的一部分,该文档通常保存在文档数据库中。 Jaeger Collector 无法获取 OTEL 日志信号并将其映射到
ActivityEvent
/
SpanEvent

如果 OpenTelemetry Collector 中有一个

log2spanevent-connector
,其中日志条目被转换为
SpanEvent
,然后
Jaeger Collector
可以添加到持久化范围中,那就太好了。

此更改需要这样的连接器并对 Jaeger Collector 进行更改,并且不太可能很快发生。


0
投票

参考这个答案

  • 安装 OpenTelemetry.Extensions

添加

AttachLogsToActivityEvent

builder.Logging.AddOpenTelemetry(options =>
{
  options.SetResourceBuilder(resource);
  options.IncludeFormattedMessage = true;
  options.IncludeScopes = true;
  options.ParseStateValues = true;
  options.AttachLogsToActivityEvent();
});
© www.soinside.com 2019 - 2024. All rights reserved.