Serilog.Sinks.OpenTelemetry 4.0.0

前缀已保留
dotnet add package Serilog.Sinks.OpenTelemetry --version 4.0.0                
NuGet\Install-Package Serilog.Sinks.OpenTelemetry -Version 4.0.0                
建议在此命令应使用在 Visual Studio 的包管理器控制台内,因为它使用了 NuGet 模块的 Install-Package 版本。
<PackageReference Include="Serilog.Sinks.OpenTelemetry" Version="4.0.0" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件以引用软件包。
paket add Serilog.Sinks.OpenTelemetry --version 4.0.0                
#r "nuget: Serilog.Sinks.OpenTelemetry, 4.0.0"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将此内容复制到交互工具或脚本的源代码中以引用软件包。
// Install Serilog.Sinks.OpenTelemetry as a Cake Addin
#addin nuget:?package=Serilog.Sinks.OpenTelemetry&version=4.0.0

// Install Serilog.Sinks.OpenTelemetry as a Cake Tool
#tool nuget:?package=Serilog.Sinks.OpenTelemetry&version=4.0.0                

Serilog.Sinks.OpenTelemetry 构建状态 NuGet 版本

此 Serilog 沉淀将 Serilog 事件转换为 OpenTelemetry 的 LogRecord,并将它们发送到 OTLP(gRPC 或 HTTP)端点。

沉淀旨在完全符合 OpenTelemetry 日志协议。它不依赖 OpenTelemetry SDK 或 .NET API。

OpenTelemetry 支持具有标量值、数组和映射的属性。Serilog 同样如此。因此,沉淀在 Serilog 属性和 OpenTelemetry 属性之间进行一对一映射。默认情况下,不对属性进行平坦化、重命名或其他修改。

入门

要使用 OpenTelemetry 沉淀,首先安装 NuGet 包

dotnet add package Serilog.Sinks.OpenTelemetry

然后使用 WriteTo.OpenTelemetry() 启用沉淀

Log.Logger = new LoggerConfiguration()
    .WriteTo.OpenTelemetry()
    .CreateLogger();

使用 Log.Information(...) 和类似方法生成日志,将转换后的日志发送到本地 OpenTelemetry OTLP 端点。

更完整的配置将指定 EndpointProtocol 和其他参数,例如 ResourceAttributes,如下面的示例所示。

配置

此沉淀支持两种配置样式:内联和选项。内联配置适用于简单、本地日志设置,如下所示

Log.Logger = new LoggerConfiguration()
    .WriteTo.OpenTelemetry(
        endpoint: "http://127.0.0.1:4318/v1/logs",
        protocol: OtlpProtocol.HttpProtobuf)
    .CreateLogger();

更复杂的使用案例需要使用选项样式配置,如下所示

Log.Logger = new LoggerConfiguration()
    .WriteTo.OpenTelemetry(options =>
    {
        options.Endpoint = "http://127.0.0.1:4318/v1/logs";
        options.Protocol = OtlpProtocol.HttpProtobuf;
    })
    .CreateLogger();

这支持沉淀的完整配置选项集。请参阅 OpenTelemetrySinkOptions.cs 文件以获取完全的选项集。以下部分讨论了一些更重要的参数。

端点和协议

默认端点和协议是 https://127.0.0.1:4317OtlpProtocol.Grpc

在大多数生产场景中,您需要设置端点和协议以适应您的部署环境。为此,请向 WriteTo.OpenTelemetry() 调用添加 endpoint 参数。

您还可能想设置协议。支持的值包括

  • OtlpProtocol.Grpc:通过 gRPC 连接发送 OpenTelemetry 日志的 protobuf 表示形式(默认)。
  • OtlpProtocol.HttpProtobuf:通过 HTTP 连接发送 OpenTelemetry 日志的 protobuf 表示形式。

资源属性

OpenTelemetry 日志可能包含一个“资源”,该资源提供了与日志关联的实体(通常是服务或库)的元数据。这些可能包含“资源属性”,并为主配置文件中的所有日志发射。

这些资源属性可以在配置日志时作为 Dictionary<string, Object> 提供。OpenTelemetry 允 许具有丰富值的资源属性;然而,此实现 支持原语值的资源属性。

⚠️ 具有非原语值的资源属性将被静默忽略。

以下示例显示了如何在配置日志时指定资源属性。

Log.Logger = new LoggerConfiguration()
    .WriteTo.OpenTelemetry(options =>
    {
        options.Endpoint = "http://127.0.0.1:4317";
        options.ResourceAttributes = new Dictionary<string, object>
        {
            ["service.name"] = "test-logging-service",
            ["index"] = 10,
            ["flag"] = true,
            ["value"] = 3.14
        };
    })
    .CreateLogger();

环境变量覆盖

沉淀还识别 OpenTelemetry 文档中描述的 OTEL_OTLP_EXPORTER_* 环境变量选择集,并将覆盖程序配置在运行时存在的任何环境变量值。

要关闭此行为,请向 WriteTo.OpenTelemetry() 配置方法传递 ignoreEnvironment: true

Serilog LogEvent 到 OpenTelemetry 日志记录映射

以下表格提供了 Serilog 日志事件和 OpenTelemetry 日志记录之间的映射。

Serilog LogEvent OpenTelemetry LogRecord 注释
Exception.GetType().ToString() Attributes["exception.type"]
Exception.Message Attributes["exception.message"] 如果为空则忽略
Exception.StackTrace Attributes[ "exception.stacktrace"] Value of ex.ToString()
Level SeverityNumber Serilog 级别映射到相应的 OpenTelemetry 严重性
Level.ToString() SeverityText
消息 正文 可以通过节点配置提供特定于文化的格式化
消息模板 属性[ "message_template.text"] 需要 IncludedData. MessageTemplateText (默认启用)
MessageTemplate (MD5) 属性[ "message_template.hash.md5"] 需要 IncludedData. MessageTemplateMD5 HashAttribute
属性 属性 每个属性都映射到一个属性,保持名称;值的结构保持不变
SpanId (Activity.Current) SpanId 需要 IncludedData.SpanId (默认启用)
时间戳 TimeUnixNano .NET提供100纳秒的精度
TraceId (Activity.Current) TraceId 需要 IncludedData.TraceId (默认启用)

配置包含的数据

此节点支持通过IncludedData枚举标志配置如何将常见OpenTelemetry字段从Serilog LogEvent和.NET Activity上下文填充

Log.Logger = new LoggerConfiguration()
    .WriteTo.OpenTelemetry(options =>
    {
        options.Endpoint = "http://127.0.0.1:4317";
        options.IncludedData: IncludedData.MessageTemplate |
                              IncludedData.TraceId | IncludedData.SpanId;
    })
    .CreateLogger();

示例显示了默认值;也可以使用IncludedData.MessageTemplateMD5HashAttribute来添加消息模板的MD5哈希值。

通过节点发送跟踪

承载类型为DateTimeSpanStartTimestamp属性的Serilog LogEvents将被此节点识别为跨度,并使用适当的OpenTelemetry端点和架构发送。节点的识别属性与SerilogTracing发出的属性相匹配。

除了对日志条目的字段进行映射之外,表示跟踪跨度的事件还可以携带以下列出的特殊属性。

Serilog LogEvent OpenTelemetry Span 注释
消息模板 名称
Properties["ParentSpanId"] ParentSpanId 值必须为类型ActivitySpanId
Properties["SpanKind"] Kind 值必须为类型ActivityKind
Properties["SpanStartTimestamp"] StartTimeUnixNano 值必须为类型DateTime;.NET提供100纳秒的精度
时间戳 EndTimeUnixNano .NET提供100纳秒的精度

示例

example/Example子目录中包含了一个将日志记录到本地OpenTelemetry收集器的示例应用程序。在该目录下的README中可以看到如何运行示例的说明。

版权所有 © Serilog 贡献者 - 根据Apache License, Version 2.0提供。

产品 兼容和额外的计算目标框架版本。
.NET net5.0 已计算。 net5.0-windows 已计算。 net6.0 兼容。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 兼容。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
.NET Core netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET Standard netstandard2.0 兼容。 netstandard2.1 已计算。
.NET Framework net461 已计算。 net462 兼容。 net463 已计算。 net47 已计算。 net471 兼容。 net472 已计算。 net48 已计算。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容的目标框架
包含的目标框架(在包中)
了解有关 目标框架.NET Standard 的更多信息。

NuGet 包 (22)

显示依赖 Serilog.Sinks.OpenTelemetry 的前 5 个 NuGet 包

下载
Relativity.Transfer.SDK

Relativity Transfer SDK 允许在 Relativity 环境中执行文件的高吞吐量传输。

PegasusLoggingService

包描述

SerilogTracing.Sinks.OpenTelemetry

将日志事件和跟踪发送到 OTLP(gRPC 或 HTTP)端点。此包已废弃;请改用 Serilog.Sinks.OpenTelemetry v4.x 或更高版本。

Fluxera.Extensions.Hosting.Modules.Serilog

一个启用 Serilog 日志记录的模块。

Newguys.Telemetry

包描述

GitHub 仓库 (1)

显示依赖 Serilog.Sinks.OpenTelemetry 的前 1 个流行的 GitHub 仓库

仓库 星星
mehdihadeli/vertical-slice-api-template
基于 .Net 8、垂直切片架构、CQRS、Minimal APIs、API 版本和 Swagger 的 asp.net core 模板。
版本 下载 最后更新
4.0.0 30,647 7/28/2024
4.0.0-dev-00325 456 7/26/2024
4.0.0-dev-00322 262 7/23/2024
4.0.0-dev-00317 775 7/16/2024
4.0.0-dev-00315 288 7/12/2024
4.0.0-dev-00313 1,448 6/25/2024
3.0.1-dev-00309 80 6/25/2024
3.0.0 185,296 6/6/2024
3.0.0-dev-00300 90 6/6/2024
3.0.0-dev-00298 14,334 5/8/2024
2.0.0 164,202 5/7/2024
2.0.0-dev-00289 108 5/7/2024
2.0.0-dev-00284 111 5/7/2024
2.0.0-dev-00282 118,681 3/18/2024
2.0.0-dev-00270 18,811 1/4/2024
2.0.0-dev-00261 814 1/2/2024
2.0.0-dev-00259 1,803 12/7/2023
1.2.0 1,018,847 11/15/2023
1.2.0-dev-00255 368 11/15/2023
1.2.0-dev-00253 468 11/9/2023
1.2.0-dev-00247 6,224 10/11/2023
1.2.0-dev-00243 487 10/3/2023
1.1.0 272,303 9/28/2023
1.1.0-dev-00239 449 9/28/2023
1.1.0-dev-00236 846 9/18/2023
1.0.3-dev-00230 4,991 8/24/2023
1.0.2 269,428 7/11/2023
1.0.2-dev-00227 609 7/10/2023
1.0.1 40,427 7/7/2023
1.0.1-dev-00223 595 7/7/2023
1.0.1-dev-00222 596 7/7/2023
1.0.1-dev-00218 5,613 6/13/2023
1.0.0 197,790 6/1/2023
1.0.0-dev-00214 1,525 5/30/2023
1.0.0-dev-00212 1,135 5/29/2023
1.0.0-dev-00208 8,038 5/26/2023
1.0.0-dev-00204 7,090 5/18/2023
1.0.0-dev-00202 1,580 5/17/2023
1.0.0-dev-00200 613 5/17/2023
1.0.0-dev-00194 814 5/15/2023
1.0.0-dev-00192 594 5/15/2023
1.0.0-dev-00188 2,414 5/5/2023
1.0.0-dev-00182 76 5/5/2023
1.0.0-dev-00178 508 5/4/2023
1.0.0-dev-00175 1,163 5/3/2023
1.0.0-dev-00173 1,744 5/2/2023
1.0.0-dev-00166 2,125 5/1/2023
1.0.0-dev-00161 90 4/30/2023
1.0.0-dev-00152 131 4/29/2023
1.0.0-dev-00151 405 4/29/2023
1.0.0-dev-00148 88 4/29/2023
1.0.0-dev-00143 3,939 4/24/2023
1.0.0-dev-00142 86 4/24/2023
1.0.0-dev-00141 90 4/24/2023
1.0.0-dev-00129 584 4/19/2023
1.0.0-dev-00128 114 4/19/2023
1.0.0-dev-00121 614 4/14/2023
1.0.0-dev-00120 237 4/14/2023
1.0.0-dev-00117 231 4/12/2023
1.0.0-dev-00113 46,978 3/14/2023
1.0.0-dev-00098 34,450 2/12/2023
1.0.0-dev-00091 116 2/12/2023
1.0.0-dev-00080 112 2/10/2023
0.5.0-dev-00078 1,372 2/9/2023
0.4.0-dev-00073 23,791 2/3/2023
0.2.0-dev-00063 7,284 1/23/2023
0.2.0-dev-00059 210 1/10/2023
0.1.0-dev-00048 103 1/10/2023
0.0.4-dev-00039 30,551 1/9/2023
0.0.3-dev-00036 108 1/9/2023
0.0.2-dev-00027 115 1/7/2023
0.0.1-dev-00018 110 1/4/2023
0.0.1-dev-00015 107 1/3/2023
0.0.1-dev-00013 108 1/3/2023