40 張圖詳解 Docker 容器監(jiān)控
在公眾號(hào)后臺(tái)回復(fù):JGNB,可獲取杰哥原創(chuàng)的 PDF 手冊(cè)。
前言
在企業(yè)中,通常業(yè)務(wù)是不允許隨意停止的,否則將給企業(yè)帶來(lái)巨大的經(jīng)濟(jì)損失。
運(yùn)維工程師要保證業(yè)務(wù)正常運(yùn)行,就必須利用工具時(shí)刻監(jiān)控業(yè)務(wù)的運(yùn)行狀態(tài),容器中的業(yè)務(wù)也不例外。
除了容器自身的監(jiān)控命令外,還有一些針對(duì)容器的動(dòng)態(tài)特征而開發(fā)的第三方監(jiān)控工具。
本章將對(duì)容器監(jiān)控及其相關(guān)內(nèi)容進(jìn)行詳解。
Docker 監(jiān)控命令
在容器中,通常可以通過(guò)執(zhí)行命令或利用第三方工具,獲取當(dāng)前容器中的數(shù)據(jù)并將數(shù)據(jù)呈現(xiàn)給用戶。
安裝完成的 Docker 自帶一些用于監(jiān)控容器的子命令,這是 Docker 開發(fā)者為用戶提供的容器監(jiān)控方式。
docker ps 命令
docker ps 命令是之前中講過(guò)的命令,用來(lái)查看容器狀態(tài),示例代碼如下:

另外,通過(guò) docker container ls命令也可以達(dá)到相同的效果,示例代碼如下:

注意,若是 docker container ls命令執(zhí)行失敗,更新 Docker 版本即可。
docker top 命令
docker top 命令用于查看容器中的進(jìn)程,示例代碼如下:

以上示例通過(guò) docker top 命令添加容器 ID 號(hào)查看到了容器內(nèi)進(jìn)程。
除此之外,還可以在命令中添加容器名稱,達(dá)到相同的效果,示例代碼如下:

在 docker top 命令中添加參數(shù)即可顯示特定的進(jìn)程信息,此處以 -u 參數(shù)為例,示例代碼如下:

以上示例通過(guò)給 docker top 命令添加 -u 參數(shù),將 sysdig 容器的進(jìn)程信息以用戶為主的格式顯示出來(lái)。
docker stats 命令
docker stats 命令用于查詢?nèi)萜鞯母黜?xiàng)資源的消耗情況,示例代碼如下:

以上示例執(zhí)行了 docker stats 命令,在終端通過(guò)一個(gè)動(dòng)態(tài)列表顯示出各個(gè)容器的資源使用情況,如 cpu 使用率、內(nèi)存、容器網(wǎng)絡(luò)等信息。
在沒(méi)有限制容器內(nèi)存的情況下,此處將會(huì)顯示宿主機(jī)的內(nèi)存。
此處的動(dòng)態(tài)列表有一項(xiàng)明顯的不足,就是只能顯示容器 ID 號(hào),不顯示容器名稱。
但只要在命令中添加容器名稱,即可查看指定容器的信息,示例代碼如下:

Docker 自帶的容器監(jiān)控命令能夠靈活捕捉容器的實(shí)時(shí)信息,且使用方便。
但它們無(wú)法反映容器資源占用的趨勢(shì),且只能顯示有限的數(shù)據(jù)。
Sysdig
Sysdig 是一款命令行監(jiān)控工具,因其輕量級(jí)的特點(diǎn)深受廣大用戶的喜愛(ài)。
Sysdig 就像放大鏡,使用戶可以更清晰地看到宿主機(jī)與容器的各項(xiàng)行為。
它相當(dāng)于多種 Linux 監(jiān)控工具的合集,如 strace、htop、lsof 等,將這些工具的功能及查詢結(jié)果整合到同一個(gè)界面中,供用戶操作。
Sysdig 為在 Docker Hub 中提供了容器鏡像,用戶可以將 Sysdig 以容器的形式運(yùn)行,示例代碼如下:

以上示例中,Sysdig 容器以掛載宿主機(jī)目錄的方式收集系統(tǒng)信息,并給予其足夠的系統(tǒng)權(quán)限。
注意,該命令中必須使用絕對(duì)路徑,否則會(huì)在執(zhí)行時(shí)出錯(cuò)。
容器啟動(dòng)后將直接進(jìn)入容器終端,若通過(guò) Ctrl+P+Q 組合鍵退出容器或者容器在后臺(tái)運(yùn)行,通過(guò) exec 命令即可進(jìn)入 Sysdig 容器,示例代碼如下:

在 Sysdig 容器中,通過(guò)以下命令啟動(dòng) Sysdig 監(jiān)控:

執(zhí)行成功之后,將顯示 Sysdig 功能界面,如圖所示。

功能界面中不僅有各項(xiàng)資源的使用信息,下方還有各類選項(xiàng),用戶可以根據(jù)不同要求從不同角度去監(jiān)控不同類型的資源。
按 F2 鍵或者單擊 Views 選項(xiàng),進(jìn)入監(jiān)控選項(xiàng)列表,如圖所示。

在該界面中,左邊列出了 Sysdig 的各個(gè)監(jiān)控項(xiàng),右邊是關(guān)于監(jiān)控項(xiàng)的說(shuō)明。
通過(guò)鍵盤方向鍵即可移動(dòng)界面中的光標(biāo),從而切換監(jiān)控項(xiàng)。
下面將光標(biāo)移動(dòng)到 Containers 項(xiàng),按回車鍵或者雙擊該選項(xiàng),進(jìn)入容器監(jiān)控界面,如圖所示。

若是用戶覺(jué)得圖中的內(nèi)容太過(guò)繁瑣,或者難以理解,可以按 F7 鍵,進(jìn)入數(shù)據(jù)說(shuō)明界面。
其中有對(duì)各項(xiàng)數(shù)據(jù)的解釋,能幫助用戶更快掌握 Sysdig 的使用方法,如圖所示。

進(jìn)入該界面之后,按任意鍵即可退出。
另外,在監(jiān)控界面中還可以指定按照某一項(xiàng)數(shù)據(jù)進(jìn)行排序,單擊列表中某一項(xiàng)數(shù)據(jù)的表頭即可。
此處以內(nèi)存為例,按照占用內(nèi)存排序的監(jiān)控列表,如圖所示。

若要查看單個(gè)容器內(nèi)部信息,將光標(biāo)移動(dòng)到該容器信息上,按回車鍵即可,如圖所示。

再移動(dòng)光標(biāo)到指定信息,按回車鍵還可以查看容器進(jìn)程中的線程信息,如圖所示。

若要返回上一級(jí),在鍵盤上按退格鍵即可。
為方便用戶管理,Sysdig 還支持搜索功能,通過(guò) Ctrl+F 組合鍵即可啟動(dòng)該功能,再輸入關(guān)鍵字即可查詢。此處關(guān)鍵字以 usr 為例,如圖所示。

如果在操作過(guò)程中遇到問(wèn)題,可以按 F1 鍵或者單擊某選項(xiàng),進(jìn)入幫助文檔。
幫助文檔詳細(xì)介紹了 Sysdig 的操作方式,供用戶學(xué)習(xí)。
若動(dòng)態(tài)列表變化太快,導(dǎo)致用戶無(wú)法準(zhǔn)確查看到信息,可以按 P 鍵將列表暫停。
Sysdig 為用戶提供了較為全面的監(jiān)控視角,但其本質(zhì)是命令行工具,缺乏更具直觀性的監(jiān)控角度。
Weave Scope
Weave Scope 為用戶提供了更直觀的監(jiān)控視角,它將整個(gè)監(jiān)控以圖形界面的形式呈現(xiàn)出來(lái)。
安裝 Weave Scope
首先,下載 Weave Scope 的二進(jìn)制安裝包到指定的路徑下,示例代碼如下:

Weave Scope 安裝包的本質(zhì)是一個(gè)腳本,所以需要賦予其執(zhí)行權(quán)限,示例代碼如下:

然后,通過(guò)命令執(zhí)行該腳本,示例代碼如下:

此時(shí),Weave Scope 監(jiān)控已經(jīng)開啟,通過(guò)瀏覽器訪問(wèn)系統(tǒng)提示中的 http://192.168.77.128:4040/ 即可進(jìn)入監(jiān)控界面。
在進(jìn)入界面之前先查看容器狀態(tài),示例代碼如下:

從以上示例中可以看到,宿主機(jī)中增加了一個(gè)被命名為 weavescope 的新容器,這說(shuō)明 Weave Scope 以容器的方式在宿主機(jī)中運(yùn)行。
下面根據(jù)提示進(jìn)入 Weave Scope 界面,如圖所示。

圖中,宿主機(jī)中的所有容器都以圖形的形式呈現(xiàn)出來(lái),更加便于用戶管理。
監(jiān)控容器
在 Weave Scope 界面中,宿主機(jī)上的容器被分為多個(gè)種類,默認(rèn)不顯示 Weave Scope 本身的容器。
若要查看所有容器,就需要在界面左下角的選項(xiàng)中進(jìn)行操作,如圖所示。

在左下方單擊 All 選項(xiàng),即可查看宿主機(jī)中所有運(yùn)行中的容器,如圖所示。

若要查看容器的資源占用情況,需要在界面上方選項(xiàng)中進(jìn)行操作,如圖所示。

在上方單擊 CPU 選項(xiàng),即可顯示界面中容器的 CPU 使用情況,如圖所示。

單擊 CPU 選項(xiàng)之后,CPU 使用情況將會(huì)以液位高度的形式在容器圖標(biāo)上顯示。
此時(shí),將鼠標(biāo)指針移動(dòng)到容器圖標(biāo)之上,即可顯示具體數(shù)據(jù),如圖所示。

若要查看某一容器的詳細(xì)信息,單擊該容器圖標(biāo)即可,如圖所示。

其中,容器的詳細(xì)信息包括以下各項(xiàng):
Status:CPU 與內(nèi)存的實(shí)時(shí)狀態(tài)曲線圖。
Info:鏡像、鏡像標(biāo)簽、命令等信息。
Processes:該容器中實(shí)時(shí)運(yùn)行的進(jìn)程信息。
Docker labels:維護(hù)人員或容器的啟動(dòng)命令等信息。
Image:該容器的鏡像信息。
容器詳細(xì)信息界面中,有一行可對(duì)該容器直接進(jìn)行操作的選項(xiàng),如圖所示。

圖中的選項(xiàng)從左到右分別表示:
通過(guò) docker attach 命令進(jìn)入容器終端;
通過(guò) docker exec 命令進(jìn)入容器終端;
通過(guò) docker restart 命令重新啟動(dòng)容器;
通過(guò) docker pause 命令暫停容器;
通過(guò) docker stop 命令終止容器。
有了這些選項(xiàng),用戶就不需要在終端中輸入命令,直接單擊選項(xiàng)即可對(duì)容器進(jìn)行操作。
若需要執(zhí)行這些選項(xiàng)之外的操作,可通過(guò)選項(xiàng)進(jìn)入容器終端完成。
監(jiān)控宿主機(jī)
Weave Scope 為用戶提供廣闊的監(jiān)控視角,除了監(jiān)控容器,還可以對(duì)宿主機(jī)進(jìn)行監(jiān)控。
單擊界面上方的 Hosts 選項(xiàng),即可查看宿主機(jī),如圖所示。

與容器操作相同,單擊宿主機(jī)圖標(biāo)即可查看其詳細(xì)信息,如圖所示。

與容器相比,宿主機(jī)的 Staus 項(xiàng)中增加了負(fù)載信息。
詳細(xì)信息還包含了宿主機(jī)中的容器信息,單擊容器名稱即可查看容器的詳細(xì)信息。
宿主機(jī)的信息中只有一個(gè)供用戶對(duì)其進(jìn)行操作的選項(xiàng),單擊即可進(jìn)入宿主機(jī)終端,如圖所示。

多宿主機(jī)監(jiān)控
在企業(yè)生產(chǎn)環(huán)境中,通常需要使用多臺(tái)宿主機(jī)部署容器業(yè)務(wù),所以容器監(jiān)控也需要同時(shí)監(jiān)控多臺(tái)宿主機(jī)。
而 Weave Scope 恰好擁有多宿主機(jī)監(jiān)控的功能,下面通過(guò)示例來(lái)演示該功能的使用方式。
首先,準(zhǔn)備兩臺(tái)安裝了 Weave Scope 的服務(wù)器,并分別在啟動(dòng)命令中添加兩個(gè)服務(wù)器的 IP 地址進(jìn)行啟動(dòng),示例代碼如下:

根據(jù)兩臺(tái)宿主機(jī)中啟動(dòng)命令的執(zhí)行結(jié)果,無(wú)論是訪問(wèn) http://192.168.77.128:4040/ 還是 http://192.168.77.130:4040/,都可以監(jiān)控到兩臺(tái)宿主機(jī),如圖所示。

單擊界面上方的 Containers 選項(xiàng),查看所有宿主機(jī)中的容器,如圖所示。

為了便于用戶分辨,Weave Scope 在每個(gè)容器圖標(biāo)下的容器名稱后都會(huì)標(biāo)注該容器所屬宿主機(jī)的主機(jī)名。
在生產(chǎn)環(huán)境中部署大量容器,需要對(duì)某一容器進(jìn)行操作時(shí),可以使用 Weave Scope 界面左上角的搜索功能,對(duì)該容器進(jìn)行搜索。
此處以關(guān)鍵字 "reg" 為例,搜索結(jié)果如圖所示。

另外,Weave Scope 還支持邏輯條件搜索。
例如,搜索 CPU 占用率大于 1% 的容器,在搜索欄中輸入 "cpu>1 即可,如圖所示。

界面的右下角有四個(gè)選項(xiàng),從左到右前三個(gè)是調(diào)試界面顯示的選項(xiàng),最后一個(gè)是 Weave Scope 的幫助選項(xiàng),如圖所示。

單擊幫助選項(xiàng),即可查看 Weave Scope 的幫助文檔,如圖所示。

總結(jié)
本章講解了 Docker 自帶的監(jiān)控命令,以及一些第三方監(jiān)控軟件的安裝與使用。
其中,Sysdig 是一款優(yōu)秀的命令行監(jiān)控工具;
Weave Scope 不僅操作簡(jiǎn)單,還為用戶提供了更為直觀的圖形界面。
希望大家通過(guò)本篇文章的學(xué)習(xí)能夠熟練掌握 Docker 容器的監(jiān)控方式,以保證容器中業(yè)務(wù)的正常運(yùn)行。
推薦閱讀
超值一篇分享,Docker:從入門到實(shí)戰(zhàn)過(guò)程全記錄
史上講解最好的 Docker 教程,從入門到精通(建議收藏的教程)
Docker 極簡(jiǎn)入門指南,10 分鐘就能看懂~

