Saltstack通过api接口调用modules实时监控

前言:

     这也是以前的内容,一说起实时监控,我就有很多的想法 ~  以前也做过几个类似的全网流量监控的项目,用过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还能这么玩。 

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN”
    “http://www.w3.org/TR/html4/strict.dtd”>
<head>
    <script type=”text/javascript” src=”jquery-1.7.2.js”></script>
    <script type=”text/javascript” src=”jquery.sparkline.js”></script>
    <script type=”text/javascript”>
    $(function() {
        /** This code runs when everything has been loaded on the page */
        /* Inline sparklines take their values from the contents of the tag */
        $(‘.inlinesparkline’).sparkline();
        /* Sparklines can also take their values from the first argument
        passed to the sparkline() function */
        var myvalues = [10,8,5,7,4,4,1];
        $(‘.dynamicsparkline’).sparkline(myvalues);
        /* The second argument gives options such as chart type */
        $(‘.dynamicbar’).sparkline(myvalues, {type: ‘bar’, barColor: ‘green’} );
        /* Use ‘html’ instead of an array of values to pass options
        to a sparkline with data in the tag */
        $(‘.inlinebar’).sparkline(‘html’, {type: ‘bar’, barColor: ‘red’} );
    });
    </script>
</head>
<body>
<p>
Inline Sparkline: <span class=”inlinesparkline”>1,4,4,7,5,9,10</span>.
</p>
<p>
Sparkline with dynamic data: <span class=”dynamicsparkline”>Loading..</span>
</p>
<p>
Bar chart with dynamic data: <span class=”dynamicbar”>Loading..</span>
</p>
<p>
Bar chart with inline data: <span class=”inlinebar”>1,3,4,5,3,5</span>
</p>
</body>

</html>



大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

发表评论

邮箱地址不会被公开。 必填项已用*标注