cAdvisor、InfluxDB、Grafana搭建Docker1.12性能监控平台
https://blog.csdn.net/liyingke112/article/details/74923178
https://www.cnblogs.com/hanyifeng/p/6233851.html
一、Docker 监控方式
1.利用docker 的 docker stats API
命令: docker stats [容器ID/容器名称]
[aaa@qq.com ~]# docker stats --help
Usage: docker stats [OPTIONS] [CONTAINER...]
Display a live stream of container(s) resource usage statistics
-a, --all Show all containers (default shows just running)
--help Print usage
--no-stream Disable streaming stats and only pull the first result
参数:-a, --all 表示查看所有容器包括已经exit状态的
--no-stream 表示仅拉取第一次的请求结果后就结束
示例:查看下某个容器的状态
[aaa@qq.com ~]# docker stats --no-stream cadvisor
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O
cadvisor 1.48% 62.48 MB / 3.977 GB 1.57% 4.902 MB / 378 MB 18.93 MB / 0 B
从上面可以看到容器的资源使用,包括CPU、内存、内存使用率、网络入口IO、磁盘IO、及内存LIMIT。该方式比较简单明了,就像系统自带的top命令一样。
2.利用谷歌开源工具cAdvisor(官网)
创建容器,如果docker主机上没有该容器,可能需要喝杯热茶的时间(去docker hub上下载镜像,视网速)
[aaa@qq.com ~]# docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --publish=8080:8080 --detach=true --name=cadvisor-test google/cadvisor:latest
创建完成后,可以访问http://主机ip:8080/,如下图
3.利用独立开源项目Prometheus监控工具(官网),后续有时间会专门对其进行系统学习下。
来自官网资料:Prometheus及其一些生态系统组件的总体架构
二、本文案例开源工具介绍
1.cAdvisor (Container Advisor)该程序是由Google 开源的一个项目。提供了给使用容器的用户对其主机上运行容器的资源使用情况和性能的了解,它是一个以容器方式运行的守护进程,用来数据采集、汇聚、可视化和导出运行中容器的信息。具体来说,对于每个容器,它保留资源的隔离参数,历史资源使用,完整历史资源使用的直方图,和网络统计。此数据由机器上的容器输出。
2.InfluxDB(官网)是一个由Go编写的开源数据库,专门用于处理具有高可用性和高性能要求的时间序列数据。InfluxDB安装没有外部依赖,可以在几分钟内完成,然而它的灵活性、可扩展性足够复杂的部署。具有实时分析、历史分析、预测分析、异常检测等特点。
3.Grafana(官网)提供了一个强大而优雅的方式来创建、探索,并可以共享仪表板和数据。也是用于查询、可视化时间序列和指标的主要工具。支持的数据源有Graphite、Prometheus、Elasticsearch、InfluxDB、OpenTSDB、AWS CloudWatch等,并且在4.0及更高版本中加入了警报功能(but现在只支持一些数据源。它们包括Graphite,Prometheus,InfluxDB和OpenTSDB)。目前报警规则只有Graph面板支持,Table和Singlestat会在未来版本中出现。支持的通知方式有Email、即时通讯工具Slack、Webhook等。
三、监控部署
1.创建第一个容器influxdb
[aaa@qq.com ~]# docker run -d -p 8083:8083 -p 8086:8086 --expose 8090 --expose 8099 --name influxsrv -e PRE_CREATE_DB=cadvisor tutum/influxdb:0.13
注:默认情况下,InfluxDB使用以下网络端口:
TCP端口8083用于InfluxDB的管理面板
TCP端口8086用于通过InfluxDB的HTTP API进行客户端 - 服务器的通信
创建完成后,打开浏览器,访问http://ip:8083,默认用户名,密码是root、root,如下图
2.创建cAdvisor容器并将其link到InfluxDB容器
[aaa@qq.com ~]# docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --publish=8080:8080 --detach=true --link influxsrv:influxsrv --name=cadvisor google/cadvisor:v0.24.1 -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086
3.创建Grafana容器并将其链接到InfluxDB容器:
docker run -d -p 3000:3000 -e INFLUXDB_HOST=localhost -e INFLUXDB_PORT=8086 -e INFLUXDB_NAME=cadvisor -e INFLUXDB_USER=root -e INFLUXDB_PASS=root --link influxsrv:influxsrv --name grafana grafana/grafana:3.1.1
4.打开浏览器,访问http://ip:3000/ Grafana界面
如有转载,请注明原文出处。飞走不可:http://www.cnblogs.com/hanyifeng/p/6233851.html
5.登录上去后,将Influxdb设置为Grafana的数据源,按照下图添加:
之后点击Add data source,add增加。信息如下:
最后保存测试连接。
6.我们使用Grafana设置我们的第一个Dashboard,并可视化来自cAdvisor的数据。
首先,添加一个Dashboard:
然后新建一个graph,如下图:
先设置Graph中的每个标题选项,如下:
Title:Memory
Height:300px
Metrics:输入查询语句及选择数据源,default 已经是influxdb,可以不用设置(点击 可切换模式 )。
query 1: SELECT mean("value") FROM "memory_usage" WHERE container_name='cadvisor' AND container_name='cadvisor' AND $timeFilter GROUP BY time($interval), "container_name" fill(previous)
ALIAS BY:$tag_container_name.memory
Format as:Time series
Axes:主要修改一下Y轴的 显示单位
Left Y-->Unit:bytes、Y-Min:0
Legend:可以在图标左下方显示统计的最大、最小、及平均值等。
Display:主要修改下显示的波浪线或者点,还可以修改区域的显示深度(可以按个人喜好)
Mode Options-->Fill:4、LineWidth:2
修改设置完成后,记得点击正上面的保存按钮。完整的一个dashboard就出来了。如下图:
点击ADD ROW ,可以增加其它监控Graph、Table、Text等。剩下需要监控的如CPU、磁盘IO、网络IO。创建方式和上面基本一致,除了左Y轴那里需要注意下单位。
7.完整的几个图,以及查询语句如下:
cpu 查询:
SELECT derivative(mean("value"), 10s) FROM "cpu_usage_total" WHERE container_name='cadvisor' AND $timeFilter GROUP BY time($interval), container_name fill(previous)
网络 i/o 查询:
tx:
SELECT derivative(mean("value"), 10s)/8 FROM "tx_bytes" WHERE container_name='cadvisor' AND $timeFilter GROUP BY time($interval), container_name fill(previous)
rx:
SELECT derivative(mean("value"), 10s)/8 FROM "rx_bytes" WHERE container_name='cadvisor' AND $timeFilter GROUP BY time($interval), container_name fill(previous)
文件系统使用及limit:
fs
SELECT mean("value") FROM "fs_usage" WHERE container_name='cadvisor' AND container_name='cadvisor' AND $timeFilter GROUP BY time($interval), "container_name" fill(previous)
limit
SELECT mean("value") FROM "fs_limit" WHERE container_name='cadvisor' AND $timeFilter GROUP BY time($interval), "container_name" fill(previous)
四、总结一下
Docker 容器的监控不容忽视,毕竟里面是有业务程序在跑的,有了监控,还要有相关预警规则,及报警的处理动作,就像zabbix 一样。不知道cAdvisor监控Docker 集群有木有其它的开源技术方案,毕竟Dcoker 服务器是集群存在的。下次我找到好的技术方案,再来分享。
如果文中有错误,还望大家不吝赐教。
如有转载,请注明原文出处。飞走不可:http://www.cnblogs.com/hanyifeng/p/6233851.html
参考资料:
https://segmentfault.com/a/1190000002527178
https://www.brianchristner.io/how-to-setup-docker-monitoring/
下一篇https://blog.csdn.net/Michaelwubo/article/details/82495149
================================================
通过cadvisor+influxdb+grafana三者有机结合,打造跨主机容器监控。
优点
1、跨主机监控,可扩展
2、容器自发现
3、历史数据长期保存
4、自定义配置程度高
5、采集间隔很短,达到秒级
6、多种方式告警
缺点
1、不能自动隐藏已停止的容器
2、grafana会展现所有的数据,导致展示长时间的数据时,各个数据点重叠。
组件
数据采集–cAdvisor
cAdvisor为Docker容器用户提供了了解运行时容器资源使用和性能特征的工具。
cAdvisor是单机版容器监控系统,通过收集宿主机的cgroup统计信息,经过加工处理后通过图展示在页面上。
这些信息包括宿主机、容器的CPU、内存、网络流量、磁盘空间等资源隔离和运行数据。
工作流程大致:
1)、收集、聚集、处理宿主机的cgroup统计数据
2)、写入后端基于事件序列的数据库(本文使用InfluxDB)
3)、展示时读取基于事件序列的数据库
优势:
部署、维护简单:通过容器形式部署,“开箱即用”,无需配置即可使用
监控容器和宿主机
通过图展示,比较美观
支持多种基于事件序列的数据库,写入和读取快
不足之处:
只能看到2-3分钟的监控数据
消耗的内存较高,通常几百M
页面加载较慢
数据存储–InfluxDB
InfluxDB是一个开源分布式时序、事件和指标数据库。
influxdb使用Go语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。
其主要特色功能
基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等)
可度量性:可以实时对大量数据进行计算
基于事件:支持任意的事件数据
InfluxDB的主要特点
无结构(无模式):可以是任意数量的列
可拓展的
支持min, max, sum, count, mean, median 等一系列函数,方便统计
原生的HTTP支持,内置HTTP API
强大的类SQL语法
自带管理界面,方便使用
在使用过程中发现influxdb缺点:
在select查询时,字段必须是time或者value,不能为其他字段
例如:select container_name from "cpu_usage_user" limit 100无结果
监控配置和展示–Grafana
Grafana是一款开源的监控绘图工具。
对收集来的数据进行展示和分析。
特性:
用于可视化大型测量数据的开源程序,提供了强大和优雅的方式去创建、共享、浏览数据。
dashboard中展示不同metric数据源中的数据。
常用于因特网基础设施和应用分析,但在其他领域也有机会用到,比如:工业传感器、家庭自动化、过程控制等等。
有热插拔控制面板和可扩展的数据源,目前已经支持Graphite、Cloudwatch、Prometheus、InfluxDB、Elasticsearch。
自定义配置灵活,支持模板、展示数据内容配置等等。
支持告警
部署
运行环境
宿主机:CentOS7 7.3.1611
docker版本为1.12.6
通过docker容器方式部署。部署情况
cadvisor influxdb grafana
docker1 192.168.20.128 部署 部署 部署
docker2 192.168.20.129 部署 / /
docker3 192.168.20.130 部署 / /
influxdb
创建容器
docker run -d -p 8083:8083 -p 8086:8086 --expose 8090 --expose 8099 --volume=/data/influxdb:/data --name influxsrv docker.io/tutum/influxdb:latest 有问题参考https://blog.csdn.net/Michaelwubo/article/details/82494408
-v /opt/influxdb:/var/lib/influxdb
8086用于Influxdb数据读写,8083用于数据库管理界面
8083:页面管理端口
8086:数据传输端口
InfluxDB容器创建成功后,可以通过http://IP:8083/打开管理界面。
创建用户
点击页面右上角的设置图标,数据账号和密码,点击save
创建数据库
创建cadvisor数据库,用于收集存储Docker的性能数据,在输入框输入CREATE DATABASE “cadvisor”然后按回车,执行命令。
在输入框输入SHOW DATABASES,可以看到刚才创建的数据库
cadvisor
创建cAdvisor容器
docker run --privileged=true --volume=/:/rootfs:ro --volume=/dev/kmsg:/dev/kmsg:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --publish=8085:8080 --detach=true --link influxsrv:influxsrv --name=cadvisor docker.io/google/cadvisor:latest -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=10.30.30.126:8086 -storage_driver_user=root -storage_driver_password=root
-storage_driver=influxdb 指定存储驱动,使cadvisor将数据存储到数据库中,更多存储插件
-storage_driver_host=influxdb:8086 InfluxDB数据库的地址
-storage_driver_db=cadvisor 数据库名称
如果要指定用户名可以用-storage_driver_user参数,默认是root
如果要指定密码可以用-storage_driver_password参数,默认是root
cAdvisor运行以后,可以通过http://宿主机IP:8080/查看到Docker运行的机器和容器情况。
验证cAdvisor是否已经向InfluxDB存入数据
打开http://192.168.20.128:8083/的InfluxDB管理界面
点击右上角Database切换到cadvisor数据库
然后在输入框输入SHOW MEASUREMENTS可以看到已经创建了很多个表
grafana
部署容器
docker create -p 3000:3000 --hostname grafana --name grafana grafana/grafana
默认admin的用户名和密码是admin/admin
配置
添加数据库
配置模板