我想使用 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,但我无法处理问题
当您使用
ActivityEvent
时,事件是活动/跨度文档的一部分,该文档通常保存在文档数据库中。 Jaeger Collector 无法获取 OTEL 日志信号并将其映射到 ActivityEvent
/SpanEvent
。
如果 OpenTelemetry Collector 中有一个
log2spanevent-connector
,其中日志条目被转换为 SpanEvent
,然后 Jaeger Collector
可以添加到持久化范围中,那就太好了。
此更改需要这样的连接器并对 Jaeger Collector 进行更改,并且不太可能很快发生。
参考这个答案
添加
AttachLogsToActivityEvent
builder.Logging.AddOpenTelemetry(options =>
{
options.SetResourceBuilder(resource);
options.IncludeFormattedMessage = true;
options.IncludeScopes = true;
options.ParseStateValues = true;
options.AttachLogsToActivityEvent();
});