本文共 6297 字,大约阅读时间需要 20 分钟。
系统监控 (容器数量*(容器监控 应用监控))= 每个主机监控数量 100 (4 *(50 50))= 500/主机监控项
/sys/fs/cgroup
中,某些系统可能在 /cgroup
中。访问路径包含容器ID。CONTAINER_ID=$(docker run [OPTIONS] IMAGE [COMMAND] [ARG...] )
# cat $CONTAINER_ID/cpuacct.stat user 46409 #进程占用 464.09s system 22162 #系统调用占用 221.62s
# cat $CONTAINER_ID/cpuacct.usage_percpu 362316789800 #自启动以来占用,单位纳秒 360108180815
# cat $CONTAINER_ID/cpuacct.usage 722473378982
$ cat /sys/fs/cgroup/cpu/docker/$CONTAINER_ID/cpu.stat nr_periods 565 # 已经执行间隔数 nr_throttled 559 # 被组抑制的次数 throttled_time 12119585961 # 总使用时间,单位纳秒(12.12s)
docker stats
会不断的接收监控指标,1.9.0 以后指标包含磁盘io docker stats
命令一样,但是提供更多的细节。守护进程监听 unix:///var/run/docker.sock
,只允许本地连接。使用 nc
调用方法:echo "" | nc -U /var/run/docker.sock 例子 echo -ne "GET /containers/$CONTAINER_ID/stats HTTP/1.1\r\n\r\n" | sudo nc -U /var/run/docker.sock
A:可以认为 Docker 监控是类主机监控,只不过是缩小版,基本上分为4部分 CPU、内存、磁盘、网络。Q:使用的整套监控工具是哪些?容器CPU 内存网络 如何监控?容器事件比如起停如何监控。
A:整套工具我们使用的是 Cadvisor + Prometheus + Grafana ,当然中间的组件是可以替换的,但基本上围绕着 采集、存储计算、展现来做。采集也可以使用自己的,比如文章说的自己写代理去拿。容器的监控数据当然靠采集程序了。起停这个一般通过监控Docker的事件来实现,采集工具也能收。Q:分享的监控图片,有数据的,是使用什么监控工具达成的?
A:这个分两种,一种是靠底层的绘图引擎,将数据从存储里读出来自己绘制,一种就是用类Grafana的程序。Q:如果用Zabbix监控,是否需要定义容器的的历史数据保留时间和趋势数据存储周期,我设定的时历史数据保留7天,趋势数据14天,这样是否合理?
A:我认为Zabbix 是上一代监控体系,或者以主机为中心的监控体系,如果是容器监控,我建议还是考虑时序类的监控体系,比如Influxdb\Prometheus等,继续刚才的,Zabbix 还可以沿用作为主机的,只是Docker单独分离出来,这样基础建设可以复用。Q:建不建议通过 Pod中放一个监控容器来监控应用容器,比如Zabbix客户端的监控容器在Pod中,如果这么做 优缺点哪些?
A:Pod 应该是Kubernetes的概念,和容器其实关系不大,这个Kubernetes自己应该会提供数据,具体我不是很清楚。但是 Abbix 还是建议保留在主机层面使用,除非大改,否则即使靠拆分数据库什么的解决,未来维护和性能也是运维大坑。Q:做容器监控和JVM监控是否有什么工具可以推荐,感谢。
A:容器监控现在自己玩套路都是跟着开源走,可以考虑刚才我们的套路,不过可以中间组件任意换,比如存储InfluxDB,JVM,我已知道没有什么好的套路,基本上走跟实例的路子,就是做个小程序跟着程序走,然后提供统一接口用软件抓。Q:Cadvisor Heapster 和 Prometheus 哪种好用一些,各自优缺点有哪些。
A: Heapster 不熟悉, Prometheus 很好,Google 个人的开源项目,都是Google套路,唯独存储是个问题,这块还需要看他们未来如何处理,现在单机存储虽然性能上还可以,但是扩展能力比较差。Q:请问如何监控网络带宽,并对带宽进行限制?
A:带宽监控可以按照容器提供的数据走,还是很准的,具体限制这个是另一个纬度了,属于容器网络,这个坑比较大不适合今天讨论。Q:Docker多套环境使用的域名要相同还是不同?如果相同的话如何隔离,如果不同的话如何维护配置?
A:这个设计到容器服务的网络规划问题,看网络选择。隔离也看网络选型。和之前说的一样这个属于容器网络。坑大。Q:监控工具推荐那个?对于容器生命周期短,有何策略应对?容器快速后,如何实现快速监控策略?
A:监控工具推荐刚才已经说了,可以参考我们的方案然后自己摸索出适合自己的。至于容器生命周期短的问题,这个不就是容器设计嘛,很正常,多起几个相同的服务顶上。容器快速后是什么?Q:容器的一大特点是IP或者ID信息变化频繁,这就会导致时间序列数据库存储的监控数据量增长和vm相比大上不少,这块有什么应对方案吗?尝试过固定ID的,但是效果不佳。
A:这块确实没有什么好办法,不过可以换个角度,你可以将底层的实例抽象一个纬度,比如起了1个服务10个容器,你可以吧容器编号0-9,对应挂掉的容器,新启动继承这个编号。这样从时序上用这个作为标记,这样你就能看比较直观的显示了。这个功能我们SWAN实现了,可以考虑。Q:容器的安全如何做监控?
A:这个问题问的好,现在比较通用的监控基本上走的是两条路,一个是监控性能,一个是监控业务,安全层面监控,到现在我觉得还是要靠网络层来监控比较靠谱。Q:Docker启动Kafka集群的问题,有没有控制内存方面的经验呢?
A:Kafka 集群,性能监控的话,可以沿用原来的 Kafka 集群监控软件,这个我记得原来有一个什么来着,当然如果想做数据汇聚,也可以使用开源软件将数据汇聚到一个数据存储,然后在汇聚出来。关于Docker内存的超出被杀问题,这个主要是看你对于容器内存设置的容忍度问题,这里你大可以把容器当成一个机器,看到底给这个机器插多少内存合适。Q:Promethues有没有做高可用?
A:如果存储高可用的话,可以考虑使用两台Prometheus同时抓,这样数据完全一样,也没啥压力。
以上内容根据2017年06月29日晚微信群分享内容整理。分享人庞铮,数人云运维总监。15 年以上运维工作经验。就职过宏碁戏谷、第三波、SQUARE ENIX CO., LTD. 等。2015年加入数人云,从事数人云平台运维管理,在容器技术及SRE实践方面有深入研究。 DockOne每周都会组织定向的技术分享,欢迎感兴趣的同学加微信:liyingjiesa,进群参与,您有想听的话题或者想分享的话题都可以给我们留言。
原文发布时间为:2017-06-30
本文作者:庞铮
本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。
原文标题:DockOne微信分享(一二八):容器如何监控?
转载地址:http://wzvja.baihongyu.com/