docker容器監控

2022-06-06 09:39:09 字數 2360 閱讀 1403

容器具有以下特性:

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

容器的本質是程序,而不是乙個完整作業系統;

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

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 主機上相關的檔案並展示給使用者。

TIG監控平台監控docker容器

influxdb是乙個時序資料庫,用來記錄監控資訊。開放8083和8086兩個埠 8083是influxdb的web管理端,8086是資料傳輸埠 初始建立資料庫telegraf供telegraf儲存資料 telegraf是負責收集docker資訊並 到influxdb的工具,通過簡單的配置即可監控d...

如何監控docker容器執行狀態 shell 指令碼

公司專案部署在docker中,由於未知原因容器偶爾會停止,需要寫乙個指令碼監控 容器執行狀態,如果容器停止了,就再啟動該容器 bin bash 傳入容器名稱 containername 1 currtime date y m d h m s 檢視程序是否存在 exist docker inspect...

docker容器 Docker 容器逃逸漏洞

2020年12月1日,阿里雲應急響應中心監測到 containerd 官方發布安全更新,修復了 docker 容器逃逸漏洞 cve 2020 15257 漏洞描述 containerd 是乙個控制 runc 的守護程序,提供命令列客戶端和 api,用於在乙個機器上管理容器。在特定網路條件下,攻擊者可...