Docker容器日志的種類以及存儲


Docker 日志

Docker的日志可以分為兩類:

  • stdout標准輸出日志

    stdout就是標准輸出里面的日志, 比如程序運行時輸出在控制台的內容就會寫入標准輸出

    原理就是當在啟動進程的時候,進程之間有一個父子關系,父進程可以拿到子進程的標准輸出

  • 文件日志

    直接寫入磁盤的日志, 例如java使用log4j框架直接將日志落盤(不在控制台輸出)就是典型的文件日志

所有的容器通過Docker Daemon啟動,實際上屬於Docker的一個子進程, 它可以拿到你的容器里面進程的標准輸出,然后拿到標准輸出之后,會通過它自身的一個叫做LogDriver的模塊來處理.

LogDriver就是Docker用來處理容器標准輸出的一個模塊。 Docker支持很多種不同的處理方式,比如你的標准輸出之后,在某一種情況下會把它寫到一個日志里面.

1. 查看日志

可以通過docker logs [containerID]命令查看容器的日志

$ docker logs [OPTIONS] CONTAINER
  Options:
        --details        顯示更多的信息
    -f, --follow         跟蹤實時日志
        --since string   顯示自某個timestamp之后的日志,或相對時間,如42m(即42分鍾)
        --tail string    從日志末尾顯示多少行日志, 默認是all
    -t, --timestamps     顯示時間戳
        --until string   顯示自某個timestamp之前的日志,或相對時間,如42m(即42分鍾)

例子:

查看指定時間后的日志,只顯示最后100行:

$ docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID

查看最近30分鍾的日志:

$ docker logs --since 30m CONTAINER_ID

查看某時間之后的日志:

$ docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID

查看某時間段日志:

$ docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID

2. 日志在哪?

日志一般都會落盤在宿主機的/var/lib/docker文件夾下, 具體的信息可以通過docker inspect命令查看:

$ docker inspect [OPTIONS] CONTAINER

例如:

$ docker inspect -f {{".LogPath"}} 2be

輸出:

/data/docker/containers/2be9b6dc81a557d11d84bc33bf1062462da9b62e59cc9faef9251bdcff26f3ad/2be9b6dc81a557d11d84bc33bf1062462da9b62e59cc9faef9251bdcff26f3ad-json.log

這就是這個容器的日志記錄文件了

日志文件相關信息

日志記錄系統一般都可以對日志文件進行拆分, 比如按日期, 按大小等.在Docker的日志記錄系統下也是可以實現的, 默認情況下一個容器會產生一個日志文件, 沒有大小限制, 不會根據日期拆分, 即從容器啟動到容器銷毀, 日志文件永遠是那一個.

也可以通過一些配置項進行配置, 例如json-file模式:

選項 描述 示例值
max-size 日志文件的最大大小, 默認為-1(無限制) --log-opt max-size=10m
max-file 可以存在的最大日志文件數。如果滾動日志會創建多余的文件,則會刪除最早的文件。僅在max-size設置時有效。一個正整數。默認為1。 --log-opt max-file=3
labels 在啟動Docker守護程序時適用。該守護程序接受的與日志記錄相關的標簽的逗號分隔列表。用於高級日志標簽選項 --log-opt labels=production_status,geo
env 在啟動Docker守護程序時適用。該守護程序接受的與日志相關的環境變量的逗號分隔列表。用於高級日志標簽選項 --log-opt env=os,customer
env-regex 與相似並兼容env。用於匹配與日志記錄相關的環境變量的正則表達式。用於高級日志標簽選項 --log-opt env-regex=^(os|customer).
compress 切換旋轉日志的壓縮。默認值為disabled --log-opt compress=true

3. 配置LogDriver

Docker官方目前支持這些log driver, 默認使用的是json-file模式:

Driver Description
none 丟棄容器輸出
local 日志以自定義格式存儲
json-file 日志存儲格式為json, 默認的logdriver驅動
syslog 日志寫入到指定的syslog地址
journald 日志寫入到指定jounald
gelf 以gelf格式發送日志
fluentd 日志發送到指定的fluentd服務
awslogs 日志發送到指定的Amazon CloudWatch Logs
splunk 日志發送到指定的splunk服務
etwlogs 日志發送到Event Tracing for Windows, 僅支持windows平台
gcplogs 日志發送到Google Cloud日志系統
logentries 日志發送到Rapid7 Logentries

有兩種方法可以修改docker的LogDriver

  • 修改Docker Daemon, 這樣會對所有容器生效, 以syslog為例:

    dockerd --log-driver=syslog --log-opt syslog-address=127.0.0.1:514
    
  • 在容器啟動時加上配置項, 這樣配置只會對當前容器生效:

    docker run --log-driver=syslog --log-opt syslog-address=127.0.0.1:514 nginx:laster
    

除了上述的這些logdriver, 也可以自定義logdriver, 並且通過docker plugin install進行安裝, 詳情可見:

使用日志記錄驅動程序插件


免責聲明!

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



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