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
<PackageReference Include="Serilog.Sinks.OpenTelemetry" Version="4.0.0" />
paket add Serilog.Sinks.OpenTelemetry --version 4.0.0
#r "nuget: Serilog.Sinks.OpenTelemetry, 4.0.0"
// 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
此 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 端点。
更完整的配置将指定 Endpoint
、Protocol
和其他参数,例如 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:4317
和 OtlpProtocol.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哈希值。
通过节点发送跟踪
承载类型为DateTime
的SpanStartTimestamp
属性的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 已计算。 |
-
.NETFramework 4.6.2
- Google.Protobuf (>= 3.26.1)
- Grpc.Net.Client >= 2.62.0)
- Serilog >= 4.0.0)
-
.NETFramework 4.7.1
- Google.Protobuf (>= 3.26.1)
- Grpc.Net.Client >= 2.62.0)
- Serilog >= 4.0.0)
-
.NETStandard 2.0
- Google.Protobuf (>= 3.26.1)
- Grpc.Net.Client >= 2.62.0)
- Serilog >= 4.0.0)
-
net6.0
- Google.Protobuf (>= 3.26.1)
- Grpc.Net.Client >= 2.62.0)
- Serilog >= 4.0.0)
-
net8.0
- Google.Protobuf (>= 3.26.1)
- Grpc.Net.Client >= 2.62.0)
- Serilog >= 4.0.0)
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 |