7

是否可以将 Serilog 与 OpenTelemetry 一起使用?

https://github.com/open-telemetry/opentelemetry-dotnet/blob/main/docs/logs/getting-started/README.md

4

2 回答 2

1

如果您在 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 中格式化输出,并将日志直接发送到您的接收器...

于 2021-12-15T14:02:43.557 回答
0

也许您可能正在寻找一种重用 Serilog 代码以将数据发送到 OpenTelemetry 兼容端点(又名接收器)的方法。 https://www.nuget.org/packages/Serilog.OpenTelemetry/

另一种保持代码不变的方法,只需将导出器添加到#otel。这个线程解释了细节: https ://github.com/open-telemetry/opentelemetry-dotnet/issues/1955

于 2021-11-13T16:57:03.190 回答