為什么需要監(jiān)控哗脖?瀑踢?
對(duì)于一個(gè)物理機(jī)上運(yùn)行多個(gè)容器應(yīng)用時(shí),容器的運(yùn)行情況如:CPU使用率才避、內(nèi)存使用率橱夭、網(wǎng)絡(luò)狀態(tài)、磁盤(pán)空間
等信息桑逝,都是需要去了解的棘劣,因此監(jiān)控是必須的。對(duì)于容器的監(jiān)控方案可謂多種多樣楞遏,本身自帶命令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
今天民工哥要介紹的是一款開(kāi)源方案cAdvisor+InfluxDB+Grafana。
組件簡(jiǎn)介
cAdvisor:用于數(shù)據(jù)采集
cadvisor谷歌公司自己用來(lái)監(jiān)控他們基礎(chǔ)設(shè)施的一款工具寡喝,這個(gè)工具厲害之處不僅能監(jiān)控docker容器的實(shí)時(shí)信息糙俗,而且還能將你的cadvisor這容器所在的主機(jī)的系統(tǒng)的實(shí)時(shí)信息,但是由于cadvisor只是能監(jiān)控到實(shí)時(shí)的信息而不能保存拘荡。
InfluxDB:用于數(shù)據(jù)存儲(chǔ)
InfluxDB 是用Go語(yǔ)言編寫(xiě)的一個(gè)開(kāi)源分布式時(shí)序臼节、事件和指標(biāo)數(shù)據(jù)庫(kù),無(wú)需外部依賴(lài)珊皿。所以我們要使用influxdb將這些實(shí)時(shí)監(jiān)控到的信息存放起來(lái)网缝。
InfluxDB主要特色功能
- 基于時(shí)間序列,支持與時(shí)間有關(guān)的相關(guān)函數(shù)(如最大蟋定,最小粉臊,求和等);
- 可度量性:你可以實(shí)時(shí)對(duì)大量數(shù)據(jù)進(jìn)行計(jì)算驶兜;
- 基于事件:它支持任意的事件數(shù)據(jù)扼仲;
InfluxDB主要特點(diǎn)
- 無(wú)結(jié)構(gòu)(無(wú)模式)
- 可以是任意數(shù)量的列
- 可拓展的;
- 支持min, max, sum, count, mean, median 等一系列函數(shù)抄淑,方便統(tǒng)計(jì)
- 原生的HTTP支持屠凶,內(nèi)置HTTP API
- 強(qiáng)大的類(lèi)SQL語(yǔ)法
- 自帶管理界面,方便使用
Grafana: 用于數(shù)據(jù)展示
Grafana是一個(gè)可視化面板(Dashboard)肆资,有著非常漂亮的圖表和布局展示矗愧,功能齊全的度量?jī)x表盤(pán)和圖形編輯器,支持Graphite郑原、zabbix唉韭、InfluxDB夜涕、Prometheus和OpenTSDB作為數(shù)據(jù)源。
Grafana主要特性:
- 靈活豐富的圖形化選項(xiàng)
- 可以混合多種風(fēng)格
- 支持白天和夜間模式
- 多個(gè)數(shù)據(jù)源属愤。
安裝布署過(guò)程
首先得有docker環(huán)境女器,這個(gè)就不用介紹了吧,請(qǐng)參考前面的文章
1住诸、部署influxDB服務(wù)
[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
說(shuō)明:
- -d :后臺(tái)運(yùn)行此容器
- --name :?jiǎn)⑦\(yùn)容器分配名字influxdb
- -p :映射端口驾胆,8083端口為infuxdb管理端口,8086端口是infuxdb的數(shù)據(jù)端口
- tutum/influxdb:通過(guò)這個(gè)容器來(lái)運(yùn)行的只壳,默認(rèn)會(huì)在docker官方倉(cāng)庫(kù)pull下來(lái)
查看容器
[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
現(xiàn)在可以通過(guò)瀏覽器去訪問(wèn)influxdb的管理端了
接下來(lái)創(chuàng)建cadvisor的數(shù)據(jù)庫(kù)與用戶俏拱,這個(gè)用于后期配置granfa
回車(chē)直接創(chuàng)建完成如下圖
創(chuàng)建管理用戶
創(chuàng)建完成如下圖
同時(shí)也是可以使用CLI命令行界面來(lái)創(chuàng)建的,命令一樣
2吼句、布署cadvisor服務(wù)
[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
說(shuō)明:
- -d :后臺(tái)運(yùn)行此容器
- --name :?jiǎn)⑦\(yùn)容器分配名字cadvisor
- -p :映射端口8082:8080(由于環(huán)境8080端口被占用,cadvisor默認(rèn)端口是8080不建議修改)
- -v:把宿主機(jī)的目錄映射到容器中事格,這些目錄都是cadviso需要采集的目錄文件和監(jiān)控內(nèi)容
- -storage_driver:需要指定cadvisor的存儲(chǔ)驅(qū)動(dòng)惕艳、數(shù)據(jù)庫(kù)主機(jī)、數(shù)據(jù)庫(kù)名
- google/cadvisor:通過(guò)cadvisor這個(gè)鏡像來(lái)運(yùn)行容器驹愚,默認(rèn)會(huì)在docker官方倉(cāng)庫(kù)把鏡像pull下來(lái)远搪;
查看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
現(xiàn)在可以通過(guò)瀏覽訪問(wèn)cadisor的管理頁(yè)面
cadvisor的基礎(chǔ)圖形功能也酷炫的
測(cè)試是否寫(xiě)入influxdb數(shù)據(jù)庫(kù)
3、布署granafa
[root@master ~]# docker run -d --name grafana -p 3000:3000 grafana/grafanaUnable to find image 'grafana/grafana:latest' locallyTrying to pull repository docker.io/grafana/grafana ... latest: Pulling from docker.io/grafana/grafanaf2aa67a397c4: Pull complete 89573effc7c8: Pull complete b55c103da375: Pull complete Digest: sha256:364bec4a39ecbec744ea4270aae35f6554eb6f2047b3ee08f7b5f1134857c32cStatus: Downloaded newer image for docker.io/grafana/grafana:latest665563143eb74e5e2e76b7a1533cbf67a68590d355b0b22d453eac07e0e0b616[root@master ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES665563143eb7 grafana/grafana "/run.sh" 48 seconds ago Up 47 seconds 0.0.0.0:3000->3000/tcp grafana
訪問(wèn)WEB管理端
用戶名:密碼 admin:admin
添加數(shù)據(jù)源
之后保存并測(cè)試連接
新建New dashboard
這里隨便選擇一個(gè)容器做為測(cè)試使用逢捺,實(shí)際環(huán)境可根據(jù)實(shí)際環(huán)境填寫(xiě)
保存返回到HOME界面后谁鳍,如下圖
最終的效果圖如下