docker日志引擎說明


docker原生支持眾多的日志引擎,適用於各種不同的應用場景,本篇文檔對其作一個簡單的說明。

Docker日志引擎說明

docker支持的日志引擎如下:

  • none:關閉docker的回顯日志, docker logs 看不到任何輸出。使用這種方式也就意味着無法查看任何容器輸出的日志

  • json-file:把每個容器的回顯日志打到每個容器的內部, 形式為json 文件。在實際使用中, 有些容器在啟動后有大量的回顯日志, 尤其在程序內部報錯時打出的日志信息尤其巨大, 很可能會因為某幾個容器的json 日志過大而撐爆整個宿主機的磁盤

  • syslog:把所有容器的回顯日志打到系統的syslog中。

    目前harbor私有鏡像倉庫使用docker-compose方式啟動的話,就默認使用的這種方式。將所有容器的日志都集中收集到一個harbor-log的容器中,在執行docker logs的時候會提示"logs" command is supported only for "json-file" and "journald" loggin drivers (got: syslog)

  • journald:把所有容器的回顯日志打到系統的journald服務中,這是推薦的方式。

  • fluentd:把所有容器的回顯日志打到fluentd服務中

  • gelf 把所有容器的回顯日志打到支持 GELF(Graylog Extended Log Format) 格式的服務中, 比如Graylog或Logstash

修改docker日志引擎

  1. 修改docker配置文件/etc/docker/daemon.json如下:
    {
        "log-driver": "journald"
    }
    
  2. 在容器運行時指定其日志引擎:
    docker run --log-driver=journald alpint /bin/sh
    

journald配置說明

journald配置文件說明

# /etc/systemd/jornald.conf示例:

[Journal]
#Storage=auto  存儲為自動模式, 其他模式有無日志模式, 純內存模式和純磁盤模式
#Compress=yes  默認啟動壓縮功能
#Seal=yes   默認加密, 日志文件為二進制文件, 無法 vim或tail 查看
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitIntervalSec=30s
#RateLimitBurst=1000
#SystemMaxUse=  精確設置日志可以占用的最大磁盤空間
#SystemKeepFree=  保證系統剩余的空間大小
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=no
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg

journald 默認配置下, 默認日志最大限制為所在文件系統容量的 10%

默認配置下, journald 的日志存放在 /var/log/journal 下, 如果該目錄在根分區下, 且根分區空間大小為10G, 那么 journald 存放日志最大的大小為1G, 超出1G 后將刪除最早的日志

也可以精確指定占用的空間大小:

SystemMaxUse=50M

journalctl基本用法

  • journalctl 從頭查看所有日志

  • journalctl -b 查看本次開機后的所有系統引導日志

  • journalctl -b -1 顯示上次開機后的系統引導日志, 以此類推

  • journalctl -f 類似於 tail -f或tailf

  • journalctl /usr/bin/dockerd 后加程序的絕對路徑,可以顯示該程序的所有日志信息

  • journalctl -xe systemd 啟動程序失敗時會提示你使用這個命令查看錯誤信息, 其中x 表示在日志輸出中增加一些解釋性的短文本, e表示立即跳轉至日志的尾部

journald注意事項

journald配置中,有兩個非常重要的優化項目:

ForwardToSyslog=yes
ForwardToWall=yes

以上兩個參數默認都是 yes 意味着 journald 收集日志后還會轉發到 syslog 中

由此造成的影響是: journald 雖然可以乖乖的按照上面的配置進行日志的清理, 但是 syslog 卻不在 journald 的控制范圍之內

在日志量很大的情況下,syslog中的日志量也變得巨大,所以我們需要把上面兩個參數的值改為no

重啟journald服務:

systemctl restart systemd-journald.service

參考:https://docs.lvrui.io/2017/02/19/更改docker的日志引擎為-journald/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM