若是時光能夠倒流,現實世界的每一步均可以分解到最小,記錄下來,就是日誌。萬物即日誌。nginx
面對歷史,審視日誌,能夠選擇忘卻,也能夠選擇銘記;經歷過的,能夠選擇珍藏,一樣也可讓它塵封。docker
Docker 容器又未嘗不是?日誌就像一根時間軸,你在或者不在,他都在那。有人對其善意,有人卻對其隨意。如若不信,能夠回憶,本身是否善待 Docker 容器的日誌json
傳統應用的日誌vim
Docker 時代的日誌api
全部的容器經過Docker Daemon啓動,實際上屬於Docker的一個子進程, 它能夠拿到你的容器裏面進程的標準輸出,而後拿到標準輸出以後,會經過它自身的一個叫作LogDriver的模塊來處理,LogDriver就是Docker用來處理容器標準輸出的一個模塊。 Docker支持不少種不一樣的處理方式,好比你的標準輸出以後,在某一種狀況下會把它寫到一個日誌裏面。編輯器
Docker日誌如何使用微服務
項目中使用log4j等工具寫入到容器中某個目錄,而後經過啓動啓動時候去掛載到主機目錄,這是一種常見的使用手段(本文不探討這種方式)工具
項目中全部日誌stdout標準輸出,此時咱們利用Docker的日誌系統去收集日誌學習
能夠經過docker logs containerID
命令查看容器的日誌ui
$ docker logs [OPTIONS] CONTAINER
Options:
--details 顯示更多的信息
-f, --follow 跟蹤實時日誌
--since string 顯示自某個timestamp以後的日誌,或相對時間,如42m(即42分鐘)
--tail string 從日誌末尾顯示多少行日誌, 默認是all
-t, --timestamps 顯示時間戳
--until string 顯示自某個timestamp以前的日誌,或相對時間,如42m(即42分鐘)
下列爲Docker經常使用的一些日誌命令:
$ docker logs -f -t --since="2021-04-01" --tail=10 CONTAINER_ID
$ docker logs --since 30m CONTAINER_ID
$ docker logs -t --since="2021-04-01T13:23:37" CONTAINER_ID
$ docker logs -t --since="2021-04-01T13:23:37" --until "2021-04-01T16:23:37" CONTAINER_ID
Dcoker默認的存儲目錄在 /var/lib/docker下,咱們能夠經過修改命令修改存儲目錄:
vim /etc/docker/daemon.json
#修改到/opt目錄下
{
"data-root": "/opt/docker"
}
查看某個容器的日誌目錄在哪裏:
$ docker inspect -f {{".LogPath"}} CONTAINER_ID
/var/lib/docker/containers/2be9b6dc81a557d11d84bc33bf1062462da9b62e59cc9faef9251bdcff26f3ad/2be9b6dc81a557d11d84bc33bf1062462da9b62e59cc9faef9251bdcff26f3ad-json.log
/var/lib/docker/containers: 默認容器存儲地址 2be9b6dc81a557d11d84bc33bf1062462da9b62e59cc9faef9251bdcff26f3ad:容器id 2be9b6dc81a557d11d84bc33bf1062462da9b62e59cc9faef9251bdcff26f3ad-json.log:容器的日誌文件,格式爲默認的json-file
選項 | 描述 |
---|---|
none | 不使用日誌 |
local | 自定義日誌驅動 |
json-file | 默認json存儲的日誌 |
syslog | 日誌寫入到指定的syslog地址 |
journald | 日誌寫入到指定jounald |
fluentd | 日誌寫入到指定fluentd服務 |
awslogs | 日誌發送到指定的Amazon CloudWatch Logs |
splunk | 日誌發送到指定的splunk服務 |
gcplogs | 日誌發送到Google Cloud日誌系統 |
logentries | 日誌發送到Rapid7 Logentries |
如何使用驅動?
修改Docker Daemon, 這樣會對全部容器生效, fluentd:
dockerd --log-driver=fluentd --log-opt fluentd-address=192.168.0.133:24224
在容器啓動時加上配置項, 這樣配置只會對當前容器生效:
docker run --log-driver=fluentd --log-opt fluentd-address=192.168.0.133:24224 nginx
下篇講解Docker-Swarm如何在微服務項目中使用!
歡迎關注公衆號! 公衆號回覆:
入羣
,掃碼加入咱們交流羣!