是否可以将 Serilog 与 OpenTelemetry 一起使用?
https://github.com/open-telemetry/opentelemetry-dotnet/blob/main/docs/logs/getting-started/README.md
是否可以将 Serilog 与 OpenTelemetry 一起使用?
https://github.com/open-telemetry/opentelemetry-dotnet/blob/main/docs/logs/getting-started/README.md
如果您在 Docker 或 Kubernetes 中运行应用程序,您可能会考虑的一种方法是将 Serilog 日志记录到控制台(根据12 因素日志记录指南)。从那里,控制台日志可以被收集器/转发器代理接收,例如OpenTelemetry 收集器代理(或 Fluentd 的 Logstash 等其他代理),并导出到目标解决方案(例如 Splunk 或 Elasticsearch)。收集器/转发器代理接收控制台日志的一些方法包括:
很多像上面提到的收集器/转发器代理都能够转换和丰富日志消息,例如,您可以将日志消息重塑为此处描述的开放遥测日志数据模型。
实际上,我已经使用过 OpenTelemetry 收集器代理,它进行了一些开箱即用的转换,例如 OpenTelemetry 收集器代理通过文件日志接收器接收到的“测试”日志消息在导出后最终看起来如下所示(即是,在通过的过程中没有任何处理/转换):
{
"time_unix_nano": 1637538007545231018,
"body": {
"Value": {
"string_value": "test"
}
},
"attributes": [
{
"key": "file.name",
"value": {
"Value": {
"string_value": "filename.log"
}
}
}
],
"trace_id": "",
"span_id": ""
}
我想如果你要在 Serilog 中以 JSON 格式记录,并使用类似于这个的 Serilog 丰富器使用跟踪和跨度 ID 来丰富日志(免责声明,这是我几年前写的一个插件,当时事情仍然被称为 OpenTracing),你可能会在收集器/转发器代理中进行一些转换,以根据定义的 OTEL 日志数据模型正确填充跟踪和跨度 ID。
如果您不想执行上述方法(对于简单的场景可能过于复杂),您可以进行一些自定义输出格式化 - 请参阅此处以在 Serilog 中格式化输出,并将日志直接发送到您的接收器...
也许您可能正在寻找一种重用 Serilog 代码以将数据发送到 OpenTelemetry 兼容端点(又名接收器)的方法。 https://www.nuget.org/packages/Serilog.OpenTelemetry/
另一种保持代码不变的方法,只需将导出器添加到#otel。这个线程解释了细节: https ://github.com/open-telemetry/opentelemetry-dotnet/issues/1955