【问题标题】:Is it possible to use Serilog with OpenTelemetry?是否可以将 Serilog 与 OpenTelemetry 一起使用?
【发布时间】:2021-08-05 00:09:37
【问题描述】:

【问题讨论】:

  • 我改用 ILogger。

标签: serilog open-telemetry


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-12
      • 2016-04-01
      • 2011-01-20
      • 2018-08-11
      • 2019-03-18
      • 2014-03-15
      • 2021-03-31
      • 2020-12-22
      相关资源
      最近更新 更多