加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动 > 正文

容器监控系统如何做,看看这篇就够了

发布时间:2019-10-14 14:21:53 所属栏目:移动 来源:七把刀
导读:副标题#e# 随着线上服务的全面docker化,对docker容器的监控就很重要了。SA的监控系统是物理机的监控,在一个物理机跑多个容器的情况下,我们是没法从一个监控图表里面区分各个容器的资源占用情况的。 为了更好的监控容器运行情况,更重要的是为了后续的容

Debian默认没有开启 CGroup Memory的支持,CAdvisor默认情况下无法统计到容器内存数据,需要修改GRUB启动参数,修改文件/etc/default/grub,加入下面这行:

  1. GRUB_CMDLINE_LINUX=" cgroup_enable=memory" 

然后更新grub2重启即可。

容器监控系统如何做,看看这篇就够了

3)网络流量监控数据错误问题

在CAdvisor上线一段时间后,顺安发现容器的网络数据跟实际情况不符,并查找资料后发现问题是因为CAdvisor默认只统计第一个网卡的流量,而在我们的容器中是有多个overlay网络的,需要统计容器中所有的网卡流量。于是我修改了CAdvisor统计网络流量部分的代码并重新编译了一个版本在线上使用,修改的代码在这里。

最后,我们自定义的镜像文件 forum-cadvisor.Dockerfile 是这样的(src/cadvisor是修改后重新编译的cadvisor可执行文件):

容器监控系统如何做,看看这篇就够了

2.4 CAdvisor原理简介

CAdvisor运行时挂载了宿主机根目录,docker根目录等多个目录,由此可以从中读取容器的运行时信息。docker基础技术有Linux namespace,Control Group(CGroup),AUFS等,其中CGroup用于系统资源限制和优先级控制的。

宿主机的/sys/fs/cgroup/目录下面存储的就是CGroup的内容了,CGroup包括多个子系统,如对块设备的blkio,cpu,内存,网络IO等限制。Docker在CGroup里面的各个子系统中创建了docker目录,而CAdvisor运行时挂载了宿主机根目录和 /sys目录,从而CAdvisor可以读取到容器的资源使用记录。

比如下面可以看到容器b1f257当前时刻的CPU的使用统计。CGroup详细介绍可以参见DOCKER基础技术:LINUX CGROUP(链接https://coolshell.cn/articles/17049.html)

  1. # cat /sys/fs/cgroup/cpu/docker/b1f25723c5c3a17df5026cb60e1d1e1600feb293911362328bd17f671802dd31/cpuacct.stat 
  2. user 95191 
  3. system 5028 

而容器网络流量CAdvisor是从/proc/PID/net/dev中读取的,如上面的容器b1f257进程在宿主机的PID为6748,可以看到容器所有网卡的接收和发送流量以及错误数等。CAdvisor定期读取对应目录下面的数据并定期发送到指定的存储引擎存储,而本地会默认存储最近2分钟的数据并提供UI界面查看。

  1. # cat /proc/6748/net/dev 
  2. Inter-| Receive | Transmit 
  3. face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed 
  4. eth0: 6266314 512 0 0 0 0 0 0 22787 292 0 0 0 0 0 0 
  5. eth1: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
  6. lo: 5926805 5601 0 0 0 0 0 0 5926805 5601 0 0 0 0 0 0 

3、容器监控数据存储-InfluxDB

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读