容器監控:容器監控原理及cAdvisor的安裝與使用


容器的特性

1.  短期存活,可以動態調度

2. 本質是進程,而不是一個完整的操作系統

3. 非常輕量,所以容器的創建和銷毀也會比傳統虛擬機更加頻繁

docker容器的監控方案

1. 自帶的docker stats 命令

2. 開源的解決方案:sysdig,cAdvisor,Prometheus

使用docker stats 監控演示

首先在主機上啟動一個資源限制為1核2G的nginx容器

命令

 docker run --cpus=1 -m=2G --name=nginx nginx

  

使用docker stats 命令查看容器的資源使用狀態

docker stats nginx

 

狀態如下

 

這種方法的缺點很明顯,只能查詢本容器數據,而且不能查詢歷史數據。所以,通常不用這種方法監控容器

生產環境中,我們通常用cAdvisor這種方案來監控
cAdvisor是谷歌開源的一款通用容器監控解決方案

它有如下優勢:

1. 可以采集機器上所有運行的容器信息

2. 提供了基礎的查詢界面和HTTP接口

所以,cAdvisor很快成為了流行的容器監控指標中最常用的組件,並且k8s也集成了cAdvisor作為容器監控的默認工具。

cAdvisor的安裝與使用

這里用docker的方式進行安裝

 

訪問本地8080端口即可 。值得一提的是,cAdvisor不僅可以監控容器的資源使用情況,也可以監控主機的資源使用情況。

使用cAdvisor查看資源的使用情況

 

cAdvisor監控的特點

可以同時采集物理機容器的狀態

可以展示監控歷史數據

容器監控的原理

Docker是基於Namespace、Cgroups和聯合文件系統實現的

Cgroups不僅可以用於容器資源的限制,還可以提供容器的資源使用率。不管用什么監控方案,底層數據都來源於Cgroups

Cgroups的工作目錄   /sys/fs/cgroup 下包含了Cgroups的所有內容。Cgroups包含了很多子系統,可以對CPU,內存,PID,磁盤IO等資源進行限制和監控。

查看 /sys/fs/cgroup 文件夾

 

每一個文件夾都代表了Cgroups的子系統,docker會在Cgroups的子系統下創建docker文件夾。

以memory子系統為例介紹監控組件獲取到容器的資源和使用狀態的原理

在主機上啟動一個資源限制為1核2G的tomcat容器

docker  run -d  --cpus=1  -m=4G --name=tomcat  tomcat      
666502d11f739b135731de20fc2e86320f339009bc24d5690fd35987ded645ac

 

容器會在/sys/fs/cgroups/memory/docker 下創建以容器ID命名的文件夾

查看/sys/fs/cgroups/memory/docker文件夾

 

進入以該容器ID命名的文件夾

cd  666502d11f739b135731de20fc2e86320f339009bc24d5690fd35987ded645ac/

查看該文件夾下的內容

 

 

memory.limit_in_bytes 文件就是存放內存總量信息的文件

使用cat命令查看文件內容

cat memory.limit_in_bytes 
4294967296 

單位為byte,換算后大約為4G

內存使用情況存在 memory.usage_in_bytes 文件里,查看該文件

 

cat memory.usage_in_bytes 
65040384

 

換算后大約62Mb

下面看下網絡監控的數據來源

監控數據是在/proc/PID/net/dev/下 

使用docker  inspect 命令查看tomcat容器的PID

docker inspect tomcat  | grep Pid
            "Pid": 16667,
            "PidMode": "",
            "PidsLimit": null,

 

得知tomcat容器的PID是16667

查看/proc/16667/net/dev文件

cat /proc/16667/net/dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
  eth0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
    lo:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

 

現在我們已經知道,容器的監控原理就是定時讀取linux上的相關文件並展示給用戶了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM