天天看點

日志管理之 Docker logs - 每天5分鐘玩轉 Docker 容器技術(87)

高效的監控和日志管理對保持生産系統持續穩定地運作以及排查問題至關重要。

在微服務架構中,由于容器的數量衆多以及快速變化的特性使得記錄日志和監控變得越來越重要。考慮到容器短暫和不固定的生命周期,當我們需要 debug 問題時有些容器可能已經不存在了。是以,一套集中式的日志管理系統是生産環境中不可或缺的組成部分。

本章我們将讨論監控容器的各種可用技術和方案,首先會介紹 Docker 自帶的 logs 子指令,然後讨論 Docker 的 logging driver,接下來通過實踐學習幾個已經廣泛應用的日志管理方案:ELK、Fluentd 和 Graylog。

日志管理之 Docker logs - 每天5分鐘玩轉 Docker 容器技術(87)

我們首先來看一看預設配置下 Docker 的日志功能。

對于一個運作的容器,Docker 會将日志發送到 容器的 标準輸出裝置(STDOUT)和标準錯誤裝置(STDERR),STDOUT 和 STDERR 實際上就是容器的控制台終端。

舉個例子,用下面的指令運作 httpd 容器:

docker run -p 80:80 httpd

日志管理之 Docker logs - 每天5分鐘玩轉 Docker 容器技術(87)

因為我們在啟動日志的時候沒有用 <code>-d</code> 參數,httpd 容器以前台方式啟動,日志會直接列印在目前的終端視窗。

如果加上 <code>-d</code> 參數以背景方式運作容器,我們就看不到輸出的日志了。

日志管理之 Docker logs - 每天5分鐘玩轉 Docker 容器技術(87)

這種情況下如果要檢視容器的日志,有兩種方法:

attach 到該容器。

用 <code>docker logs</code> 指令檢視日志。

先來看 attach 的方法。運作 <code>docker attach</code> 指令。

日志管理之 Docker logs - 每天5分鐘玩轉 Docker 容器技術(87)

attach 到了 httpd 容器,但并沒有任何輸出,這是因為目前沒有新的日志資訊。

為了産生一條新的日志,可以在 host 的另一個指令行終端執行 <code>curl localhost</code>。

日志管理之 Docker logs - 每天5分鐘玩轉 Docker 容器技術(87)

這時,attach 的終端就會列印出新的日志。

日志管理之 Docker logs - 每天5分鐘玩轉 Docker 容器技術(87)

attach 的方法在實際使用中不太友善,因為:

隻能看到 attach 之後的日志,以前的日志不可見。

退出 attach 狀态比較麻煩(Ctrl+p 然後 Ctrl+q 組合鍵),一不小心很容器将容器殺掉(比如按下 Ctrl+C)。

檢視容器日志推薦的方法是用 <code>docker logs</code> 指令。

日志管理之 Docker logs - 每天5分鐘玩轉 Docker 容器技術(87)

<code>docker logs</code> 能夠列印出自容器啟動以來完整的日志,并且 <code>-f</code> 參數可以繼續列印出新産生的日志,效果上與 Linux 指令 <code>tail -f</code> 一樣。

下一節我們讨論 Docker 如何支援多種日志方案。

書籍:

1.《每天5分鐘玩轉Docker容器技術》

<a href="https://item.jd.com/16936307278.html" target="_blank">https://item.jd.com/16936307278.html</a>

2.《每天5分鐘玩轉OpenStack》

<a href="https://item.jd.com/12086376.html" target="_blank">https://item.jd.com/12086376.html</a>

日志管理之 Docker logs - 每天5分鐘玩轉 Docker 容器技術(87)

繼續閱讀