您的位置:首页 > 运维架构

[rrdtool]监控和自动画图,简单的监控.md

2015-07-03 11:43 471 查看
现在想要监控服务的流量和并发数,可是又没那么多时间来写系统,其他的运维系统又不熟悉,于是就用现有的rrdtool shell做了个简单的监控界面,临时用下,也算是个小实验把。 rrdtool也是刚接触,算是一个小练习

流程

大致的流程是这样的(centos6操作系统)

初始化rrd数据库

shell脚本定时更新rrd中的数据

shell脚本定时画图(这里就画了一个24小时的)生成图片

html,把图片包含里面。 界面可以直接访问

开发

初始化

主要就是2个功能,24小时流量图,24小时并发图(5分钟抽样,不是全部的实时监控)

rrdtool create eth1.rrd --step 300 \
DS:eth1_in:COUNTER:600:0:U \
DS:eth1_out:COUNTER:600:0:U \
RRA:AVERAGE:0.5:1:600 \
RRA:AVERAGE:0.5:4:600 \
RRA:AVERAGE:0.5:24:600 \
RRA:AVERAGE:0.5:288:730 \
RRA:MAX:0.5:1:600 \
RRA:MAX:0.5:4:600 \
RRA:MAX:0.5:24:600 \
RRA:MAX:0.5:288:730

rrdtool create curnum.rrd --step 300 \
DS:num:GAUGE:600:0:U \
RRA:AVERAGE:0.5:1:600 \
RRA:AVERAGE:0.5:4:600 \
RRA:AVERAGE:0.5:24:600 \
RRA:AVERAGE:0.5:288:730 \
RRA:MAX:0.5:1:600 \
RRA:MAX:0.5:4:600 \
RRA:MAX:0.5:24:600 \
RRA:MAX:0.5:288:730


更新数据

更新脚本,并画图,假如cron,5分钟一次

*/5 * * * * /bin/sh /home/erya/run/monitor/rrd_update.sh >/dev/null 2>&1


[root@localhost moniter]# cat rrd_update.sh
#!/bin/bash
#orangleliu
#centos  获取某个网卡某个时间 收发包的大小
eth_name="eth1"
in=$(cat /proc/net/dev|grep eth1|cut -d ':' -f 2|awk '{print $1}')
out=$(cat /proc/net/dev|grep eth1|cut -d ':' -f 2|awk '{print $9}')
curnum=$(netstat -nat|grep ESTABLISHED|wc -l)

echo "$eth_name int is ${in}"
echo "$eth_name out is ${out}"
echo "curnum is ${curnum}"

#udpate rrd
rrd_dir=/home/erya/run/monitor
/usr/bin/rrdtool updatev ${rrd_dir}/eth1.rrd  N:${in}:${out}
/usr/bin/rrdtool updatev ${rrd_dir}/curnum.rrd  N:${curnum}


定时画图

画图脚本,每5分钟一次(cron, 或者追加在更新脚本的最后部分

*/5 * * * * /bin/sh /home/erya/run/monitor/rrd_graph.sh >/dev/null 2>&1


#!/bin/bash
#5分钟画图一次,给页面访问

cd /home/erya/run/monitor

/usr/bin/rrdtool graph net.png \
--start -86400 --end now \
--title "100 server net flow 1 day" \
DEF:value1=eth1.rrd:eth1_in:AVERAGE \
DEF:value2=eth1.rrd:eth2_out:AVERAGE \
AREA:value1#00ff00:in \
LINE2:value2#ff0000:out:STACK

/usr/bin/rrdtool graph curnum.png \
--start -86400 --end now \
--title "100 server concurrency number 24 hours" \
DEF:value1=curnum.rrd:num:AVERAGE \
AREA:value1#00ff00:num


然后我写了一个html,把两个图片包含进去,配置到nginx 中(就是几个location),就可以直接从浏览器访问了。

也算是,超级简陋的监控方式把。

界面

root@localhost moniter]# cat monitor.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<tilte> 100服务器流量 并发监控图</title>
</head>
<body>
<h3>24小时内流量趋势</h3>
<img src="http://xxx/rrd/net.png" />
<h3>24小时内并发趋势</h3>
<img src="http://xxx/rrd/curnum.png" />
</body>
</html>


nginx配置片段

location ^~/rrd/net.png {
alias /home/erya/run/monitor/net.png;
}

location ^~/rrd/curnum.png {
alias /home/erya/run/monitor/curnum.png;
}

location ^~/rrd/monitor.html {
alias /home/erya/run/monitor/monitor.html;
}


效果图



声明:

本文出自 “orangleliu笔记本” 博客,转载请务必保留此出处http://blog.csdn.net/orangleliu/article/details/46739853作者orangleliu 采用署名-非商业性使用-相同方式共享协议
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息