1. 程式人生 > >你必須知道的容器監控 (1) Docker自帶子命令與Weave Scope

你必須知道的容器監控 (1) Docker自帶子命令與Weave Scope

本篇已加入《.NET Core on K8S學習實踐系列文章索引》,可以點選檢視更多容器化技術相關係列文章。本篇會介紹幾個目前比較常用且流行的容器監控工具,首先我們來看看Docker自帶的幾個監控子命令:ps、top以及stats,然後是一個功能更強的開源監控工具Weave Scope。

# 實驗環境:阿里雲ECS主機,CentOS 7.4

一、Docker自帶監控子命令

1.1 ps

  想必只要我們看過一點docker的文章,就應該都知道docker ps這個命令,它使我們可以方便的檢視現在正在執行的所有容器例項。

# docker ps

  執行後效果如下圖:

  

  其實,它等價於下面兩句命令:

# docker container ps
# docker container ls

1.2 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和記憶體的佔用量。

1.3 stats

  如果我們想要查詢每個容器對於各種資源的使用情況,那麼可以直接使用docker stats,這是一個強大的命令,預設會顯示一個實時變化的列表,以顯示每個容器例項的CPU使用率、記憶體使用量以及可用量等等。

  

Note:可以看到上圖中記憶體的Limit都是3.7G,這是因為在容器啟動時沒有特別指定記憶體Limit,所以這裡都會預設顯示Host主機的總記憶體量(這裡我的阿里雲ECS主機是4G的記憶體配置),但並不意味著每個容器都能使用到這麼多的記憶體。因此,我們完全可以為不同的容器例項設定不同的資源限制值,我也有寫一篇文章《Docker資源限制學習與驗證》。

   可以看到預設列表是基於容器ID來排列的,其實並不便於我們檢視某個具體容器的資源使用情況,我們可以加上具體容器名字來定位和檢視詳情:

# docker stats exceptionless_api_1

  

二、強大監控工具Weave Scope

2.1 安裝與執行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。

2.2 監控容器

  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命令輸入了:

  

2.3 監控Host主機

  除了監控容器之外,Weave Scope還支援監控容器所在的Host。當我們單擊頂部選單中的“Hosts”選項,即可顯示當前Host的資訊:

  

  可以看到,我目前就只有一臺阿里雲ECS主機Host。

  同理,單擊該Host圖示也會顯示其詳細資訊:

  

   從圖中可以看到,Host的實時資源使用情況和歷史曲線我們都能夠清晰的看到,滾動下拉條還可以看到Host上執行的程序和容器列表,如下圖所示:

   

   單擊某個容器連結,就可以看到該容器的詳細監控資訊了,很方便。

   此外,對於Host也提供了單擊進入Shell的按鈕,可以方便地開啟Shell視窗做遠端管理:

  

2.4 監控多個Host主機

  實際環境中,我們會有多個Host,每個Host都會部署多個容器,那麼如何讓多個Host作為一個叢集被監控呢?

  假設我們有兩個Host,只需要在這兩個Host中執行以下命令進行啟動即可:

# scope launch 192.168.16.150 192.168.16.151

  這樣無論訪問哪個伺服器的4040埠(假設沒有更改預設埠)都能監控到兩個Host。

2.5 邏輯條件定位查詢

  實際環境中我們會有很多個容器,那麼如何快速查詢到某個關鍵指標的容器呢?

  Weave Scope還提供了邏輯條件的查詢,這裡我們以CPU和記憶體為例:

  (1)查詢記憶體使用量>900MB的容器例項:

  

   篩選出來,目前只有一個容器記憶體使用超過了900mb。

  (2)查詢CPU佔用率>1%的容器例項:

  

   篩選出來,也只有一個(當然也跟我實驗環境容器例項並不多有關)。

三、小結

  對於容器監控,docker自帶的監控子命令是最簡單的最容易使用的,但是對於多Host監控、告警及監控非容器資源都不支援,且使用者友好度不夠。Weave Scope則解決了多Host監控、監控非容器資源,但是不支援告警,不過對於一般小型的微服務容器例項監控是足夠了。此外,Weave Scope對於大屏顯示的介面友好度及Dashboard做的還是不夠好,因此後面第二篇我們會學習Prometheus,它是一個更加強大和優秀的開源容器監控方案。

參考資料

Cloud Man,《每天5分鐘玩轉Docker容器技術》

冰凍vs西瓜,《利用WeaveScope監控容器》

sjyu_eadd,《Docker那些事兒-Docker容器監控工具》

 

作者:周旭龍

出處:https://edisonchou.cnblogs.com

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。