來自:民工哥技術之路(微訊號:jishuroad)
為什麼需要監控??
對於一個物理機上執行多個容器應用時,容器的執行情況如:CPU使用率、記憶體使用率、網路狀態、磁碟空間
等資訊,都是需要去瞭解的,因此監控是必須的。對於容器的監控方案可謂多種多樣,本身自帶命令docker stats。
[root@docker ~]# docker stats
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
bd96d72ed9c7 0.04% 14.97 MiB / 7.64 GiB 0.19% 8.22 MB / 805 MB 0 B / 0 B 9
665563143eb7 0.01% 18.12 MiB / 7.64 GiB 0.23% 19.7 MB / 18.5 MB 0 B / 39.4 MB 8
f2304dad5855 0.18% 98.45 MiB / 7.64 GiB 1.26% 1.07 GB / 9.97 MB 0 B / 2.13 GB 9
今天民工哥要介紹的是一款開源方案cAdvisor+InfluxDB+Grafana。
元件簡介
cAdvisor:用於資料採集
cadvisor谷歌公司自己用來監控他們基礎設施的一款工具,這個工具厲害之處不僅能監控docker容器的實時資訊,而且還能將你的cadvisor這容器所在的主機的系統的實時資訊,但是由於cadvisor只是能監控到實時的資訊而不能儲存。
InfluxDB:用於資料儲存
InfluxDB 是用Go語言編寫的一個開源分散式時序、事件和指標資料庫,無需外部依賴。所以我們要使用influxdb將這些實時監控到的資訊存放起來。
InfluxDB主要特色功能
基於時間序列,支援與時間有關的相關函式(如最大,最小,求和等);
可度量性:你可以實時對大量資料進行計算;
基於事件:它支援任意的事件資料;
InfluxDB主要特點
無結構(無樣式)
可以是任意數量的列
可拓展的;
支援min, max, sum, count, mean, median 等一系列函式,方便統計
原生的HTTP支援,內建HTTP API
強大的類SQL語法
自帶管理介面,方便使用
參考文章:https://www.influxdata.com/products/
Grafana: 用於資料展示
Grafana是一個視覺化面板(Dashboard),有著非常漂亮的圖表和佈局展示,功能齊全的度量儀錶盤和圖形編輯器,支援Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作為資料源。
Grafana主要特性:
靈活豐富的圖形化選項
可以混合多種風格
支援白天和夜間樣式
多個資料源。
安裝佈署過程
首先得有docker環境,這個就不用介紹了吧,請參考前面的文章
1、部署influxDB服務
[root@master ~]# docker run -d --name influxdb -p 8086:8086 tutum/influxdb
Unable to find image 'tutum/influxdb:latest' locally
Trying to pull repository docker.io/tutum/influxdb ...
latest: Pulling from docker.io/tutum/influxdb
a3ed95caeb02: Pull complete
23efb549476f: Pull complete
aa2f8df21433: Pull complete
ef072d3c9b41: Pull complete
c9f371853f28: Pull complete
a248b0871c3c: Pull complete
749db6d368d0: Pull complete
db2492acfcc3: Pull complete
b7e7d2e12d53: Pull complete
4272a53eef10: Pull complete
9b2fefdb5321: Pull complete
Digest: sha256:5b7c5e318303ad059f3d1a73d084c12cb39ae4f35f7391b79b0ff2c0ba45304b
Status: Downloaded newer image for docker.io/tutum/influxdb:latest
f384db08ffc78e01fc27bf4c35dc6503b0fd2473cd8d5114b4d8a5475f928b53
說明:
-d :後臺執行此容器
–name :啟運容器分配名字influxdb
-p :對映埠,8083埠為infuxdb管理埠,8086埠是infuxdb的資料埠
tutum/influxdb:透過這個容器來執行的,預設會在docker官方倉庫pull下來
檢視容器
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2304dad5855 tutum/influxdb "/run.sh" 4 seconds ago Up 4 seconds 0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp influxdb
現在可以透過瀏覽器去訪問influxdb的管理端了
接下來建立cadvisor的資料庫與使用者,這個用於後期配置granfa
回車直接建立完成如下圖
建立管理使用者
建立完成如下圖
同時也是可以使用CLI命令列介面來建立的,命令一樣
2、佈署cadvisor服務
[root@master ~]# docker run -d
--name=cadvisor
-p 8082:8080
-v /:/rootfs,ro
-v /var/run:/var/run
-v /sys:/sys,ro
-v /var/lib/docker/:/var/lib/docker,ro
google/cadvisor
-storage_driver=influxdb
-storage_driver_db=cadvisor
-storage_driver_host=influxdb:8086
Unable to find image 'google/cadvisor:latest' locally
Trying to pull repository docker.io/google/cadvisor ...
latest: Pulling from docker.io/google/cadvisor
ab7e51e37a18: Pull complete
a2dc2f1bce51: Pull complete
3b017de60d4f: Pull complete
Digest: sha256:9e347affc725efd3bfe95aa69362cf833aa810f84e6cb9eed1cb65c35216632a
Status: Downloaded newer image for docker.io/google/cadvisor:latest
a212dc33c9424b6e36485334511e6317bdebc06977b9af374b81b0cab113e724
說明:
-d :後臺執行此容器
–name :啟運容器分配名字cadvisor
-p :對映埠8082:8080(由於環境8080埠被佔用,cadvisor預設埠是8080不建議修改)
-v:把宿主機的目錄對映到容器中,這些目錄都是cadviso需要採集的目錄檔案和監控內容
-storage_driver:需要指定cadvisor的儲存驅動、資料庫主機、資料庫名
google/cadvisor:透過cadvisor這個映象來執行容器,預設會在docker官方倉庫把映象pull下來;
檢視cadvisor容器:
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a212dc33c942 google/cadvisor "/usr/bin/cadvisor..." 2 minutes ago Up 2 minutes 0.0.0.0:8082->8080/tcp cadvisor
現在可以透過瀏覽訪問cadisor的管理頁面
cadvisor的基礎圖形功能也酷炫的
測試是否寫入influxdb資料庫
3、佈署granafa
[root@master ~]# docker run -d --name grafana -p 3000:3000 grafana/grafana
Unable to find image 'grafana/grafana:latest' locally
Trying to pull repository docker.io/grafana/grafana ...
latest: Pulling from docker.io/grafana/grafana
f2aa67a397c4: Pull complete
89573effc7c8: Pull complete
b55c103da375: Pull complete
Digest: sha256:364bec4a39ecbec744ea4270aae35f6554eb6f2047b3ee08f7b5f1134857c32c
Status: Downloaded newer image for docker.io/grafana/grafana:latest
665563143eb74e5e2e76b7a1533cbf67a68590d355b0b22d453eac07e0e0b616
[root@master ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
665563143eb7 grafana/grafana "/run.sh" 48 seconds ago Up 47 seconds 0.0.0.0:3000->3000/tcp grafana
訪問WEB管理端
使用者名稱:密碼 admin:admin
新增資料源
之後儲存並測試連線
新建New dashboard
這裡隨便選擇一個容器做為測試使用,實際環境可根據實際環境填寫
儲存傳回到HOME介面後,如下圖
最終的效果圖如下
●編號190,輸入編號直達本文
●輸入m獲取文章目錄
Linux學習
更多推薦《18個技術類微信公眾號》
涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。