前言:
这也是以前的内容,一说起实时监控,我就有很多的想法 ~ 以前也做过几个类似的全网流量监控的项目,用过websocket的模式的,还有就是redis pubsub模式,以前从同事的nagios获取流量数据(这个结果很郁闷,nagios加了Ndoutils插件后可以把数据存入到mysql里面,但是压力很大)。 这些方法也都是大同小异,一般从nagios和zabbix获取的数据不太实时,当然你也可以配置client发送数据包间隔时间,但那样的话,会造成你的一些个配置的改变,以及可能会出现利用率高的情况。 每个人都有自己的一套做法,我这边给大家再扩展出一个方案 salstack api的方式 !
Hi , 请多专注下我的博客, blog.xiaorui.cc
saltstack 我也做过类似的方案,有些朋友可能看到我写的grains returners的方法 ~ 其实也是可以的,需要说明的是 grains 的数据,一般是启动minion的时候获取的,不太好做实时。 returners的话,是采用回调的方法,也就是说 我把想要的数据交给minion处理,这家伙搞到数据后,往另一个接口扔数据。我这个时候想看数据的话,就从库里面看,比如他扔给redis,我就从redis里面看 ~
有需求的朋友可以先瞅瞅我以前写的例子~
redis pub sub的模式:
(咱们的saltstack api的模式也是属于pubsub的模式~)
第三方监控的扩展模式:
比如nagios的ndoutils插件~ 可以简单的mysql sql语句就可以获取数据 ~
获取监控项目
-------------------------------+------------------- 192.168.15.178 | CPU 192.168.15.178 | Current Load 192.168.15.178 | Current Users 192.168.15.178 | HTTP 192.168.15.178 | PING 192.168.15.178 | Qcache_free 192.168.15.178 | Root Partition 192.168.15.178 | SSH 192.168.15.178 | system swap 192.168.15.178 | Total Processes localhost | CPU
上面的redis pubsub 和 nagios都不靠谱,那为啥用saltstack api构造这些?
原因就是因为saltstack本身是python开发,所以对于我这个pythoner来说,这应用起来相当的好用,返回的结果也是可控的,是json的数据,好拆分!
有了接口,咱们可以做多线程的操作,当然saltstack本身确实是多进程的模式,用的multiprocess的模块。 在终端下肯定是好的,但是在这里不太适用,毕竟咱们是有啥数据,先返回,而不是等所有数据都搞到手了,才渲染页面。
那我简单描述下他的实现思路:
利用saltstack api 获取数据,然后插入到数据库里面,紧接着前端从后端来获取数据。
这些东西是需要点其他的支撑,比如 基础的集群saltstack的使用,数据库的使用,前端样式的使用。
图表的实现方式: 用sparkline图表实现的,这不是重点,重点在于saltstack还能这么玩。
</html>