whi*_*exx 8 java logging jvm docker 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的优缺点是什么?
我建议为您正在使用的日志记录框架(例如logstash-gelf)使用现有的GELF附加程序,而不是将所有内容都记录到stdout并使用Docker的GELF日志记录驱动程序。
通过将适当的GELF附加程序与本机Java日志记录框架一起使用,可以使您使用MDC等高级功能,以用有价值的结构化信息丰富日志消息,而不必在服务器端接收到这些消息后就重新解析这些消息。使用Docker GELF日志记录驱动程序,您只会逐行接收日志消息,尤其是对于Java应用程序而言,这可能令人头疼(想想多行堆栈跟踪)。
大多数日志记录框架都支持静态字段,因此您可以例如“注入” Docker容器的ID。
| 归档时间: |
|
| 查看次数: |
4554 次 |
| 最近记录: |