docker容器監控


容器具有以下特性:

容器是短期存活的,並且可以動態調度;

容器的本質是進程,而不是一個完整操作系統;

由於容器非常輕量,容器的創建和銷毀也會比傳統虛擬機更加頻繁。

Docker 容器的監控方案有很多,除了 Docker 自帶的docker stats命令,還有很多開源的解決方案,例如 sysdig、cAdvisor、Prometheus 等,都是非常優秀的監控工具。
docker stats命令確實可以獲取並顯示 Docker 容器運行狀態。但是它的缺點也很明顯,因為它只能獲取本機數據,無法查看歷史監控數據,沒有可視化展示面板。

因此,生產環境中我們通常使用另一種容器監控解決方案 cAdvisor。
cAdvisor 的安裝與使用

首先使用以下命令啟動 cAdvisor:

$ docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --volume=/dev/disk/:/dev/disk:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  --privileged \
  --device=/dev/kmsg \
  lagoudocker/cadvisor:v0.37.0

此時,cAdvisor 已經成功啟動,我們可以通過訪問 http://localhost:8080 訪問到 cAdvisor 的 Web 界面
使用 cAdvisor 查看主機監控

訪問 http://localhost:8080/containers/

使用 cAdvisor 查看容器監控

訪問 http://localhost:8080/docker/

監控原理

我們知道 Docker 是基於 Namespace、Cgroups 和聯合文件系統實現的。其中 Cgroups 不僅可以用於容器資源的限制,還可以提供容器的資源使用率。無論何種監控方案的實現,底層數據都來源於 Cgroups。

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

為了更詳細的了解 Cgroups 的子系統,我們通過 ls -l 命令查看/sys/fs/cgroup文件夾,可以看到很多目錄:

$ sudo ls -l /sys/fs/cgroup/
total 0
dr-xr-xr-x 5 root root  0 Jul  9 19:32 blkio
lrwxrwxrwx 1 root root 11 Jul  9 19:32 cpu -> cpu,cpuacct
dr-xr-xr-x 5 root root  0 Jul  9 19:32 cpu,cpuacct
lrwxrwxrwx 1 root root 11 Jul  9 19:32 cpuacct -> cpu,cpuacct
dr-xr-xr-x 3 root root  0 Jul  9 19:32 cpuset
dr-xr-xr-x 5 root root  0 Jul  9 19:32 devices
dr-xr-xr-x 3 root root  0 Jul  9 19:32 freezer
dr-xr-xr-x 3 root root  0 Jul  9 19:32 hugetlb
dr-xr-xr-x 5 root root  0 Jul  9 19:32 memory
lrwxrwxrwx 1 root root 16 Jul  9 19:32 net_cls -> net_cls,net_prio
dr-xr-xr-x 3 root root  0 Jul  9 19:32 net_cls,net_prio
lrwxrwxrwx 1 root root 16 Jul  9 19:32 net_prio -> net_cls,net_prio
dr-xr-xr-x 3 root root  0 Jul  9 19:32 perf_event
dr-xr-xr-x 5 root root  0 Jul  9 19:32 pids
dr-xr-xr-x 5 root root  0 Jul  9 19:32 systemd

總結一下,容器的監控原理其實就是定時讀取 Linux 主機上相關的文件並展示給用戶。


免責聲明!

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



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