日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Docker 容器監控原理及 cAdvisor的安裝與使用說明

瀏覽:34日期:2024-11-14 14:04:39

生產環境中監控容器的運行狀況十分重要,通過監控我們可以隨時掌握容器的運行狀態,做到線上隱患和問題早發現,早解決。

所以今天我就和你分享關于容器監控的知識(原理及工具 cAdvisor)。

雖然傳統的物理機和虛擬機監控已經有了比較成熟的監控方案,但是容器的監控面臨著更大的挑戰,因為容器的行為和本質與傳統的虛擬機是不一樣的,總的來說,容器具有以下特性:

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

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

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

Docker 容器的監控方案有很多,除了 Docker 自帶的docker stats命令,還有很多開源的解決方案,例如 sysdig、cAdvisor、Prometheus 等,都是非常優秀的監控工具。

下面我們首先來看下,不借助任何外部工具,如何用 Docker 自帶的docker stats命令實現容器的監控。

使用 docker stats 命令

使用 Docker 自帶的docker stats命令可以很方便地看到主機上所有容器的 CPU、內存、網絡 IO、磁盤 IO、PID 等資源的使用情況。下面我們可以具體操作看看。

首先在主機上使用以下命令啟動一個資源限制為 1 核 2G 的 nginx 容器:

$ docker run --cpus=1 -m=2g --name=nginx -d nginx

容器啟動后,可以使用docker stats命令查看容器的資源使用狀態:

$ docker stats nginx

通過docker stats命令可以看到容器的運行狀態如下:

CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS

f742a467b6d8 0.00% 1.387 MiB / 2 GiB 0.07% 656 B / 656 B 0 B / 9.22 kB 2

從容器的運行狀態可以看出,docker stats命令確實可以獲取并顯示 Docker 容器運行狀態。但是它的缺點也很明顯,因為它只能獲取本機數據,無法查看歷史監控數據,沒有可視化展示面板。

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

cAdvisor

cAdvisor 是谷歌開源的一款通用的容器監控解決方案。cAdvisor 不僅可以采集機器上所有運行的容器信息,還提供了基礎的查詢界面和 HTTP 接口,更方便與外部系統結合。所以,cAdvisor很快成了容器指標監控最常用組件,并且 Kubernetes 也集成了 cAdvisor 作為容器監控指標的默認工具。

cAdvisor 的安裝與使用

下面我們以 cAdvisor 0.37.0 版本為例,演示一下 cAdvisor 的安裝與使用。

cAdvisor 官方提供了 Docker 鏡像,我們只需要拉取鏡像并且啟動鏡像即可。

由于 cAdvisor 鏡像存放在谷歌的 gcr.io 鏡像倉庫中,國內無法訪問到。這里我把打好的鏡像放在了 Docker Hub。你可以使用 docker pull lagoudocker/cadvisor:v0.37.0 命令從 Docker Hub 拉取。

首先使用以下命令啟動 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 界面。

Docker 容器監控原理及 cAdvisor的安裝與使用說明

cAdvisor 不僅可以監控容器的資源使用情況,還可以監控主機的資源使用情況。下面我們就先看下它是如何查看主機資源使用情況的。

使用 cAdvisor 查看主機監控

訪問 http://localhost:8080/containers/ 地址,在首頁可以看到主機的資源使用情況,包含 CPU、內存、文件系統、網絡等資源,如下圖所示。

Docker 容器監控原理及 cAdvisor的安裝與使用說明

使用 cAdvisor 查看容器監控

如果你想要查看主機上運行的容器資源使用情況,可以訪問 http://localhost:8080/docker/,這個頁面會列出 Docker 的基本信息和運行的容器情況,如下圖所示。

Docker 容器監控原理及 cAdvisor的安裝與使用說明

在上圖中的 Subcontainers 下會列出當前主機上運行的所有容器,點擊其中一個容器即可查看該容器的詳細運行狀態,如下圖所示。

Docker 容器監控原理及 cAdvisor的安裝與使用說明

總體來說,使用 cAdvisor 監控容器具有以下特點:

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

可以展示監控歷史數據

了解 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 blkiolrwxrwxrwx 1 root root 11 Jul 9 19:32 cpu -> cpu,cpuacctdr-xr-xr-x 5 root root 0 Jul 9 19:32 cpu,cpuacctlrwxrwxrwx 1 root root 11 Jul 9 19:32 cpuacct -> cpu,cpuacctdr-xr-xr-x 3 root root 0 Jul 9 19:32 cpusetdr-xr-xr-x 5 root root 0 Jul 9 19:32 devicesdr-xr-xr-x 3 root root 0 Jul 9 19:32 freezerdr-xr-xr-x 3 root root 0 Jul 9 19:32 hugetlbdr-xr-xr-x 5 root root 0 Jul 9 19:32 memorylrwxrwxrwx 1 root root 16 Jul 9 19:32 net_cls -> net_cls,net_priodr-xr-xr-x 3 root root 0 Jul 9 19:32 net_cls,net_priolrwxrwxrwx 1 root root 16 Jul 9 19:32 net_prio -> net_cls,net_priodr-xr-xr-x 3 root root 0 Jul 9 19:32 perf_eventdr-xr-xr-x 5 root root 0 Jul 9 19:32 pidsdr-xr-xr-x 5 root root 0 Jul 9 19:32 systemd

這些目錄代表了 Cgroups 的子系統,Docker 會在每一個 Cgroups 子系統下創建 docker 文件夾。這里如果你對 Cgroups 子系統不了解的話,不要著急,這里你只需要明白容器監控數據來源于 Cgroups 即可。

監控系統是如何獲取容器的內存限制的?

下面我們以 memory 子系統(memory 子系統是Cgroups 眾多子系統的一個,主要用來限制內存使用)為例,講解一下監控組件是如何獲取到容器的資源限制和使用狀態的(即容器的內存限制)。

我們首先在主機上使用以下命令啟動一個資源限制為 1 核 2G 的 nginx 容器:

$ docker run --name=nginx --cpus=1 -m=2g --name=nginx -d nginx

## 這里輸出的是容器 ID

51041a74070e9260e82876974762b8c61c5ed0a51832d74fba6711175f89ede1

注意:如果你已經創建過名稱為 nginx 的容器,請先使用 docker rm -f nginx 命令刪除已經存在的 nginx 容器。

容器啟動后,我們通過命令行的輸出可以得到容器的 ID,同時 Docker 會在/sys/fs/cgroup/memory/docker目錄下以容器 ID 為名稱創建對應的文件夾。

下面我們查看一下/sys/fs/cgroup/memory/docker目錄下的文件:

$ sudo ls -l /sys/fs/cgroup/memory/dockertotal 0 drwxr-xr-x 2 root root 0 Sep 2 15:12 51041a74070e9260e82876974762b8c61c5ed0a51832d74fba6711175f89ede1-rw-r--r-- 1 root root 0 Sep 2 14:57 cgroup.clone_children--w--w--w- 1 root root 0 Sep 2 14:57 cgroup.event_control-rw-r--r-- 1 root root 0 Sep 2 14:57 cgroup.procs-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.failcnt--w------- 1 root root 0 Sep 2 14:57 memory.force_empty-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.kmem.failcnt-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.kmem.limit_in_bytes-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.kmem.max_usage_in_bytes-r--r--r-- 1 root root 0 Sep 2 14:57 memory.kmem.slabinfo-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.kmem.tcp.failcnt-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.kmem.tcp.limit_in_bytes-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.kmem.tcp.max_usage_in_bytes-r--r--r-- 1 root root 0 Sep 2 14:57 memory.kmem.tcp.usage_in_bytes-r--r--r-- 1 root root 0 Sep 2 14:57 memory.kmem.usage_in_bytes-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.limit_in_bytes-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.max_usage_in_bytes-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.memsw.failcnt-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.memsw.limit_in_bytes-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.memsw.max_usage_in_bytes-r--r--r-- 1 root root 0 Sep 2 14:57 memory.memsw.usage_in_bytes-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.move_charge_at_immigrate-r--r--r-- 1 root root 0 Sep 2 14:57 memory.numa_stat-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.oom_control---------- 1 root root 0 Sep 2 14:57 memory.pressure_level-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.soft_limit_in_bytes-r--r--r-- 1 root root 0 Sep 2 14:57 memory.stat-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.swappiness-r--r--r-- 1 root root 0 Sep 2 14:57 memory.usage_in_bytes-rw-r--r-- 1 root root 0 Sep 2 14:57 memory.use_hierarchy-rw-r--r-- 1 root root 0 Sep 2 14:57 notify_on_release-rw-r--r-- 1 root root 0 Sep 2 14:57 tasks

可以看到 Docker 已經創建了以容器 ID 為名稱的目錄,我們再使用 ls 命令查看一下該目錄的內容:

$ sudo ls -l /sys/fs/cgroup/memory/docker/51041a74070e9260e82876974762b8c61c5ed0a51832d74fba6711175f89ede1 total 0-rw-r--r-- 1 root root 0 Sep 2 15:21 cgroup.clone_children--w--w--w- 1 root root 0 Sep 2 15:13 cgroup.event_control-rw-r--r-- 1 root root 0 Sep 2 15:12 cgroup.procs-rw-r--r-- 1 root root 0 Sep 2 15:12 memory.failcnt--w------- 1 root root 0 Sep 2 15:21 memory.force_empty-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.kmem.failcnt-rw-r--r-- 1 root root 0 Sep 2 15:12 memory.kmem.limit_in_bytes-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.kmem.max_usage_in_bytes-r--r--r-- 1 root root 0 Sep 2 15:21 memory.kmem.slabinfo-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.kmem.tcp.failcnt-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.kmem.tcp.limit_in_bytes-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.kmem.tcp.max_usage_in_bytes-r--r--r-- 1 root root 0 Sep 2 15:21 memory.kmem.tcp.usage_in_bytes-r--r--r-- 1 root root 0 Sep 2 15:21 memory.kmem.usage_in_bytes-rw-r--r-- 1 root root 0 Sep 2 15:12 memory.limit_in_bytes-rw-r--r-- 1 root root 0 Sep 2 15:12 memory.max_usage_in_bytes-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.memsw.failcnt-rw-r--r-- 1 root root 0 Sep 2 15:12 memory.memsw.limit_in_bytes-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.memsw.max_usage_in_bytes-r--r--r-- 1 root root 0 Sep 2 15:21 memory.memsw.usage_in_bytes-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.move_charge_at_immigrate-r--r--r-- 1 root root 0 Sep 2 15:21 memory.numa_stat-rw-r--r-- 1 root root 0 Sep 2 15:13 memory.oom_control---------- 1 root root 0 Sep 2 15:21 memory.pressure_level-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.soft_limit_in_bytes-r--r--r-- 1 root root 0 Sep 2 15:21 memory.stat-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.swappiness-r--r--r-- 1 root root 0 Sep 2 15:12 memory.usage_in_bytes-rw-r--r-- 1 root root 0 Sep 2 15:21 memory.use_hierarchy-rw-r--r-- 1 root root 0 Sep 2 15:21 notify_on_release-rw-r--r-- 1 root root 0 Sep 2 15:21 tasks

由上可以看到,容器 ID 的目錄下有很多文件,其中 memory.limit_in_bytes 文件代表該容器內存限制大小,單位為 byte,我們使用 cat 命令(cat 命令可以查看文件內容)查看一下文件內容:

$ sudo cat /sys/fs/cgroup/memory/docker/51041a74070e9260e82876974762b8c61c5ed0a51832d74fba6711175f89ede1/memory.limit_in_bytes

2147483648

這里可以看到memory.limit_in_bytes 的值為2147483648,轉換單位后正好為 2G,符合我們啟動容器時的內存限制 2G。

通過 memory 子系統的例子,我們可以知道監控組件通過讀取 memory.limit_in_bytes 文件即可獲取到容器內存的限制值。了解完容器的內存限制我們來了解一下容器的內存使用情況。

$ sudo /sys/fs/cgroup/memory/docker/51041a74070e9260e82876974762b8c61c5ed0a51832d74fba6711175f89ede1/memory.usage_in_bytes

4259840

可以看到當前內存的使用大小為 4259840 byte,約為 4 M。了解了內存的監控。

下面我們來了解下網絡的監控數據來源

網絡的監控數據來源是從 /proc/{PID}/net/dev 目錄下讀取的,其中 PID 為容器在主機上的進程 ID。下面我們首先使用 docker inspect 命令查看一下上面啟動的 nginx 容器的 PID,命令如下:

$ docker inspect nginx |grep Pid 'Pid': 27348, 'PidMode': '', 'PidsLimit': 0,

可以看到容器的 PID 為 27348,使用 cat 命令查看一下 /proc/27348/net/dev 的內容

$ sudo cat /proc/27348/net/devInter-| Receive | Transmitface |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed lo: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 eth0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

/proc/27348/net/dev 文件記錄了該容器里每一個網卡的流量接收和發送情況,以及錯誤數、丟包數等信息。可見容器的網絡監控數據都是定時從這里讀取并展示的。

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

結語

k8s后面使用metrics serve,cAdvisor 是提供底層數據的,metrics-server 底層數據來源是 cAdvisor

cAdvisor 是提供監控數據的,Prometheus 是負責采集的數據的,這兩個作用是不一樣的,生產集群中一般都是 cAdvisor 配合 Prometheus 一起使用。

以上這篇Docker 容器監控原理及 cAdvisor的安裝與使用說明就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Docker
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
中文字幕免费一区二区| 国产日韩1区| 免费看久久久| 欧美日本久久| 日韩欧美美女在线观看| 日韩精品乱码av一区二区| 蜜臀av一区二区三区| 亚洲一卡久久| 在线精品福利| 欧美日韩91| 捆绑调教美女网站视频一区 | 亚洲久久视频| 日本欧美在线| 国产探花在线精品一区二区| 国产亚洲精品精品国产亚洲综合| 午夜精品福利影院| 欧美日本三区| 精品一区二区三区四区五区| 成人亚洲一区| 日韩在线不卡| 一级欧洲+日本+国产| 综合激情网站| 国产美女久久| 精品在线网站观看| 六月丁香综合| 久久久9色精品国产一区二区三区| 国产欧美激情| 久久久天天操| 丁香婷婷久久| 日韩三级精品| 国产综合色区在线观看| 亚洲精品视频一二三区| 国产一二在线播放| 一区二区国产在线| 日韩成人综合| 国产亚洲一区二区三区不卡| 国产午夜久久av| 国产精品一在线观看| 五月天久久网站| 日本一区二区免费高清| 视频一区中文字幕国产| 国产一区二区三区天码| 亚洲播播91| 99热精品在线| 国产欧美日韩影院| 91亚洲人成网污www| 亚洲网站视频| 日韩激情中文字幕| av一区二区高清| 亚洲免费成人av在线| 日韩1区2区日韩1区2区| 婷婷精品在线观看| 欧美激情在线精品一区二区三区| 一区二区三区四区日本视频| 亚洲国产一区二区在线观看| 五月天久久网站| 国产欧美在线| 欧美亚洲在线日韩| 日韩精品a在线观看91| 国产一区二区三区四区大秀| 在线亚洲自拍| 精品国产美女a久久9999| 黄色亚洲免费| 国产精品videossex久久发布| 国产精品对白久久久久粗| 精品国产第一福利网站| 久久精品国产免费| 国产精品红桃| 999国产精品999久久久久久| 色狠狠一区二区三区| 亚久久调教视频| 少妇精品导航| 国产精品久久久免费| 一区免费在线| 国产aⅴ精品一区二区四区| 视频在线观看91| 亚洲欧美日韩在线观看a三区| 日韩一区二区三区在线看| 日韩有码av| 欧美永久精品| 成人午夜国产| 日韩中文字幕视频网| 你懂的亚洲视频| 亚洲欧美一区在线| 日韩欧美激情| 亚洲欧洲免费| 精品一区电影| 综合激情婷婷| 亚洲福利专区| 国产精品99一区二区三区| 日韩欧乱色一区二区三区在线| 日韩免费视频| 国产精品红桃| 日韩国产一二三区| 亚洲国产一区二区在线观看| 久久精品午夜| 综合在线一区| 亚洲欧洲一区| 久久久久中文| 91中文字幕精品永久在线| 久久最新视频| 国产主播一区| 中文字幕在线视频网站| 日韩精品一区二区三区免费视频| 热久久免费视频| 国产精品1区| 久久国产小视频| 日韩精品中文字幕一区二区| 91偷拍一区二区三区精品| 亚州av日韩av| 亚洲午夜黄色| 日韩国产91| 亚洲va久久久噜噜噜久久| 91精品在线观看国产| 欧美激情日韩| 欧美激情视频一区二区三区免费| 亚洲免费成人| 综合在线一区| 午夜在线视频一区二区区别| 国产理论在线| 欧美国产中文高清| 日韩一区亚洲二区| 欧美精品观看| 久久久久观看| 国产欧美午夜| 美女国产精品| 亚洲精品影院在线观看| 久热re这里精品视频在线6| 欧美亚洲免费| 国产精品三上| 免费一级欧美片在线观看网站| 国产精品毛片视频| 国产欧美综合一区二区三区| 国产精品一线天粉嫩av| 日本在线成人| 精品国产91| 国产精品宾馆| 国产日韩欧美在线播放不卡| 久久精品伊人| 性欧美69xoxoxoxo| 精品高清久久| 日韩一区二区在线免费| 九九色在线视频| sm捆绑调教国产免费网站在线观看 | 成人亚洲欧美| 中文字幕在线高清| 91精品一区二区三区综合在线爱| 亚洲一级二级| 亚洲制服一区| 亚洲精品一区二区妖精| 国产精品亚洲片在线播放| 国产精品videosex极品| 国产精品99久久免费| 国产在线观看91一区二区三区 | 久久激情综合网| 国产在视频一区二区三区吞精| 亚洲免费观看高清完整版在线观| 亚洲激情另类| 中文字幕在线免费观看视频| 国产精品亚洲产品| 亚洲精品一二三区区别| 99亚洲精品| 亚洲三级欧美| 国产一区二区三区四区五区传媒| 久久精品青草| 国产精品亚洲欧美一级在线| 日韩视频不卡| 国产亚洲在线观看| 97se综合| 亚洲天堂av影院| 综合国产精品| 国产欧美69| 欧美精品日日操| 免费日韩一区二区| 欧美中文一区| 国产一区三区在线播放| 亚洲二区精品| 日本欧美在线| 日韩欧美另类一区二区| av成人国产| 国产精品毛片视频| 亚洲无线一线二线三线区别av| 一级成人国产| 精品国产欧美| 黄色亚洲免费| 日韩av午夜在线观看| 日韩理论片av| 日韩欧美久久| 亚洲a在线视频| 欧美亚洲免费| 黄色不卡一区| 国产精品亚洲二区| 欧美特黄一区| 国产高清日韩| 九九久久婷婷| 麻豆国产精品一区二区三区| 国产毛片一区| 国产成人精品三级高清久久91| 亚洲精品极品少妇16p| 国产精品毛片久久|