最新消息:

docker容器监控的实现

Linux ipcpu 8743浏览 0评论

docker容器监控的实现.md

说明

本文写于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,时间片差值相减除以时间

  1. cat /cgroup/cpuacct/docker/$DOCKERID/cpuacct.stat
  2. user 5647675
  3. system 1848266
  4. #@Those times are expressed in ticks of 1/100th of a second. Actually, they are expressed in "user jiffies".
  5. There are USER_HZ "jiffies" per second, and on x86 systems, USER_HZ is 100.

如下图所示

最终脚本如下:

  1. a1_user=`cat /cgroup/cpuacct/docker/$i/cpuacct.stat | grep user |awk '{print $2}'`
  2. a1_sys=`cat /cgroup/cpuacct/docker/$i/cpuacct.stat | grep sys | awk '{print $2}'`
  3. sleep 5
  4. a2_user=`cat /cgroup/cpuacct/docker/$i/cpuacct.stat | grep user |awk '{print $2}'`
  5. a2_sys=`cat /cgroup/cpuacct/docker/$i/cpuacct.stat | grep sys | awk '{print $2}'`
  6. cpuall=$((a2_user + a2_sys - a1_user - a1_sys))
  7. CPUSTAT=`echo "scale=2;$cpuall/5/100" |bc`

内存

  1. #@当前使用内存除以最大内存限制
  2. [root@BJ-YF-64-7 ~]#cat /cgroup/memory/docker/$DOCKERID/memory.limit_in_bytes
  3. 1073741824
  4. [root@BJ-YF-64-7 ~]#cat /cgroup/memory/docker/$DOCKERID/memory.usage_in_bytes
  5. 186269696

网络流量

  1. #@根据容器PID来获取该进程的网络状态
  2. PID=`docker inspect -f '{{.State.Pid}}' $i`
  3. a1_rx=`cat /proc/$PID/net/dev | grep eth1 |awk '{print $2}'`

网络连接数

  1. #@根据容器PID来获取该进程的网络状态
  2. 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

历史趋势图

转载请注明:IPCPU-网络之路 » docker容器监控的实现

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (1)

  1. 为什么不选择prometheus? 当时在2015年Kubernetes和prometheus刚刚发布没多久,我们以为prometheus和kubernetes是绑定在一起的,当时kubernetes不成熟,在2015、2016年的时候一些技术实力比较强的公司一般都采取的marathon和mesos框架,后来的情况大家都知道了,Kubernetes一统江山。我们当时团队较小,仅有1名专职开发,4名运维,容器平台是我们运维团队的一次重大技术尝试。
    ipcpu3年前 (2021-07-13)Reply