监控对it运维来说到底有多重要?“因为你是我的眼,让我看见这世界就在我眼前”,这是一首耳熟能详的歌曲《你是我的眼》。监控,对于it运维工程师来说就是眼睛,如果没有监控,it运维工作就无从谈起;如果没有监控,it运维工程师就成了盲人。
一个良好的监控系统可以快速地发现并定位问题,减少宕机时间,提高故障处理速度,减轻it运维工作压力,甚至可以促进家庭和谐。
但是对于这么重要的系统,我发现很多公司都做的都不好:要么监控不到位,很多盲区;要么监控过多,太多无效条目导致报警麻木;要么监控系统五花八门,工具琳琅满目,重复监控,条理不清,等等。
我认为产生这些问题的原因主要有两点。其一,人的问题,it运维工作人员对监控没有深刻的认识,经验不足;其二,工具的问题,没有得心应手的工具,开源、闭源,五花八门,难以统筹高效利用及整合。
以前我们习惯于拿来主义,有问题需要用工具,上网查查别人都在用什么,我也下载一个试一试,差不多就行了。
但是现在时代变了,IaaS、PaaS、SaaS的结构越来越复杂,对于it运维工程师说来,必须对监控有深度定制或二次开发的能力才能满足当下的需要。所以我建议可以考虑开发一个简单的监控平台,这固然有压力,但是一旦成功,收益巨大。俗话说万事开头难,开了头其实就不难。
监控系统方法:
服务器端
前端开发主要会用到大量的页面元素,我建议使用目前开源的adminlte,这个前端框架元素非常丰富,页面简洁,比较适合作为监控系统的基础页面框架。
adminlte本身是基于Bootstrap开发的,几乎能满足你的任何要求;在图形展示上,建议使用Echarts监控图表;后台开发使用Django,Django具有绝对优势。
在it运维监控数据的设计方面,对资产信息、用户关系等的监控肯定要使MySQL这种关系性数据库,很多项目都是把监控条目直接丢到MySQL里,导致后期扩展困难,避免这种情况的方法是将所有监控信息全部写入MongoDB这样的NoSQL数据库,无论是在可扩展性还是性能上,它们都能应对当前海量的监控数据需求。
然后在服务端写一个独立的微服务接口,负责接收客户端上传的监控信息,然后将数据进行处理后插入MongoDB,以供前端进行数据调用。
这个API通过HTTP Server的方式启动,然后监听客户端的POST数据,接收到数据后以服务器本地时间为基准,打上监控数据的时间戳后存入MongoDB,并以主机名为依据,直接进行分表。
客户端
客户端的开发相对来说比较简单,主要引入了requests 进行HTTP动作的处理,引入了Schedule进行定时上报和计划任务,引入了Psutil进行性能信息采集。
客户端的性能数据主要依靠Psutil采集,Psutil有非常丰富的监控接口,能够轻松实现对CPU、内存、网络、磁盘的监控。
通过Psutil提供的接口采集性能信息,然后将结果封装成一个Json数据,使用Requests Post提交到服务器的API接口中去——一次监控过程就完成了。
it运维监控平台的通道也就打开了,以后监控任意条目的套路不过如此。NPM、中间件监控、APM,不都是这样吗?采集数据、上报、存盘并展现。
总结:
所以,我们何不写一个,让所有的公司监控都没有后患呢?在这里我只是提出的一种方法,如果您自己不能解决,那同创双子it运维将为您服务。
专注数字化方案建设,推动智慧企业生态圈的升级发展