加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 移动互联 > 评测 > 正文

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

发布时间:2019-10-10 05:04:14 所属栏目:评测 来源:七把刀
导读:副标题#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

InfluxDB(链接: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容器,运行下面命令创建数据库和用户密码并授权。

  1. # influx 
  2. Connected to http://localhost:8086 version 1.3.5 
  3. InfluxDB shell version: 1.3.5 
  4. > create database cadvisor ## 创建数据库cadvisor 
  5. > show databases 
  6. name: databases 
  7. name 
  8. ---- 
  9. _internal 
  10. cadvisor 
  11. > CREATE USER testuser WITH PASSWORD 'testpwd' ## 创建用户和设置密码 
  12. > GRANT ALL PRIVILEGES ON cadvisor TO testuser ## 授权数据库给指定用户 
  13. > CREATE RETENTION POLICY "cadvisor_retention" ON "cadvisor" DURATION 30d REPLICATION 1 DEFAULT ## 创建默认的数据保留策略,设置保存时间30天,副本为1 

(编辑:常州站长网)

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

热点阅读