java – 从一个在docker容器中运行的JVM应用程序将日志发送到graylog的最佳实践是什么?

前端之家收集整理的这篇文章主要介绍了java – 从一个在docker容器中运行的JVM应用程序将日志发送到graylog的最佳实践是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

现在我问自己,我可以在gelf log4j2-appender上使用,而是使用一个docker日志驱动程序/插件支持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 appender用于您正在使用的日志框架(例如logstash-gelf),而不是将所有内容记录到stdout并使用Docker的GELF日志记录驱动程序.

使用具有本机Java日志记录框架的正确GELF appender,您可以使用MDC之类的高级功能,使用有价值的结构化信息丰富日志消息,而无需在服务器端接收这些消息后重新解析这些消息.使用Docker GELF日志记录驱动程序,您只能接收每行一行的日志消息,尤其是Java应用程序可能很难处理(想想多行堆栈跟踪).

大多数日志记录框架都支持静态字段,因此您可以“注入”Docker容器的ID.

原文链接:/docker/436569.html

猜你在找的Docker相关文章