容器监控系统如何做,看看这篇就够了
Debian默认没有开启 CGroup Memory的支持,CAdvisor默认情况下无法统计到容器内存数据,需要修改GRUB启动参数,修改文件/etc/default/grub,加入下面这行:
然后更新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)
而容器网络流量CAdvisor是从/proc/PID/net/dev中读取的,如上面的容器b1f257进程在宿主机的PID为6748,可以看到容器所有网卡的接收和发送流量以及错误数等。CAdvisor定期读取对应目录下面的数据并定期发送到指定的存储引擎存储,而本地会默认存储最近2分钟的数据并提供UI界面查看。
3、容器监控数据存储-InfluxDBInfluxDB(链接:https://docs.influxdata.com/influxdb/v1.3/)是一个开源的分布式时序数据库,使用GO语言开发。特别适合用于时序类型数据存储,CAdvisor搜集的容器监控数据用InfluxDB存储就很合适,而且CAdvisor本身就提供了InfluxDB的支持,集成起来非常方便。 由于线上服务都docker化了,所以InfluxDB我们也是选择用容器来跑,通过容器管理系统统一管理。容器运行时的核心配置如下,主要挂载了数据库目录,以及配置了consul的服务注册,这样,CAdvisor由于和InfluxDB处于同一个overlay子网中,不需要再开放端口给外部访问,CAdvisor直接通过influxdb.service.consul:8086即可连接到InfluxDB。 为了存储CAdvisor的数据,需要预先创建好数据库并配置用户名密码以及相关权限。InfluxDB提供了一套influx的CLI,跟mysql client很相似。另外,InfluxDB的数据库操作语言InfluxQL跟SQL语法也基本一致。进入InfluxDB容器,运行下面命令创建数据库和用户密码并授权。
(编辑:青岛站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |