![ca27aaabd5a1d86b8927cf8a9faf758d.png](https://i-blog.csdnimg.cn/blog_migrate/b65061c2ddcb51a492a795e4897d7a30.png)
![5774f0a1d4d48dc6b474277dd748c24a.png](https://i-blog.csdnimg.cn/blog_migrate/985e176d68bb3dfd79f4b796a6a7d186.png)
关于Docker技术的文章之前也断断续续写了几篇:
Docker容器系列文章|Docker技术入门(一)
Docker容器系列文章|Docker技术入门(二)
Docker容器系列文章|这20个Docker Command,有几个是你会的?
Docker容器系列文章|Docker容器技术之Docker file
今天,和大家聊一聊关于容器监控的话题。
为什么需要监控??
对于一个物理机上运行多个容器应用时,容器的运行情况如: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:用于数据存储
![e2d5028538436639be7ec0a3ce50c484.png](https://i-blog.csdnimg.cn/blog_migrate/02a6ce69d42a4a7b17464dcb667ea48a.jpeg)
InfluxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。所以我们要使用influxdb将这些实时监控到的信息存放起来。
InfluxDB主要特色功能
- 基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等);
- 可度量性:你可以实时对大量数据进行计算;
- 基于事件:它支持任意的事件数据;
InfluxDB主要特点
- 无结构(无模式)
- 可以是任意数量的列
- 可拓展的;
- 支持min, max, sum, count, mean, median 等一系列函数,方便统计
- 原生的HTTP支持,内置HTTP API
- 强大的类SQL语法
- 自带管理界面,方便使用
参考文章:https://www.influxdata.com/pr...
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的管理端了
![17c671246c01fcf3229a01dd4abac5d7.png](https://i-blog.csdnimg.cn/blog_migrate/ba38d21407c4d53d7dc97420f413db26.png)
接下来创建cadvisor的数据库与用户,这个用于后期配置granfa
![1bb804fb8b94c3b9a970a41005ee40ed.png](https://i-blog.csdnimg.cn/blog_migrate/175df72709bd7d2271e8b6b96d1d91c3.png)
回车直接创建完成如下图
![e357eec449a8037ee7d51c3a88d5b939.png](https://i-blog.csdnimg.cn/blog_migrate/345063508412ba4cf0d8a3dd32102776.png)
创建管理用户
![6f7293b1767ea1859137a3ad3705fd13.png](https://i-blog.csdnimg.cn/blog_migrate/03a4a2e018ed68cc2ab7b7e7300b6592.jpeg)
创建完成如下图
![06f859462661ccdb3b9da6eb787081a5.png](https://i-blog.csdnimg.cn/blog_migrate/7153aa480ec1418cae1559cde82ed9ee.png)
同时也是可以使用CLI命令行界面来创建的,命令一样
![7cb99b15b586394a4b7aff8043147e71.png](https://i-blog.csdnimg.cn/blog_migrate/585b533184277ec1d12f14173fe98490.png)
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的管理页面
![07ca99a6f1494c2ee8e9faa3a83d6a35.png](https://i-blog.csdnimg.cn/blog_migrate/34e70c26e1cf4327201768a1996c873d.jpeg)
cadvisor的基础图形功能也酷炫的
![7e57fbd14fa944ff2832899c098d3f51.png](https://i-blog.csdnimg.cn/blog_migrate/2d13916b7f885bd166920ee145d18787.jpeg)
测试是否写入influxdb数据库
![326ffef40924113f992ced5733e7d305.png](https://i-blog.csdnimg.cn/blog_migrate/1daac9b00c273b685af1a00fcfaf8dbd.png)
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管理端
![8483a45e0e1e8b35afdfe5e36178d5bf.png](https://i-blog.csdnimg.cn/blog_migrate/be5bcd279aa91f6ad9e4bee99ab58236.jpeg)
用户名:密码 admin:admin
添加数据源
![bb77df2a69a6f3099c0d4d5c6f67afe7.png](https://i-blog.csdnimg.cn/blog_migrate/ff29bfa32955612e3dfd76e0fe42bf86.jpeg)
![ac6bda45240ba96c8ca150ea6eb4b4f5.png](https://i-blog.csdnimg.cn/blog_migrate/4056c9c6c2d696d1328bd28caed049d4.jpeg)
之后保存并测试连接
新建New dashboard
![9aadc4af3c91a9cedea4400663d9aa89.png](https://i-blog.csdnimg.cn/blog_migrate/0cc17e947fb76687a0fa543d64820f68.png)
![27db610189aefb8d0960afea107a3e40.png](https://i-blog.csdnimg.cn/blog_migrate/0bdaee33fa00ccd064d673623f8bcf4f.jpeg)
这里随便选择一个容器做为测试使用,实际环境可根据实际环境填写
![9be4f6983f3e524dafd6da40bdd85c58.png](https://i-blog.csdnimg.cn/blog_migrate/e3c63d9a4b24779947842b13a120049b.jpeg)
![bff399014303f3fa0988d663951fbbf4.png](https://i-blog.csdnimg.cn/blog_migrate/3e80bb15b134df06eb2c0c6e03528e66.jpeg)
保存返回到HOME界面后,如下图
![13f05f5f3e31bb1fe4ca1ad0ade65d77.png](https://i-blog.csdnimg.cn/blog_migrate/91bd7962d3ce6d71240cd71c0ac2a10d.jpeg)
最终的效果图如下
![6968a1d1583a0f6b469d15b2e08e5877.png](https://i-blog.csdnimg.cn/blog_migrate/dbda3bd28e52c0253bff192a21457ac3.jpeg)
如有错误或其它问题,欢迎小伙伴留言评论、指正。如有帮助,欢迎点赞+转发分享。
更多相关开源技术文章,请持续关注民工哥知乎技术专栏。
我是民工哥,一个爱折腾的IT技术老司机,欢迎关注我,我们一起学习,共同成长!!