如何在不预先格式化的情况下将日志从 docker 容器转发到 Graylog 服务器?
How to forward logs from docker container to Graylog server without pre-formatting?
我有一个 Docker 容器,它通过 udp 将其日志发送到 Graylog。
以前我只是用它来输出原始消息,但现在我想出了一个以 GELF 格式记录日志的解决方案。
但是,Docker 只是将其放入“消息”字段(来自 Graylog Web 界面的屏幕):
或纯文本:
{
"version":"1.1",
"host":"1eefd38079fa",
"short_message":"Content root path: /app",
"full_message":"Content root path: /app",
"timestamp":1633754884.93817,
"level":6,
"_contentRoot":"/app",
"_LoggerName":"Microsoft.Hosting.Lifetime",
"_threadid":"1",
"_date":"09-10-2021 04:48:04,938",
"_level":"INFO",
"_callsite":"Microsoft.Extensions.Hosting.Internal.ConsoleLifetime.OnApplicationStarted"
}
GELF-driver 在docker-compose 文件中配置:
logging:
driver: "gelf"
options:
gelf-address: "udp://sample-ip:port"
如何让Docker只转发这些已经格式化的日志?
有什么方法可以处理这些日志并将它们作为自定义字段附加到 docker 日志中吗?
完美的解决方案是以某种方式启用 gelf 日志驱动程序,但禁用预处理/格式化,因为日志已经是 GELF。
PS。对于日志,我使用的是 NLog 库、C# .NET 5 及其 NuGet 包 https://github.com/farzadpanahi/NLog.GelfLayout
就我而言,根本不需要使用 NLog。它只是一个没有人试图深入研究的日志框架。
因此,更好的选择是为 Microsoft.Extensions.Logging 使用 GELF 记录器提供程序:Gelf.Extensions.Logging - https://github.com/mattwcole/gelf-extensions-logging
如果启用了 docker 容器,请不要忘记禁用 GELF。
它支持附加字段、格式化字符串的参数化(大括号 {} 中的参数成为 graylog 字段)并且可以通过 appsettings.json
轻松配置
有些人可能认为这不是一个答案,因为我使用的是 NLog,但对我来说 -- 这是一种发送自定义日志的好方法,而且没有太多麻烦。至于NLog,我想不出解决方案。
我有一个 Docker 容器,它通过 udp 将其日志发送到 Graylog。
以前我只是用它来输出原始消息,但现在我想出了一个以 GELF 格式记录日志的解决方案。
但是,Docker 只是将其放入“消息”字段(来自 Graylog Web 界面的屏幕):
或纯文本:
{
"version":"1.1",
"host":"1eefd38079fa",
"short_message":"Content root path: /app",
"full_message":"Content root path: /app",
"timestamp":1633754884.93817,
"level":6,
"_contentRoot":"/app",
"_LoggerName":"Microsoft.Hosting.Lifetime",
"_threadid":"1",
"_date":"09-10-2021 04:48:04,938",
"_level":"INFO",
"_callsite":"Microsoft.Extensions.Hosting.Internal.ConsoleLifetime.OnApplicationStarted"
}
GELF-driver 在docker-compose 文件中配置:
logging:
driver: "gelf"
options:
gelf-address: "udp://sample-ip:port"
如何让Docker只转发这些已经格式化的日志? 有什么方法可以处理这些日志并将它们作为自定义字段附加到 docker 日志中吗? 完美的解决方案是以某种方式启用 gelf 日志驱动程序,但禁用预处理/格式化,因为日志已经是 GELF。
PS。对于日志,我使用的是 NLog 库、C# .NET 5 及其 NuGet 包 https://github.com/farzadpanahi/NLog.GelfLayout
就我而言,根本不需要使用 NLog。它只是一个没有人试图深入研究的日志框架。
因此,更好的选择是为 Microsoft.Extensions.Logging 使用 GELF 记录器提供程序:Gelf.Extensions.Logging - https://github.com/mattwcole/gelf-extensions-logging 如果启用了 docker 容器,请不要忘记禁用 GELF。
它支持附加字段、格式化字符串的参数化(大括号 {} 中的参数成为 graylog 字段)并且可以通过 appsettings.json
轻松配置有些人可能认为这不是一个答案,因为我使用的是 NLog,但对我来说 -- 这是一种发送自定义日志的好方法,而且没有太多麻烦。至于NLog,我想不出解决方案。