1. 程式人生 > 實用技巧 >容器網路(十)Docker 最常用的監控方案【73】

容器網路(十)Docker 最常用的監控方案【73】

十、監控

(一)Docker 最常用的監控方案

當 Docker 部署規模逐步變大後,視覺化監控容器環境的效能和健康狀態將會變得越來越重要。

在本章中,我們將討論幾個目前比較常用的容器監控工具和方案,為大家構建自己的監控系統提供參考。

首先我們會討論 Docker 自帶的幾個監控子命令:ps, top 和 stats。然後是幾個功能更強的開源監控工具 sysdig, Weave Scope, cAdvisor 和 Prometheus。最後我們會對這些不同的工具和方案做一個比較。

(1)Docker 自帶的監控子命令

  • ps

    docker container ps是我們早已熟悉的命令了,方便我們檢視當前執行的容器。

    root@ubuntu-01:~# docker container ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    root@ubuntu-01:~#
    
    

前面已經有大量示例,這裡就不贅述了。值得注意的是,新版的 Docker 提供了一個新命令docker container ls,其作用和用法與docker container ps完全一樣。不過ls含義可能比ps更準確,所以更推薦使用。

root@ubuntu-01:~# docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
root@ubuntu-01:~#

  • top

如果想知道某個容器中運行了哪些程序,可以執行 docker container top [container] 命令。

root@ubuntu-01:~# docker container top bbox2 
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                45037               45010               0                   10:34               pts/0               00:00:00            sh
root@ubuntu-01:~# 

上面顯示了 bbox2 這個容器中的程序。命令後面還可以跟上 Linux 作業系統ps命令的引數顯示特定的資訊,比如-au

root@ubuntu-01:~# docker container top bbox2  -au
USER                PID                 %CPU                %MEM                VSZ                 RSS                 TTY                 STAT                START               TIME                COMMAND
root                45037               0.1                 0.0                 1320                4                   pts/0               Ss+                 10:34               0:00                sh
root@ubuntu-01:~# 

  • stats

    docker container stats用於顯示每個容器各種資源的使用情況。

    root@ubuntu-01:~# docker container stats
    
    CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
    555e99376d37        bbox2               0.00%               976KiB / 1.924GiB   0.05%               1.26kB / 0B         0B / 0B             1
    
    CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
    555e99376d37        bbox2               0.00%               976KiB / 1.924GiB   0.05%               1.26kB / 0B         0B / 0B             1
    
    CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
    555e99376d37        bbox2               0.00%               976KiB / 1.924GiB   0.05%               1.26kB / 0B         0B / 0B             1
    
    CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
    555e99376d37        bbox2               0.00%               976KiB / 1.924GiB   0.05%               1.26kB / 0B         0B / 0B             1
    
    CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
    555e99376d37        bbox2               0.00%               976KiB / 1.924GiB   0.05%               1.26kB / 0B         0B / 0B             1
    ^C
    root@ubuntu-01:~# 
    
    

    預設會顯示一個實時變化的列表,展示每個容器的 CPU 使用率,記憶體使用量和可用量。

    注意:容器啟動時如果沒有特別指定記憶體 limit,stats 命令會顯示 host 的記憶體總量,但這並不意味著每個 container 都能使用到這麼多的記憶體。

    除此之外 docker container stats 命令還會顯示容器網路和磁碟的 IO 資料。

    預設的輸出有個缺點,顯示的是容器 ID 而非名字。我們可以在 stats 命令後面指定容器的名稱只顯示某些容器的資料。比如 docker container stats sysdig weave

    ps,top, stats 這幾個命令是 docker 自帶的,優點是執行方便,很適合想快速瞭解容器執行狀態的場景。其缺點是輸出的資料有限,而且都是實時資料,無法反應歷史變化和趨勢。接下來要介紹的幾個監控工具會提供更豐富的功能。