日誌管理之 Docker logs - 每天5分鐘玩轉 Docker 容器技術(87)
高效的監控和日誌管理對保持生產系統持續穩定地運行以及排查問題至關重要。
在微服務架構中,由於容器的數量眾多以及快速變化的特性使得記錄日誌和監控變得越來越重要。考慮到容器短暫和不固定的生命周期,當我們需要 debug 問題時有些容器可能已經不存在了。因此,一套集中式的日誌管理系統是生產環境中不可或缺的組成部分。
本章我們將討論監控容器的各種可用技術和方案,首先會介紹 Docker 自帶的 logs 子命令,然後討論 Docker 的 logging driver,接下來通過實踐學習幾個已經廣泛應用的日誌管理方案:ELK、Fluentd 和 Graylog。
Docker logs
我們首先來看一看默認配置下 Docker 的日誌功能。
對於一個運行的容器,Docker 會將日誌發送到 容器的 標準輸出設備(STDOUT)和標準錯誤設備(STDERR),STDOUT 和 STDERR 實際上就是容器的控制臺終端。
舉個例子,用下面的命令運行 httpd 容器:
docker run -p 80:80 httpd
因為我們在啟動日誌的時候沒有用 -d
參數,httpd 容器以前臺方式啟動,日誌會直接打印在當前的終端窗口。
如果加上 -d
參數以後臺方式運行容器,我們就看不到輸出的日誌了。
這種情況下如果要查看容器的日誌,有兩種方法:
attach 到該容器。
用
docker logs
命令查看日誌。
先來看 attach 的方法。運行 docker attach
命令。
attach 到了 httpd 容器,但並沒有任何輸出,這是因為當前沒有新的日誌信息。
為了產生一條新的日誌,可以在 host 的另一個命令行終端執行 curl localhost
。
這時,attach 的終端就會打印出新的日誌。
attach 的方法在實際使用中不太方便,因為:
只能看到 attach 之後的日誌,以前的日誌不可見。
退出 attach 狀態比較麻煩(Ctrl+p 然後 Ctrl+q 組合鍵),一不小心很容器將容器殺掉(比如按下 Ctrl+C)。
查看容器日誌推薦的方法是用 docker logs
命令。
docker logs
能夠打印出自容器啟動以來完整的日誌,並且 -f
參數可以繼續打印出新產生的日誌,效果上與 Linux 命令 tail -f
一樣。
下一節我們討論 Docker 如何支持多種日誌方案。
書籍:
1.《每天5分鐘玩轉Docker容器技術》
https://item.jd.com/16936307278.html
2.《每天5分鐘玩轉OpenStack》
https://item.jd.com/12086376.html
日誌管理之 Docker logs - 每天5分鐘玩轉 Docker 容器技術(87)