docker容器监控的实现
说明
本文写于2015年,所有PAAS平台相关内容都已经在2015Q3完成,当时使用的docker版本为1.6.2,虽然docker新版本发布很快,但是下面提到的监控相关的内容大致相同。
一、 docker容器有哪些指标需要监控?
容器CPU、内存、IO、网络、应用存活
二、 如何监控?
宿主机监控 zabbix可以实现,容器内部安装zabbix?
(数据和宿主机一致,无法反应容器真实状态)
看别人都如何实现?
Searching GitHub…
seagull
可以查看、启停容器,管理镜像,但不支持查看容器使用CPU、内存、IO、网络等情况。Prometheus
太庞大Docker官方stats接口
要求docker在1.5以上版本,有命令行和API两种方式,API为非中断式,不停的显示数据Docker-mon
命令行工具,1.5以上版本,展示效果很好,但数据无法汇总,也无法查看历史数据Dockernana
可以对docker宿主进行日常cpu、内存、IO进行监控,但无法监控容器的资源使用。cAdvisor
可以查看容器对CPU、内存、磁盘的使用情况,WEB界面方式,缺点是每个宿主都要起个容器,而且数据无法汇总,无法查看历史数据。
图1:Docker-mon
图2:cAdvisor
没办法,自己来吧…
三、 如何获取相关数据
CPU,时间片差值相减除以时间
cat /cgroup/cpuacct/docker/$DOCKERID/cpuacct.stat
user 5647675
system 1848266
#@Those times are expressed in ticks of 1/100th of a second. Actually, they are expressed in "user jiffies".
There are USER_HZ "jiffies" per second, and on x86 systems, USER_HZ is 100.
如下图所示
最终脚本如下:
a1_user=`cat /cgroup/cpuacct/docker/$i/cpuacct.stat | grep user |awk '{print $2}'`
a1_sys=`cat /cgroup/cpuacct/docker/$i/cpuacct.stat | grep sys | awk '{print $2}'`
sleep 5
a2_user=`cat /cgroup/cpuacct/docker/$i/cpuacct.stat | grep user |awk '{print $2}'`
a2_sys=`cat /cgroup/cpuacct/docker/$i/cpuacct.stat | grep sys | awk '{print $2}'`
cpuall=$((a2_user + a2_sys - a1_user - a1_sys))
CPUSTAT=`echo "scale=2;$cpuall/5/100" |bc`
内存
#@当前使用内存除以最大内存限制
[root@BJ-YF-64-7 ~]#cat /cgroup/memory/docker/$DOCKERID/memory.limit_in_bytes
1073741824
[root@BJ-YF-64-7 ~]#cat /cgroup/memory/docker/$DOCKERID/memory.usage_in_bytes
186269696
网络流量
#@根据容器PID来获取该进程的网络状态
PID=`docker inspect -f '{{.State.Pid}}' $i`
a1_rx=`cat /proc/$PID/net/dev | grep eth1 |awk '{print $2}'`
网络连接数
#@根据容器PID来获取该进程的网络状态
cat /proc/$PID/net/tcp
四、 初步展示shell+InfluxDB+Grafana
使用Shell打印结果:
使用InfluxDB+ Grafana展示结果:
五、 接入PAAS平台
shell定时向PAAS推送数据。PAAS将数据存储于MySQL,并展示给用户。
都是实时数据,没有历史趋势图。
五、 接入Zabbix
数据展示问题解决了,那数据报警呢? Zabbix
Zabbix一台宿主机有N张图,容器1CPU、容器1内存、容器2CPU…
数据获取很复杂,很困难
拆
每个容器都运行Zabbix
数据通过shell脚本打印到容器在宿主的映射目录
六 、自主开发监控系统
监控客户端hunter->监控数据存储端InfluxDB(触发器报警)->监控数据展示端PAAS
历史趋势图
建议继续学习:
- Mysql监控指南 (阅读:19774)
- 批量添加主机到cacti+nagios的监控报警系统中 (阅读:13254)
- 我常用的主机监控shell脚本 (阅读:11486)
- 7 天打造前端性能监控系统 (阅读:10084)
- 如何监控HP服务器硬件状态 (阅读:9089)
- Cacti 添加 Nginx 监控 (阅读:8894)
- Linux下三种常用的流量监控软件对比 (阅读:8668)
- Cacti 添加 Memcached 监控 (阅读:8096)
- Cacti 添加 Apache 监控 (阅读:7552)
- 你应该知道的16个Linux服务器监控命令 (阅读:6817)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:ipcpu 来源: IPCPU--网络之路
- 标签: docker 容器 监控
- 发布时间:2016-04-20 13:20:44
- [67] Go Reflect 性能
- [67] Oracle MTS模式下 进程地址与会话信
- [67] 如何拿下简短的域名
- [61] IOS安全–浅谈关于IOS加固的几种方法
- [60] 图书馆的世界纪录
- [59] 【社会化设计】自我(self)部分――欢迎区
- [58] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [47] 界面设计速成