漫谈容器监控系统

监控系统

人生路漫漫,你也不知道有多少眼睛在盯着你,期待你的表演。

容器一般运行在虚拟机上,也可以运行在物理机上,不同的情况分而治之。

1 运行在物理机上

当容器运行在物理机上的时候,一般的监控的agent是直接运行在物理机上,在进行容器的健康检查的时候,依赖于docker客户端程序。

从而一般会执行很多的docker exec id bash checkhealthy,然后根据返回值来判断容器是正常还是不正常。

不同的容器有不同的健康检查脚本,从而这都是黑盒监控,发生了什么,我在哪里?因为你只能看到一个返回值是255或者127等,你必须登陆到容器里面,看下健康检查脚本,然后看看是不是服务oom了,看看是不是nginx挂了。

容器里面一般运行几个进程,一个是nginx,一个是java进程,所以呢,很多时候是java挂了,从而导致健康检查不通过。

容器的docker exec只能进行检查服务是否正常,也就是用户侧能看到的一些内容,那么对于白盒检查呢,各种内部的性能数据,这个就要靠agent来进行收集了,例如cpu,内存,网络等性能数据,这些都是通过容器里面的一个监听服务,然后监控系统的服务端来拉取相关的性能指标。

当一个物理机上面运行一百个容器的时候,如果服务不稳定,咋整?在容器的镜像里面直接打入supervisord服务,这样其他的服务挂了就能自动拉起了,当然,这种导致的结果就是,可能会直接不告警了,当有服务挂了的时候,直接拉起,然后有的时候查问题,就得一个一个找了。

2 运行在虚拟机中

当容器运行在虚拟机中的时候,一般的设计是一个容器占用一个虚拟机,为啥不用多个呢?是因为在申请虚拟机资源的时候,可能设定的就是容器使用的内存和cpu和存储,从而并不会运行多个。

当容器运行在虚拟机的时候,监控怎么来做,是在虚拟机上运行监控,还是在容器里面运行监控?

一般都是在容器里面运行监控,是因为虚拟机的文件和容器的文件系统挂载的目录不同,从而导致在虚拟机中很难找到日志路径进行监控。

当把监控的agent直接打入到容器的镜像的时候,依旧是通过定时任务来进行收集相关的性能指标,而对于一些基础的监控,那就可以直接监听服务的端口了。

当使用容器监控的时候,由于需要监听虚拟机端口,从而容器里面和虚拟机里面同时只能运行一个监控程序。

在使用监控agent的时候,一般是使用单独的用户,例如monitor,单独的定时任务,例如crontab -l -u monitor,使用固定的端口进行监听,从而监控的服务端可以定时来拉取监控数据。

3 k8s的daemonset

emmm,为啥要提daemonset,因为这个可以设置node-exporter,也就是从每个node节点上收集到相关的metric数据。

daemonset的特点是在每个节点上最多运行一个pod,就像前面说到的一样,一个容器中最多一个agent,多了就容易打架。

而且使用daemonset的好处还有当有新的node上线之后,会自动调度到这个node上运行这个pod,再也不用担心扩容和所容的安装各种agent了。

当在容器里面看进程的时候,你会发现进程显示的不是uid,而是用户名,而在虚拟机里看进程的时候,显示的是uid,而不是用户名。

那么问题来了:当容器里面使用了chkconfig加入了开机启动的进程之后,那么容器重启的时候,这些进程会自动拉起吗?

本文分享自微信公众号 - SRE运维实践(gh_319dd73ec076)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java开发

GitBook的安装、卸载、常见问题

91930
来自专栏娱乐心理测试

快速初始化一个mpvue 项目

mpvue 是一个使用 Vue.js 开发小程序的前端框架。框架基于 Vue.js 核心,mpvue 修改了 Vue.js 的 runtime 和 compil...

14110
来自专栏芋道源码1024

不止 JDK7 的 HashMap ,JDK8 的 ConcurrentHashMap 也会造成 CPU 100%?原因与解决~

大家可能都听过JDK7中的HashMap在多线程环境下可能造成CPU 100%的现象,这个由于在扩容的时候put时产生了死链,由此会在get时造成了CPU 10...

18760
来自专栏C语言入门到精通

数据结构 | 每日一练(94)

2. 用一个数组 S(设大小为 MAX)作为两个堆栈的共享空间。请说明共享方法,栈满/栈空的判断条件,并用 C 或 PASCAL 设计公用的入栈操作 push(...

11020
来自专栏Jerry的SAP技术分享

动态修改dom node的两种方法性能比较

方法1在每一次循环里都会修改一次dom node,而方法2只有在循环结束后才进行唯一的一次dom node修改。 在动态插入子node p的个数很小的情况下,...

9920
来自专栏前端精髓

附件下载原来如此简单

之前我们已经了解过了 POST 上传的数据处理,以及包括上传的图片怎么处理,那么文件下载又是一个怎么样的过程呢?今天就要来好好说道说道。

20460
来自专栏IT技术精选文摘

面试题:了解Java的AQS吗

java.util.concurrent包(之后简称JUC包)中,提供了大量的同步与并发的工具类,是多线程编程的“利器”。其中locks包下,包含了多种锁,如R...

46730
来自专栏数据库新发现

紧急预警:wls9_async_response.war组件漏洞的延续

原文:http://www.enmotech.com/web/detail/1/725/1.html    (打开浏览器,复制链接即可)

20640
来自专栏小詹同学

爬虫神器!比selenium更高效!

介绍Pyppeteer之前先说一下Puppeteer,Puppeteer是谷歌出品的一款基于Node.js开发的一款工具,主要是用来操纵Chrome浏览器的 A...

30910
来自专栏kubernetes中文社区

kubernetes调度之污点与容忍

NodeAffinity节点亲和性,是Pod上定义的一种属性,使Pod能够按我们的要求调度到某个Node上,而Taints则恰恰相反,它可以让Node拒绝运行P...

25420

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励