2016-05-12 73 views
6

我使用graylog作爲中央日誌記錄服務器,我使用gelf log4j2-appender將日誌消息發送給graylog。這工作正常。現在我創建了我的應用程序的碼頭圖像,並且能夠將我的軟件作爲碼頭容器運行。從Docker容器中運行的JVM應用程序發送日誌到graylog的最佳實踐是什麼?

使用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日誌插件會將整個字符串消息發送到graylog,並且graylog需要從該字符串中提取元信息(所以我需要在日誌消息中提供此元數據,例如log_level)。這可能會導致更多的資源消耗在graylog端,也不可能配置泊塢窗只發送錯誤消息到graylog。這導致更多的網絡流量。使用log4j2 gelf-appender,我可以在日誌消息中提供一些額外的元數據,而不會將其包含在主日誌消息中,並且在graylog一側不需要提取。也可以配置哪些消息應該通過log_level發送給graylog。還是我錯了?什麼是最好的解決方案,或者每種向graylog發送日誌的方式有哪些優缺點?

回答

4

我建議使用現有的GELF appender作爲您正在使用的日誌框架(例如logstash-gelf)而不是將所有內容記錄到標準輸出並使用Docker的GELF日誌記錄驅動程序。

使用適當的GELF appender與本機Java日誌記錄框架相結合,可以使用高級功能(如MDC)來豐富具有有價值結構化信息的日誌消息,而無需在服務器端接收這些消息後重新解析這些消息。使用Docker GELF日誌記錄驅動程序,您只能接收每行一行的日誌消息,尤其是使用Java應用程序的日誌消息可能會令人頭疼(想想多行堆棧跟蹤)。

大多數日誌記錄框架都支持靜態字段,因此您可以「注入」Docker容器的ID。

相關問題