chua 在Docker用的越来越多的时代中,它的轻量级得到很多企业的青睐,所以在Docker容器部署服务及应用场景越来越多。
容器的采集和监控也较多,有docker自身的stats命令,下面给大家分享两个经典的容器监控组合方案。
- Cadvisor+InfluxDB+Grafana
- Cadvisor+Prometheus+Grafana
我先简单的介绍一下上述所涉及到的工具
Cadvisor(采集数据)
由于 dokcer stats 有些问题,为了解决docker stats的问题(存储、展示),所以谷歌开源的cadvisor 诞生了。 cadvisor 不仅可以搜集一台机器上所有运行的容器信息还提供基础查询界面和 http 接口,方便 Prometheus 进行数据抓取。cadvisor不仅可以搜集一台机器上所有运行的容器信息,还提供基础查询界面和http接口,方便其他组件如Prometheus进行数据抓取,或者cadvisor + influxdb + grafna搭配使用。
Cadvisor可以对节点机器上的资源及容器进行实时监控和性能数据采集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况,它不光能监控主机还能监控容器。
Cadvisor使用Go语言开发,利用Linux的cgroups获取容器的资源使用信息,在K8S中集成在Kubelet里作为默认启动项,官方标配。
Grafana(展板功能)
Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。它主要有以下六大特点:
- 1、展示方式:快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式;
- 2、数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等;
- 3、通知提醒:以可视方式定义最重要指标的警报规则,Grafana将不断计算并发送通知,在数据达到阈值时通过Slack、PagerDuty等获得通知;
- 4、混合展示:在同一图表中混合使用不同的数据源,可以基于每个查询指定数据源,甚至自定义数据源;
- 5、注释:使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;
- 6、过滤器:Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。
Prometheus(监控)
zabbix在监控界占有不可撼动的地位,功能强大。但是对容器监控显得力不从心。为解决监控容器的问题,引入了prometheus技术。prometheus号称是下一代监控。
prometheus是由谷歌研发的一款开源的监控软件,目前已经被云计算本地基金会托管,是继k8s托管的第二个项目。
工作流程
由第一个架构为例:简单介绍一下工作流程
- cadvitor对每个节点进行监控
- 然后将数据采集之后发送给influxdb
- influxdb分析完之后将数据传给grafana进行绘图
- 最终将结果用web界面展示出来。
以监控架构部署为例(Cadvisor+InfluxDB+Grafana)
- 1.创建自定义的网络,用于后期容器加入网络中
- 2.创建influxdb容器,创建数据用户,数据库
- 3.创建Cadvisor容器
- 4.创建Grafana容器,配置Grafana
- 准备相应的数据包
-
[root@httpd ~]# ls anaconda-ks.cfg grafana.tar influxdb.tar prometheus.tar cadvisor.tar
- 将文件导入到docker中
-
[root@httpd ~]# docker load < grafana.tar
[root@httpd ~]# docker load < cadvisor.tar
[root@httpd ~]# docker load < influxdb.tar
[root@httpd ~]# docker load < prometheus.tar
[root@httpd ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE prom/prometheus latest 0bc82119c95b 2 weeks ago 169MB grafana/grafana latest 651ff2dc930f 3 weeks ago 187MB centos 7 8652b9f0cb4c 4 weeks ago 204MB google/cadvisor latest eb1210707573 2 years ago 69.6MB tutum/influxdb latest c061e5808198 4 years ago 290MB - 为了方便管理,我会将Cadvisor+InfluxDB+Grafana三个容器都加入到自己的网络中‘
- ’
[root@httpd ~]# docker network create monitor 5f9503557b6894ad79f0512a3c38344b22230dd3ae222e686b0e69079508a327 [root@httpd ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 5ce52eea3a4c bridge bridge local ca8c033111bf host host local 5f9503557b68 monitor bridge local 323b7845855d none null local
infuluxdb容器
- 启动infuluxdb容器(8083端口是后台控制端口,8086端口是influxdb的数据端口)
-
[root@httpd ~]# docker run -d --name influxdb --net monitor -p 8083:8083 -p 8086:8086 tutum/influxdb 98b2aa65227b0ca406f9d7c29edfe2458021e16c71587efb5f6a6cc30646b4b9
-
查看容器是否启动
-
[root@httpd ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 98b2aa65227b tutum/influxdb "/run.sh" 2 minutes ago Up 2 minutes 0.0.0.0:8083->8083/tcp, 0.0.0.0:8086->8086/tcp influxdb
- 访问influxdb控制台
- 创建一个用户:CREATE USER "root" WITH PASSWORD '123456' WITH ALL PRIVILEGES
- 创建数据库 :CREATE DATABASE "cadvisor"
Cadvisor容器
- 创建Cadvisor 容器
-
[root@httpd ~]# docker run -d --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --net monitor --publish=8080:8080 --name=cadvisor google/cadvisor -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxdb:8086 b1921f2f8cff0fc88c56a6fefd203ba790791dc9392abde3da0c6a693061b569
- 访问Cadvisor
- 可以监控主机和容器,直接查看一下容器
-
granafa容器
- 创建granafa容器
-
[root@httpd ~]# docker run -d --name grafana --net monitor -p 3000:3000 grafana/grafana fd774534884ea1646f1f2d1fad8360c90b95d461850c7af6cbd2d54a48f5cf3c
-
访问grafana(初始名和密码都为admin)
-
t
-
添加数据源(也就是数据从哪来)
-
如果连接成功,就说明grdafana可以从influxdb中获取到信息了
-
接下来来到主页,点+号,新建面板,可以指定自己想查看的数据
- 保存数据之后,就会显示监控的状态