gpt4 book ai didi

java - 从在 docker 容器中运行的 JVM 应用程序将日志发送到 graylog 的最佳做法是什么?

转载 作者:IT老高 更新时间:2023-10-28 21:22:54 24 4
gpt4 key购买 nike

我使用 graylog 作为中央日志服务器,我使用 gelf log4j2-appender 将日志消息发送到 graylog。这工作正常。现在我创建了我的应用程序的 docker 镜像,我可以将我的软件作为 docker 容器运行。

我还使用 docker 登录到 stdout (console-appender) 以将应用程序日志输入到 docker (docker logs {containerId})。

现在我问自己是否可以使用 gelf log4j2-appender 并使用 docker log-driver/plugin 代替 gelf。 (见 https://docs.docker.com/engine/admin/logging/overview/)

这里的最佳做法是什么?我认为使用 docker log 插件会将整个字符串消息发送到 graylog,而 graylog 需要从该字符串中提取元信息(所以我需要提供这个日志消息中的元数据,例如 log_level)。这可能会导致 graylog 端消耗更多资源,并且也无法将 docker 配置为仅向 graylog 发送错误消息。这会导致更多的网络流量。使用 log4j2 gelf-appender,我可以在日志消息之外提供一些元数据,而无需将其包含在主日志消息中,并且在 graylog 端不需要提取。也可以通过 log_level 配置应该将哪些消息发送到 graylog。还是我错了?最好的解决方案是什么,或者将日志发送到 graylog 的每种方式的优缺点是什么?

最佳答案

我建议对您正在使用的日志框架使用现有的 GELF 附加程序(例如 logstash-gelf),而不是将所有内容都记录到标准输出并使用 Docker 的 GELF 日志驱动程序。

使用适当的 GELF appender 和原生 Java 日志框架使您能够使用高级功能,如 MDC用有值(value)的结构化信息丰富您的日志消息,而无需在服务器端接收到这些消息后重新解析这些消息。使用 Docker GELF 日志记录驱动程序,您只能逐行接收日志消息,尤其是在 Java 应用程序中处理起来可能会令人头疼(想想多行堆栈跟踪)。

大多数日志框架都支持静态字段,因此您可以“注入(inject)”例如 Docker 容器的 ID。

关于java - 从在 docker 容器中运行的 JVM 应用程序将日志发送到 graylog 的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37187081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com