你必须知道的容器监控 (1) Docker自带子命令与Weave Scope
本篇已加入《》,可以點擊查看更多容器化技術相關系列文章。本篇會介紹幾個目前比較常用且流行的容器監控工具,首先我們來看看Docker自帶的幾個監控子命令:ps、top以及stats,然后是一個功能更強的開源監控工具Weave Scope。
# 實驗環境:阿里云ECS主機,CentOS 7.4
01
—
Docker自帶監控子命令
ps
????想必只要我們看過一點docker的文章,就應該都知道docker ps這個命令,它使我們可以方便的查看現在正在運行的所有容器實例。
# docker ps執行后效果如下圖:
其實,它等價于下面兩句命令:
top
????????如果我們想要了解某個容器中到底運行了哪些進程,可以通過top命令來查詢。
# docker top container_name這里假設我們想查詢exceptionless_api這個容器中運行了哪些進程,通過以下命令查詢:
# docker top exceptionless_api_1
可以看到,在exceptionless_api_1這個容器中只運行了一個進程,該進程是一個.NET Core應用程序,其命令為:dotnet Exceptionless.Web.dll。
如果想要看到更多信息比如狀態、啟動時間等等,可以加上-au:(當然可以參閱Linux ps命令的參數加上更多參數顯示特定信息)
# docker top exceptionless_api_1 -au?
從上圖可以看到,該進程對于CPU和內存的占用量。
stats
????????如果我們想要查詢每個容器對于各種資源的使用情況,那么可以直接使用docker stats,這是一個強大的命令,默認會顯示一個實時變化的列表,以顯示每個容器實例的CPU使用率、內存使用量以及可用量等等。
Note:可以看到上圖中內存的Limit都是3.7G,這是因為在容器啟動時沒有特別指定內存Limit,所以這里都會默認顯示Host主機的總內存量(這里我的阿里云ECS主機是4G的內存配置),但并不意味著每個容器都能使用到這么多的內存。因此,我們完全可以為不同的容器實例設置不同的資源限制值,我也有寫一篇文章《Docker資源限制學習與驗證》。? 可以看到默認列表是基于容器ID來排列的,其實并不便于我們查看某個具體容器的資源使用情況,我們可以加上具體容器名字來定位和查看詳情:
# docker stats exceptionless_api_1
02
—
開源監控工具Weave Scope
安裝與運行
????????Weave Scope 是 Docker 和 Kubernetes 可視化監控工具。Scope 提供了至上而下的集群基礎設施和應用的完整視圖,用戶可以輕松對分布式的容器化應用進行實時監控和問題診斷。
Weave Scope的GitHub地址為:https://github.com/weaveworks/scope
我們可以通過以下腳本安裝運行Weave Scope:
# curl -L git.io/scope -o /usr/local/bin/scope # chmod a+x /usr/local/bin/scope # scope lanuch
? 看到上圖中的提示信息,代表你已經成功啟動了Weave Scope。
監控容器
??????? Weave Scope默認的端口號綁定的是4040,因此我們可以直接訪問http://[Host IP]:4040就可以看到如下圖所示的界面:
? 從上圖中可以看到,目前我的Host中有哪些容器實例,他們之間的關聯是什么樣的。比如這里我有一個Exceptionless的容器實例群,包括UI、API、Job、ElasticSearch、Kibna以及Redis。其中UI和其他容器沒有關聯關系,而API、Job、Kibna以及Redis都互有聯系。
此外,Weave Scope還有自己的容器,因為我們的Weave Scope也是容器運行的,點擊篩選“System containers”就會顯示Weave自己的容器了:
? 默認情況下,Weave提供了CPU占用率和內存使用量這兩個關鍵指標的監控,我們可以選擇不同的指標進行查看:
比如這里我選中Memory,Weave會采用水位高低的顯示方式來展示內存使用量;同理,CPU占用率也是一樣。
?
? 如果想查看某個容器的詳細信息,可以單擊該容器的圖標,這里我們點擊exceptionless_elasticsearch這個容器,可以看到如下圖所示的詳細信息:
?
? 從上圖可以看到詳情主要包括兩個部分:
(1)Status:CPU、內存實時占用率以及歷史曲線(注意CPU和內存那條線不一定都是直的,是曲線喲);
(2)Info:容器鏡像名稱、啟動命令、網絡、狀態等信息;
? 滾動下拉還可以看到如下圖所示的信息:
? 從上圖可以看到容器中正在運行的進程及其資源占用情況。點開Image,還會看到更詳細的鏡像信息。
? 此外,我們還看到了容器詳情上面有一排按鈕,可以支持我們對容器進行操作,從而不再需要去記住那些docker attach等命令。
? 第一個圖標是attach,點擊可以attach容器的啟動進程,等價于:docker attach。
第二個圖標是打開shell,點擊可以進入容器中,等價于:docker exec。
? 后面三個代表restart重啟容器,pause暫停容器 及 stop停止容器。
比如我點擊第二個圖標,即可進入該容器中可以進行shell命令輸入了:
監控Host
????????除了監控容器之外,Weave Scope還支持監控容器所在的Host。當我們單擊頂部菜單中的“Hosts”選項,即可顯示當前Host的信息:
可以看到,我目前就只有一臺阿里云ECS主機Host。
同理,單擊該Host圖標也會顯示其詳細信息:
? 從圖中可以看到,Host的實時資源使用情況和歷史曲線我們都能夠清晰的看到,滾動下拉條還可以看到Host上運行的進程和容器列表,如下圖所示:
?
? 單擊某個容器鏈接,就可以看到該容器的詳細監控信息了,很方便。
? 此外,對于Host也提供了單擊進入Shell的按鈕,可以方便地打開Shell窗口做遠程管理:
多Host監控
????????實際環境中,我們會有多個Host,每個Host都會部署多個容器,那么如何讓多個Host作為一個集群被監控呢?
假設我們有兩個Host,只需要在這兩個Host中執行以下命令進行啟動即可:
# scope launch 192.168.16.150 192.168.16.151這樣無論訪問哪個服務器的4040端口(假設沒有更改默認端口)都能監控到兩個Host。
邏輯條件查詢
????????實際環境中我們會有很多個容器,那么如何快速查詢到某個關鍵指標的容器呢?
Weave Scope還提供了邏輯條件的查詢,這里我們以CPU和內存為例:
(1)查詢內存使用量>900MB的容器實例:
? 篩選出來,目前只有一個容器內存使用超過了900mb。
(2)查詢CPU占用率>1%的容器實例:
? 篩選出來,也只有一個(當然也跟我實驗環境容器實例并不多有關)。
03
—
小結
對于容器監控,docker自帶的監控子命令是最簡單的最容易使用的,但是對于多Host監控、告警及監控非容器資源都不支持,且用戶友好度不夠。Weave Scope則解決了多Host監控、監控非容器資源,但是不支持告警,不過對于一般小型的微服務容器實例監控是足夠了。此外,Weave Scope對于大屏顯示的界面友好度及Dashboard做的還是不夠好,因此后面第二篇我們會學習Prometheus,它是一個更加強大和優秀的開源容器監控方案。
參考資料
Cloud Man,《每天5分鐘玩轉Docker容器技術》
冰凍vs西瓜,《利用WeaveScope監控容器》
sjyu_eadd,《Docker那些事兒-Docker容器監控工具》
恰童鞋騷年,風華也許不再正茂,但卻仍想揮斥方遒。
本公眾號會長期關注和分享.NET Core,Microservice,云原生(Docker & Kubernetes等),DevOps等技術內容文章,還會與你分享個人生活成長的點滴及各類好書的讀書筆記,希望能對你有所幫助,一起成長!
點個【在看】,和更多人一起分享!
總結
以上是生活随笔為你收集整理的你必须知道的容器监控 (1) Docker自带子命令与Weave Scope的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软推出 Microsoft.Data.
- 下一篇: .NET Core ORM 类库Peta