部署Docker的主机和容器日益增多,对主机和容器的监控显得越来越重要了。本章的Docker的实践就是快速构建一个容器的监控系统,通过界面直观反应应用性能和监控能力,对系统中存在的性能问题能做到一目了然,帮助提升系统的可靠性。
cAdvisor(container advisor)是google公司开发的容器监控工具,作为k8s生态中默认部署的容器监控工具。cAdvisor可以监控当前host主机和容器上的CPU、内存、网络,磁盘等资源的使用情况,作为数据搜集的工具还是有着不错的表现,但是在界面显示方便就表现的不足。
cAdvisor在github上的路径为:https://github.com/google/cadvisor
git clone的地址为:https://github.com/google/cadvisor.git
cAdvisor使用容器的方式安装,首先查找cadvisor镜像:
root@ubuntu:~# docker search google/cadvisor
这里需要注意下,直接搜索cadvisor的话,可能报:
“Error response from daemon: Get https://index.docker.io/v1/search?q=cadvisor&n=25: net/http: TLS handshake timeou” 的错误。
拉取cadvisor的镜像:
root@ubuntu:~# docker pull google/cadvisor
Status: Downloaded newer image for google/cadvisor:latest
下载的镜像信息:
google/cadvisor latest 75f88e3ec333 12 months ago 62.2MB
运行cAdvisor容器:
root@ubuntu:~# docker run -d --name=cadvisor --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker:/var/lib/docker:ro -p 8080:8080 google/cadvisor
4f8de43c6dd898f7ade138dbd22f232a9f36b94990d474e953716ccfb6bb9962
查看容器运行情况:
root@ubuntu:~# docker ps
4f8de43c6dd8 google/cadvisor "/usr/bin/cadvisor -…" 3 minutes ago Up 3 minutes 0.0.0.0:8080->8080/tcp cadvisor
成功运行容器后,可以通过浏览器访问web访问cadvisor的界面:
http://192.168.131.129:8080/
cAdvisor的界面如下所示:
InfluxDB是一个当下比较流行的时序数据库,InfluxDB使用 Go 语言编写,无需外部依赖,安装配置非常方便,适合构建大型分布式系统的监控系统。
influxdb采用容器安装的方式,首先查找influxdb的镜像:
root@ubuntu:~# docker search tutum/influxdb
直接拉取最新的镜像即可:
root@ubuntu:~# docker pull tutum/influxdb
Status: Downloaded newer image for tutum/influxdb:latest
运行influxdb容器:
root@ubuntu:~# docker run -d --name influxdb -p 8083:8083 -p 8086:8086 tutum/influxdb
fad5d38c897bc49aea888126fee24dda4370df3c43bd739738922a06f2d9c275
查看容器运行情况:
root@ubuntu:~# docker ps
1ae8d94981be tutum/influxdb "/run.sh" 21 minutes ago Up 17 minutes 0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp influxdb
运行成功后,influxdb自带web页面,可以很直观在浏览器的页面进行相关的操作,只需要访问主机IP:8083端口即可。
http://192.168.131.129:8083/
成功访问influxdb的页面如图6-2-1所示:
创建用户:
创建数据库:
数据库操作:
1)显示数据库
> show databases
2)新建数据库
> create database test
3)删除数据库
> drop database test
4)使用数据库
> use xk_name
数据表操作:
1)显示所有表
> SHOW MEASUREMENTS
2)新建表
insert disk_free, hostname=server01 value=442221834240i 1435362189575692182
从表中查询字段
> select * from disk_free
3)删除表
> drop measurement disk_free
数据操作:
增加数据采用insert的方式,要注意的是 InfluxDB的insert中,表名与数据之间用逗号(,)分隔,tag和field之间用 空格分隔,多个tag或者多个field之间用逗号(,)分隔。
> insert disk_free, hostname=server01 value=442221834240i 1435362189575692182
> select * from disk_free
界面操作:
Grafana是一个开源的度量分析与可视化套件。经常被用作基础设施的时间序列数据和应用程序分析的可视化,它在其他领域也被广泛的使用包括工业传感器、家庭自动化、天气和过程控制等。
Grafana采用容器的方式进行安装,搜索对应的官方镜像:
root@ubuntu:~# docker search grafana/grafana
直接拉取最新的镜像:
root@ubuntu:~# docker pull grafana/grafana
Status: Downloaded newer image for grafana/grafana:latest
运行grafana容器:
root@ubuntu:~# docker run -d --name grafana -p 3000:3000 grafana/grafana
78011134844f69c8671d13cd1a0124105087d69fab2a51fb999152878efac138
查看容器运行情况:
root@ubuntu:~# docker ps
78011134844f grafana/grafana "/run.sh" 48 seconds ago Up 46 seconds 0.0.0.0:3000->3000/tcp grafana
通过浏览器访问grafana的界面:
http://192.168.131.129:3000/
初始默认的用户和密码是:admin/admin
配置influxdb数据源
点击“Add data source”配置数据源:
测试连接的连通性:
配置Dashboard
网络流量统计
创建graph,切换编辑模式“Toggle Edit Mode”, 然后输入自定义SQL查询
SELECT derivative("value") AS "value" FROM "interface_rx" WHERE "host" = 'k8sslave04' AND "type" = 'if_octets' AND "instance" = 'eno16777984'
系统负载
SELECT mean("value") FROM "load_longterm" WHERE "host" = 'k8sslave04' AND $timeFilter GROUP BY time($interval) fill(null)
SELECT mean("value") FROM "load_midterm" WHERE "host" = 'k8sslave04' AND $timeFilter GROUP BY time($interval) fill(null)
SELECT mean("value") FROM "load_shortterm" WHERE "host" = 'k8sslave04' AND $timeFilter GROUP BY time($interval) fill(null)
内存用量
SELECT mean("value") FROM "memory_value" WHERE "type_instance" = 'used' AND $timeFilter GROUP BY time($interval) fill(null)