前言:
其实一说起实时监控,我就有很多的感想 ~ 以前也做过几个类似的全网流量监控的项目,用过websocket的模式的,还有就是redis pubsub模式,还有就是从同事的nagios获取流量数据(这个结果很郁闷,nagios加了Ndoutils插件后可以把数据存入到mysql里面,当时水平不到位,获取的数据有断链,原因不明)。 这些方法也都是大同小异,一般从nagios和zabbix获取的数据不太实时,当然你也可以配置间隔时间,但那样的话,会造成你的一些个配置的改变,以及可能会出现利用率高的情况。 每个人都有自己的一套做法,我这边给大家再扩展出一个方案 salstack api的方式 !
请多关注下我的个人博客, 更多运维研发及python, blog.xiaorui.cc
saltstack 我也做过类似的方案,有些朋友可能看到我写的grains returners的方法 ~ 其实也是可以的,需要说明的是 grains 的数据,一般是启动minion的时候获取的,不太好做实时。 returners的话,是采用回调的方法,也就是说 我把想要的数据交给minion处理,这家伙搞到数据后,往另一个接口扔数据。我这个时候想看数据的话,就从库里面看,比如他扔给redis,我就从redis里面看 ~
有需求的朋友可以先瞅瞅我以前写的例子,大家要是觉得那里不对,咱们讨论下哈
websocket的模式:
http://rfyiamcool.blog.51cto.com/1030776/1269232
redis pub sub的模式:
(咱们的saltstack api的模式也是属于pubsub的模式~)
http://rfyiamcool.blog.51cto.com/1030776/1272629
第三方监控的扩展模式:
比如nagios的ndoutils插件~ 可以简单的mysql sql语句就可以获取数据 ~
获取监控项目
1
2
3
4
5
6
7
8
9
10
11
12
|
-------------------------------+-------------------
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
|
为啥用saltstack api
原因就是好用,返回的结果也是可控的,是json的数据,好拆分! 一开始刚用saltstack做测试的时候,数据的前端页面数据渲染都是用的subprocess的模块,搓的要命。
有了接口,咱们可以做多线程的操作,当然saltstack本身确实是多进程的模式,用的multiprocess的模块。 在终端下肯定是好的,但是在这里不太适用,毕竟咱们是有啥数据,先返回,而不是等所有数据都搞到手了,才渲染页面。
原文:http://rfyiamcool.blog.51cto.com/1030776/1345518
简单描述下他的实现思路:
利用saltstack api 获取数据,然后插入到数据库里面,然后前端从后端来获取数据。
做这个东西,需要点其他的支撑,比如 基础的集群saltstack的使用,数据库的使用,前端样式的使用。 这些还算好学的,搜搜网上的文档也都可以搞定。
图表的数据暂时是模拟的,环境有点问题,我就简单模拟了一个server ! 原理都是那么回事 !
图表的实现方式: 用sparkline实现的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
<!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>
|
先放一个demo,这两天把项目的细节写出来 !!!
本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1345518,如需转载请自行联系原作者