【发布时间】:2021-08-05 00:09:37
【问题描述】:
是否可以将 Serilog 与 OpenTelemetry 一起使用?
https://github.com/open-telemetry/opentelemetry-dotnet/blob/main/docs/logs/getting-started/README.md
【问题讨论】:
-
我改用 ILogger。
是否可以将 Serilog 与 OpenTelemetry 一起使用?
https://github.com/open-telemetry/opentelemetry-dotnet/blob/main/docs/logs/getting-started/README.md
【问题讨论】:
如果您在 Docker 或 Kubernetes 中运行应用程序,您可能会考虑的一种方法是将 Serilog 日志记录到控制台(根据 12 factor logging guidelines)。从那里,控制台日志可以被收集器/转发器代理接收,例如 OpenTelemetry collector 代理(或 Fluentd 的 Logstash 等其他代理)并导出到目标解决方案(例如 Splunk 或 Elasticsearch)。收集器/转发器代理接收控制台日志的一些方法包括:
很多像上面提到的收集器/转发器代理都能够转换和丰富日志消息。您可以将日志消息重塑为 here 描述的开放遥测日志数据模型。
实际上,我已经使用过 OpenTelemetry 收集器代理,它进行了一些开箱即用的转换,例如OpenTelemetry 收集器代理通过filelog receiver 收到的“test”日志消息在导出后最终如下所示(也就是说,在通过的过程中没有任何处理/转换):
{
"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 格式记录,并使用类似于 this one 的 Serilog 丰富器使用跟踪和跨度 ID 来丰富日志(免责声明,这是我几年前写的一个插件,当时事情还被称为OpenTracing),您可能会在收集器/转发器代理中进行一些转换,以根据定义的 OTEL 日志数据模型正确填充跟踪和跨度 ID。
如果您不想采用上述方法(对于简单的场景可能过于复杂),您可以进行一些自定义输出格式 - 请参阅 here 以了解 Serilog 中的输出格式,并将日志直接发送到您的下沉……
【讨论】:
也许您正在寻找一种方法来重用您的 Serilog 代码以将数据发送到与 OpenTelemetry 兼容的端点(又名接收器)。 https://www.nuget.org/packages/Serilog.OpenTelemetry/
另一种保持代码不变的方法,只需将导出器添加到#otel。这个线程解释了细节: https://github.com/open-telemetry/opentelemetry-dotnet/issues/1955
【讨论】: