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

问题描述 投票:0回答:3

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

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

serilog open-telemetry
3个回答
3
投票

如果您在 Docker 或 Kubernetes 中运行应用程序,您可能会考虑的一种方法是将 Serilog 日志记录到控制台(根据 12 因素日志记录指南)。从那里,控制台日志可以被收集器/转发器代理接收,例如 OpenTelemetry 收集器 代理(或其他类似 Fluentd 的 Logstash),并导出到目标解决方案(例如 Splunk 或 Elasticsearch)。收集器/转发器代理接收控制台日志的一些方式包括:

很多像上面提到的收集器/转发器代理都有能力在他们的方式中转换和丰富日志消息,例如您可以将日志消息重塑为 here.

中描述的 Open Telemetry 日志数据模型

实际上我已经玩过 OpenTelemetry 收集器代理,它做了一些开箱即用的转换,例如OpenTelemetry 收集器代理通过 filelog 接收器 接收到的“测试”日志消息在导出后最终如下所示(即,在途中没有任何处理/转换):

{
  "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 的 Serilog enricher 使用跟踪和跨度 ID 来丰富日志(免责声明这是我几年前写的一个插件,当时它仍然被称为 OpenTracing ),您可能会在收集器/转发器代理中进行一些转换,以根据定义的 OTEL 日志数据模型正确填充跟踪和跨度 ID。


如果您不想使用上面概述的方法(对于简单场景来说这可能过于复杂),您可以进行一些自定义输出格式化 - 请参阅此处以了解 Serilog 中的格式化输出,并将日志直接发送到您的接收器。 ..


0
投票

是的!现在可以使用 Serilog.Sinks.OpenTelemetry:

// dotnet add package serilog.sinks.opentelemetry --prerelease

Log.Logger = new LoggerConfiguration()
    .WriteTo.OpenTelemetry(endpoint: "http://127.0.0.1:4317")
    .CreateLogger();

-1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.