簡體   English   中英

從Docker容器中運行的JVM應用程序將日志發送到graylog的最佳做法是什么?

[英]What's the best practice to send logs to graylog from a JVM application which runs within a docker container?

我正在使用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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM