1. 程式人生 > >docker入門基礎(五)

docker入門基礎(五)

密碼 using hue 信息 abc 模型 net work 不清楚

目錄

  • 七、Docker 最常用的監控方案
    • 1、Docker 自帶的監控子命令
    • 2、sysdig
    • 3、scope
    • 4、cAdvisor
    • 5、Prometheus
    • 6、各種方案對比

七、Docker 最常用的監控方案

1、Docker 自帶的監控子命令

1)ps

docker container ps 是我們早已熟悉的命令了,方便我們查看當前運行的容器。

[root@host1 ~]# docker container ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS               NAMES
b3c485a2e81a        busybox                       "sh"                     About an hour ago   Up About an hour                        recursing_villani
17eccfdf171d        httpd                         "httpd-foreground"       2 hours ago         Up 2 hours                              web1
157cf44e2b18        busybox                       "sh"                     3 hours ago         Up 3 hours                              bbox3
6e3d4928bb05        busybox                       "sh"                     5 hours ago         Up 5 hours                              bbox1
79e3327cf198        quay.io/calico/node:v2.6.12   "start_runit"            6 hours ago         Up 6 hours                              calico-node
16a9df891e00        weaveworks/weave:2.5.0        "/home/weave/weaver …"   26 hours ago        Up 6 hours                              weave

新版的 Docker 提供了一個新命令 docker container ls,其作用和用法與 docker container ps 完全一樣。不過 ls 含義可能比 ps 更準確,所以更推薦使用。

[root@host1 ~]# docker container ls
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS               NAMES
b3c485a2e81a        busybox                       "sh"                     About an hour ago   Up About an hour                        recursing_villani
17eccfdf171d        httpd                         "httpd-foreground"       2 hours ago         Up 2 hours                              web1
157cf44e2b18        busybox                       "sh"                     3 hours ago         Up 3 hours                              bbox3
6e3d4928bb05        busybox                       "sh"                     5 hours ago         Up 5 hours                              bbox1
79e3327cf198        quay.io/calico/node:v2.6.12   "start_runit"            6 hours ago         Up 6 hours                              calico-node
16a9df891e00        weaveworks/weave:2.5.0        "/home/weave/weaver …"   26 hours ago        Up 6 hours                              weave

2)top

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

[root@host1 ~]# docker container top b3c485a2e81a
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                40418               40402               0                   15:34               ?                   00:00:00            sh

上面顯示了 sysdig 這個容器中的進程。命令後面還可以跟上 Linux 操作系統 ps 命令的參數顯示特定的信息,比如 -au

[root@host1 ~]# docker container top b3c485a2e81a -au
USER                PID                 %CPU                %MEM                VSZ                 RSS                 TTY                 STAT                START               TIME                COMMAND
root                40418               0.0                 0.0                 1240                260                 ?                   Ss+                 15:34               0:00                sh

3)stats

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

[root@host1 ~]# docker container stats

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
b3c485a2e81a        recursing_villani   0.00%               52KiB / 972.6MiB      0.01%               746B / 306B         0B / 0B             1
17eccfdf171d        web1                0.00%               2.367MiB / 972.6MiB   0.24%               1.2kB / 975B        4.71MB / 0B         82
157cf44e2b18        bbox3               0.00%               56KiB / 972.6MiB      0.01%               1.67kB / 2.82kB     0B / 4.1kB          1
6e3d4928bb05        bbox1               0.00%               52KiB / 972.6MiB      0.01%               1.08kB / 642B       0B / 0B             1
79e3327cf198        calico-node         0.76%               24.93MiB / 972.6MiB   2.56%               0B / 0B             89.1MB / 19.5kB     41
16a9df891e00        weave               0.13%               36.6MiB / 972.6MiB    3.76%               0B / 0B             25.7MB / 12.3kB     16

默認會顯示一個實時變化的列表,展示每個容器的 CPU 使用率,內存使用量和可用量。

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

除此之外 docker container stats 命令還會顯示容器網絡和磁盤的 IO 數據。

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

[root@host1 ~]# docker container stats bbox1 bbox3

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
6e3d4928bb05        bbox1               0.00%               52KiB / 972.6MiB    0.01%               1.08kB / 642B       0B / 0B             1
157cf44e2b18        bbox3               0.00%               56KiB / 972.6MiB    0.01%               1.67kB / 2.82kB     0B / 4.1kB          1

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

2、sysdig

sysdig 是一個輕量級的系統監控工具,同時它還原生支持容器。通過 sysdig 我們可以近距離觀察 linux 操作系統和容器的行為。

Linux 上有很多常用的監控工具,比如 strace,tcpdump,htop, iftop,lsof ......

而 sysdig 則是將這些工具的功能集成到一個工具中,並且提供一個友好統一的操作界面。

下面我們將演示 sysdig 強大的監控能力。

安裝和運行 sysdig 的最簡單方法是運行 Docker 容器,命令行為:

docker container run -it --rm --name=sysdig --privileged=true           --volume=/var/run/docker.sock:/host/var/run/docker.sock           --volume=/dev:/host/dev           --volume=/proc:/host/proc:ro           --volume=/boot:/host/boot:ro           --volume=/lib/modules:/host/lib/modules:ro           --volume=/usr:/host/usr:ro           sysdig/sysdig

可以看到,sysdig 容器是以 privileged 方式運行,而且會讀取操作系統 /dev/proc 等數據,這是為了獲取足夠的系統信息。

啟動後,通過 docker container exec -it sysdig bash 進入容器,執行 csysdig 命令,將以交互方式啟動 sysdig。

root@94ff839eabc1:/# csysdig

這是一個類似 linux top 命令的界面,但要強大太多。sysdig 按不同的 View 來監控不同類型的資源,點擊底部 Views 菜單(或者按 F2),顯示 View 選擇列表。

界面左邊列出了 sysdig 支持的 View,一共 30 多項,涵蓋了操作系統的各個方面,因為這裏主要是討論容器監控,所以我們將光標移到 Containers這一項,界面右邊立即顯示出此 View 的功能介紹。

回車或者雙擊 Containers,進入容器監控界面。

sysdig 會顯示該 Host 所有容器的實時數據,每兩秒刷新一次。各列數據的含義也是自解釋的,如果不清楚,可以點一下底部 Legend(或者按 F7)。如果想按某一列排序,比如按使用的內存量,很簡單,點一下列頭 VIRT

如果想看某個容器運行的進程,比如 weavescope,將光標移到目標容器,然後回車或者雙擊。

還可以繼續雙擊查看進程中的線程。

返回上一級,按退格鍵即可。

sysdig 的交互功能很強,如果界面顯示的條目很多,可以點擊底部 Search菜單,然後輸入關鍵字進行查找。如下圖,關鍵字為 service

如果覺得界面刷新太快,看不清楚關註的信息,可以點擊底部 Pause 菜單。

sysdig 的特點如下:

  1. 監控信息全,包括 Linux 操作系統和容器。
  2. 界面交互性強。

不過 sysdig 顯示的是實時數據,看不到變化和趨勢。而且是命令行操作方式,需要 ssh 到 Host 上執行,會帶來一些不便。

3、scope

Weave Scope 的最大特點是會自動生成一張 Docker 容器地圖,讓我們能夠直觀地理解、監控和控制容器。

安裝運行 weave scope

[root@host1 ~]# curl -L git.io/scope -o /usr/local/bin/scope
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:03 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:04 --:--:--     0
  0     0    0   595    0     0    114      0 --:--:--  0:00:05 --:--:--  581k
100 11664  100 11664    0     0   1494      0  0:00:07  0:00:07 --:--:--  8145
[root@host1 ~]# chmod a+x /usr/local/bin/scope
[root@host1 ~]# scope launch
Unable to find image ‘weaveworks/scope:1.10.1‘ locally
1.10.1: Pulling from weaveworks/scope
ff3a5c916c92: Pull complete 
3453b1fadeb0: Pull complete 
045b82da571f: Pull complete 
36a634ed736d: Pull complete 
3f77d3bb8ba0: Pull complete 
b05d4f3850c9: Pull complete 
b8acee35802d: Pull complete 
4052e4377e74: Pull complete 
872e29ba66ae: Pull complete 
b63efc9f1ec6: Pull complete 
Digest: sha256:2887407cb701236ad0ac2d581055ab58318f12d352ab25b76a0c516b191fab7a
Status: Downloaded newer image for weaveworks/scope:1.10.1
38b86ddf73daf460f473e5762f576058eee1ad3414b001bf237af4e24a54be27
Scope probe started
Weave Scope is listening at the following URL(s):
  * http://10.32.0.3:4040/
  * http://172.16.1.120:4040/
  * http://192.168.2.120:4040/

scope launch 將以容器方式啟動 Weave Scope。

[root@host1 ~]# docker container ls
CONTAINER ID        IMAGE                         COMMAND                  CREATED              STATUS              PORTS               NAMES
38b86ddf73da        weaveworks/scope:1.10.1       "/home/weave/entrypo…"   About a minute ago   Up About a minute                       weavescope
b3c485a2e81a        busybox                       "sh"                     2 hours ago          Up 2 hours                              recursing_villani
17eccfdf171d        httpd                         "httpd-foreground"       2 hours ago          Up 2 hours                              web1
157cf44e2b18        busybox                       "sh"                     3 hours ago          Up 3 hours                              bbox3
6e3d4928bb05        busybox                       "sh"                     6 hours ago          Up 6 hours                              bbox1
79e3327cf198        quay.io/calico/node:v2.6.12   "start_runit"            6 hours ago          Up 6 hours                              calico-node
16a9df891e00        weaveworks/weave:2.5.0        "/home/weave/weaver …"   26 hours ago         Up 6 hours                              weave

根據提示,Weave Scope 的訪問地址為 http://[Host_IP]:4040/

容器監控

Weave Scope 地圖中間顯示了 Host 當前運行的容器,不過少了幾個 weave 相關的容器。

Weave Scope 將容器分為兩類:Weave 自己的容器 System Container,和其他容器 Application Container,默認只顯示後者。

Weave Scope 界面是一個可交互的地圖,使用起來很方便。比如點擊地圖左下角選擇開關 All

地圖上會立刻會顯示出所有的容器。

點擊 CPU 選擇器。

Weave Scope 將以高低水位方式顯示容器 CPU 使用量。

如果此時我們將鼠標放到容器圖標上,則會顯示具體的 CPU%。

如果要查看容器的詳細信息,比如 sysdig,可以點擊該容器的圖標。

詳細信息包括這麽幾部分:

Status

CPU、內存的實時使用情況以及歷史曲線。

INFO

容器 image、啟動命令、狀態、網絡等信息。

以下幾項需拉動滾動條查看。

詳細信息包括這麽幾部分:

Status

CPU、內存的實時使用情況以及歷史曲線。

INFO

容器 image、啟動命令、狀態、網絡等信息。

在容器信息的上面還有一排操作按鈕。

技術分享圖片

分別是:

技術分享圖片 attach 到容器啟動進程,相當於執行 docker container attach

技術分享圖片 打開 shell,相當於執行 docker container exec

技術分享圖片 重啟容器,相當於執行 docker container restart

技術分享圖片 暫停容器,相當於執行 docker container pause

技術分享圖片 關閉容器,相當於執行 docker container stop

這排按鈕使我們能夠遠程控制容器,相當方便。最常用的可能就是 了。比如可以直接跳進 sysdig 容器,啟動 csysdig 監控工具。

技術分享圖片

多主機監控
前面我們已經領略了 Weave Scope 的豐富功能和友好的操作界面。不過它還有一個重要功能:多主機監控。

真正的部署環境都不可能只有一個 host,如果能在一個界面上監控整個容器環境,那絕對是件非常有效率的事情。下面我們就來實踐這個功能。

兩個 Docker Host:

host1: 192.168.2.120
host2: 192.168.56.130

在兩個 host 上都執行如下命令:

scope launch 192.168.2.120 192.168.2.130

這樣,無論訪問 http://192.168.2.130:4040 還是 http://192.168.2.120:4040,都能監控到兩個 host。

Weave Scope 還支持邏輯條件查詢,比如輸入 cpu > 2,立刻回找出 CPU 利用率高於 2% 的容器。

4、cAdvisor

cAdvisor 是 google 開發的容器監控工具,我們來看看 cAdvisor 有什麽能耐。

在 host 1中運行 cAdvisor 容器。

docker run   --volume=/:/rootfs:ro   --volume=/var/run:/var/run:rw   --volume=/sys:/sys:ro   --volume=/var/lib/docker/:/var/lib/docker:ro   --publish=8080:8080   --detach=true   --name=cadvisor   google/cadvisor:latest

通過 http://[Host_IP]:8080 訪問 cAdvisor。

監控 Docker Host

cAdvisor 會顯示當前 host 的資源使用情況,包括 CPU、內存、網絡、文件系統等。

以上就是 cAdvisor 的主要功能,總結起來主要兩點:

  1. 展示 Host 和容器兩個層次的監控數據。
  2. 展示歷史變化數據。

由於 cAdvisor 提供的操作界面略顯簡陋,而且需要在不同頁面之間跳轉,並且只能監控一個 host,這不免會讓人質疑它的實用性。但 cAdvisor 的一個亮點是它可以將監控到的數據導出給第三方工具,由這些工具進一步加工處理。

我們可以把 cAdvisor 定位為一個監控數據收集器,收集和導出數據是它的強項,而非展示數據。

5、Prometheus

Prometheus 是一個非常優秀的監控工具。準確的說,應該是監控方案。Prometheus 提供了監控數據搜集、存儲、處理、可視化和告警一套完整的解決方案。

讓我們先來看看 Prometheus 的架構。

Prometheus Server

Prometheus Server 負責從 Exporter 拉取和存儲監控數據,並提供一套靈活的查詢語言(PromQL)供用戶使用。

Exporter

Exporter 負責收集目標對象(host, container…)的性能數據,並通過 HTTP 接口供 Prometheus Server 獲取。

可視化組件

監控數據的可視化展現對於監控方案至關重要。以前 Prometheus 自己開發了一套工具,不過後來廢棄了,因為開源社區出現了更為優秀的產品 Grafana。Grafana 能夠與 Prometheus 無縫集成,提供完美的數據展示能力。

Alertmanager

用戶可以定義基於監控數據的告警規則,規則會觸發告警。一旦 Alermanager 收到告警,會通過預定義的方式發出告警通知。支持的方式包括 Email、PagerDuty、Webhook 等.

也許一些熟悉其他監控方案的同學看了 Prometheus 的架構會不以為然,“這些功能 Zabbix、Graphite、Nagios 這類監控系統也都有,沒什麽特別的啊!”。

Prometheus 最大的亮點和先進性是它的多維數據模型.

我們先來看一個例子。

比如要監控容器 webapp1 的內存使用情況,最傳統和典型的方法是定義一個指標 container_memory_usage_bytes_webapp1 來記錄 webapp1 的內存使用數據。假如每1分鐘取一次樣,那麽在數據庫裏就會有記錄。

技術分享圖片

好,現在需求發生了點變化,我們需要知道所有 webapp 容器的內存使用情況。如果還是采用前面的方法,就不得不增加新的指標 container_memory_usage_bytes_webapp2container_memory_usage_bytes_webapp3

像 Graphite 這類更高級的監控方案采用了更為優雅的層次化數據模型。為了滿足上面的需求,Graphite 會定義指標 container.memory_usage_bytes.webapp1container.memory_usage_bytes.webapp2container.memory_usage_bytes.webapp3

然後就可以用 container.memory_usage_bytes.webapp* 獲取所有的 webapp 的內存使用數據。

此外,Graphite 還支持 sum() 等函數對指標進行計算和處理,比如 sum(container.memory_usage_bytes.webapp*) 可以得到所有 webapp 容器占用的總內存量。

目前為止問題處理得都很好。但客戶總是會提出更多的需求:現在不僅要按容器名字統計內存使用量,還要按鏡像來統計;或者想對比一下某一組容器在生產環境和測試環境中對內存使用的不同情況。

當然你可以說:只要定義更多的指標就能滿足這些需求。比如 container.memory_usage_bytes.image1.webapp1container.memory_usage_bytes.webapp1.prod等。

但問題在於我們沒辦法提前預知客戶要用這些數據回答怎樣的問題,所以我們沒辦法提前定義好所有的指標。

下面來看看 Prometheus 的解決方案。

Prometheus 只需要定義一個全局的指標 container_memory_usage_bytes,然後通過添加不同的維度數據來滿足不同的業務需求。

比如對於前面 webapp1 的三條取樣數據,轉換成 Prometheus 多維數據將變成:

技術分享圖片

後面三列 container_nameimageenv 就是數據的三個維度。想象一下,如果不同 env(prod、test、dev),不同 image(mycom/webapp:1.2、mycom/webapp:1.3)的容器,它們的內存使用數據中標註了這三個維度信息,那麽將能滿足很多業務需求,比如:

  1. 計算 webapp2 的平均內存使用情況:avg(container_memory_usage_bytes{container_name=“webapp2”})
  2. 計算運行 mycom/webapp:1.3 鏡像的所有容器內存使用總量:sum(container_memory_usage_bytes{image=“mycom/webapp:1.3”})
  3. 統計不同運行環境中 webapp 容器內存使用總量:sum(container_memory_usage_bytes{container_name=~“webapp”}) by (env)

這裏只列了幾個例子,不過已經能夠說明 Prometheus 數據模型的優勢了:

  1. 通過維度對數據進行說明,附加更多的業務信息,進而滿足不同業務的需求。同時維度是可以動態添加的,比如再給數據加上一個 user 維度,就可以按用戶來統計容器內存使用量了。
  2. Prometheus 豐富的查詢語言能夠靈活、充分地挖掘數據的價值。前面示例中的 avg、sum、by 只是查詢語言中很小的一部分功能,已經為我們展現了 Prometheus 對多維數據進行分片、聚合的強大能力。

部署Promethues

我們將通過 Prometheus 監控兩臺 Docker Host:192.168.2.120 和 192.168.2.130,監控 host 和容器兩個層次的數據。

按照架構圖,我們需要運行如下組件:

Prometheus Server

Prometheus Server 本身也將以容器的方式運行在 host 192.168.2.130 上。

Exporter

Prometheus 有很多現成的 Exporter,完整列表請參考 https://prometheus.io/docs/instrumenting/exporters/

我們將使用:

  1. Node Exporter,負責收集 host 硬件和操作系統數據。它將以容器方式運行在所有 host 上。
  2. cAdvisor,負責收集容器數據。它將以容器方式運行在所有 host 上。

Grafana

顯示多維數據,Grafana 本身也將以容器方式運行在 host 192.168.2.130 上。

運行 Node Exporter

在兩個 host 上執行如下命令:

docker run -d -p 9100:9100   -v "/proc:/host/proc"   -v "/sys:/host/sys"   -v "/:/rootfs"   --net=host   prom/node-exporter   --path.procfs /host/proc   --path.sysfs /host/sys   --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"
[root@host1 ~]# docker run -d -p 9100:9100 >   -v "/proc:/host/proc" >   -v "/sys:/host/sys" >   -v "/:/rootfs" >   --net=host >   prom/node-exporter >   --path.procfs /host/proc >   --path.sysfs /host/sys >   --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"
Unable to find image ‘prom/node-exporter:latest‘ locally
latest: Pulling from prom/node-exporter
0de338cf4258: Pull complete 
f508012419d8: Pull complete 
d764f7880123: Pull complete 
Digest: sha256:c390c8fea4cd362a28ad5070aedd6515aacdfdffd21de6db42ead05e332be5a9
Status: Downloaded newer image for prom/node-exporter:latest
WARNING: Published ports are discarded when using host network mode
b5c7f8e81a107e9f3e961b9b707b107434a63cd46cda30262244f93ca0cd353c

註意,這裏我們使用了 --net=host,這樣 Prometheus Server 可以直接與 Node Exporter 通信。

Node Exporter 啟動後,將通過 9100 提供 host 的監控數據。在瀏覽器中通過 http://192.168.2.120:9100/metrics 測試一下。

運行 cAdvisor

在兩個 host 上執行如下命令:

docker run   --volume=/:/rootfs:ro   --volume=/var/run:/var/run:rw   --volume=/sys:/sys:ro   --volume=/var/lib/docker/:/var/lib/docker:ro   --publish=8080:8080   --detach=true   --name=cadvisor   --net=host   google/cadvisor:latest
運行 Prometheus Server

在 host 192.168.2.130 上執行如下命令:

docker run -d -p 9090:9090   -v /root/prometheus.yml:/etc/prometheus/prometheus.yml   --name prometheus   --net=host   prom/prometheus

註意,這裏我們使用了 --net=host,這樣 Prometheus Server 可以直接與 Exporter 和 Grafana 通信。

prometheus.yml 是 Prometheus Server 的配置文件。

最重要的配置是:

static_configs:
  - targets: [‘localhost:9090‘,‘localhost:8080‘,‘localhost:9100‘,‘192.168.2.120:8080‘,‘192.168.2.120:9100‘]

指定從哪些 exporter 抓取數據。這裏指定了兩臺 host 上的 Node Exporter 和 cAdvisor。

另外 localhost:9090 就是 Prometheus Server 自己,可見 Prometheus 本身也會收集自己的監控數據。同樣地,我們也可以通過 http://192.168.2.130:9090/metrics 測試一下。

在瀏覽器中打開 http://192.168.2.130:9090 ,點擊菜單 Status -> Targets

如下圖所示:

所有 TargetState 都是 UP,說明 Prometheus Server 能夠正常獲取監控數據。

運行 Grafana

在 host 192.168.2.130上執行如下命令:

docker run -d -i -p 3000:3000   -e "GF_SERVER_ROOT_URL=http://grafana.server.name"    -e "GF_SECURITY_ADMIN_PASSWORD=secret"    --net=host   grafana/grafana

註意,這裏我們使用了 --net=host,這樣 Grafana 可以直接與 Prometheus Server 通信。

-e "GF_SECURITY_ADMIN_PASSWORD=secret 指定了 Grafana admin用戶密碼 secret

Grafana 啟動後。在瀏覽器中打開 http://192.168.2.130:3000/

登錄後,Grafana 將引導我們配置 Data Source。

Name 為 Data Source 命名,例如 prometheus

Type 選擇 Prometheus

Url 輸入 Prometheus Server 的地址 http://192.168.2.130:9090

其他保持默認值,點擊 Add

如果一切順利,Grafana 應該已經能夠訪問 Prometheus 中存放的監控數據了,那麽如何展示呢?

Grafana 是通過 Dashboard 展示數據的,在 Dashboard 中需要定義:

  1. 展示 Prometheus 的哪些多維數據?需要給出具體的查詢語言表達式。
  2. 用什麽形式展示,比如二維線性圖,儀表圖,各種坐標的含義等。

可見,要做出一個 Dashboard 也不是件容易的事情。幸運的是,我們可以借助開源社區的力量,直接使用現成的 Dashboard。

訪問 https://grafana.com/dashboards?dataSource=prometheus&search=docker,將會看到很多用於監控 Docker 的 Dashboard。

我們可以下載這些現成的 Dashboard,然後 import 到我們的 Grafana 中就可以直接使用了。

比如下載 Docker and system monitoring,得到一個 json 文件,然後點擊 Grafana 左上角菜單 Dashboards -> Import

導入我們下載的 json 文件。

Dashboard 將立刻展示出漂亮的圖表。

在這個 Dashboard 中,上部分是 host 的數據,我們可以通過 Node 切換不同的 host。

Dashboard 的下半部分展示的是所有的容器監控數據。Grafana 的 Dashboard 是可交互的,我們可以在圖表上只顯示指定的容器、選取指定的時間區間、重新組織和排列圖表、調整刷新頻率,功能非常強大。

6、各種方案對比

部署容易度

ps/top/stats 無疑是最容易使用的,它們是 Docker 自帶的子命令,隨時隨地都可以用來快速了解容器的狀態。其余幾種也都能以容器的方式運行,總的來說都不算復雜。相對而言,Prometheus 涉及的組件比較多,搭建整個方案需要運行的容器數量也要多些,部署和管理的難道稍大。

數據詳細度

ps/top/stats 和 cAdvisor 能夠監控容器基本的資源使用情況,Sysdig、Weave Scope 和 Prometheus 則能提供更豐富的數據。

多 Host 監控

Weave Scope 和 Prometheus 可以監控整個集群,而其余的工具只提供單個 Host 的監控能力。

告警功能

只有 Prometheus 具備原生的告警功能。

監控非容器資源

Sysdig、Weave Scope 和 cAdvisor 可以監控到 Host 操作系統的狀態, Prometheus 則可以通過 Exporter 支持應用級別的監控,比如監控 ceph、haproxy 等。

幾點建議

  1. Docker ps/top/stats 最適合快速了解容器運行狀態,從而判斷是否需要進一步分析和排查。
  2. Sysdig 提供了的豐富的分析和挖掘功能,是 Troubleshooting 的神器。
  3. cAdvisor 一般不會單獨使用,通常作為其他監控工具的數據收集器,比如 Prometheus。
  4. Weave Scope 流暢簡潔的操控界面是其最大亮點,而且支持直接在 Web 界面上執行命令。
  5. Prometheus 的數據模型和架構決定了它幾乎具有無限的可能性。Prometheus 和 Weave Scope 都是優秀的容器監控方案。除此之外,Prometheus 還可以監控其他應用和系統,更為綜合和全面。
  6. 監控系統的選擇,並不是一道單選題,應該根據需求和實際情況搭配組合,優勢互補。除了這裏介紹的 5 種工具和方案,監控領域還有很多選項,也都可以考慮。

docker入門基礎(五)