- 论坛徽章:
- 0
|
本帖最后由 ljwsy 于 2012-06-28 00:53 编辑
前言
前段时间学习PY,并写了个小脚本用于阻断sshd扫描,工作得很好,但查看统计数据时只能是文本。心中想“如果是图形统计就好了”,图形——自然而然是用cacti了,于是着手做……经过N多努力数据是进了,图形怎么都不出来。这可不能怨谁,哪个让我对rrdtool不熟悉呢……还是先去啃rrdtool吧。又经过N多努力,有点门道了,嘿嘿,大家一起来学吧。
环境
stu# uname -a
FreeBSD stu.xxx.cn 9.0-STABLE FreeBSD 9.0-STABLE #0: Fri May 18 22:02:36 CST 2012 ljwsy@stu.xxx.cn:/usr/obj/usr/src/sys/STU i386
stu# pkg_info | grep python
python26-2.6.8 An interpreted object-oriented programming language
python31-3.1.5 An interpreted object-oriented programming language
stu# pkg_info | grep rrdtool
py26-rrdtool_lgpl-1.0b1_2 Python interface to RRDTool, the graphing and logging utili
rrdtool-1.4.7_1 Round Robin Database Tools
stu# pkg_info | grep apache
apache-2.2.22_5 Version 2.2.x of Apache web server with prefork MPM.
目标
监控两台机的温度并绘图。一台是本机,另一台是远程机(snmp数据)。
stu# sysctl -a | /usr/bin/grep hw | grep temper
hw.acpi.thermal.tz0.temperature: 49.0C
stu# snmpwalk -c public -v 1 fb.xxx.cn .1.3.6.1.4.1.2021.51.101.1
UCD-SNMP-MIB::ucdavis.51.101.1 = STRING: " 46.5"
参考资料
1.Using RRD with Python: short introduction
2.RRDtool简体中文教程 v1.01
建立rrd数据库
create.py- #!/usr/local/bin/python
- import sys
- import rrdtool
-
- ret = rrdtool.create("/usr/local/www/rrdtool/rrd/temperture.rrd", "--step", "300", "--start", '0',
- "DS:fb:GAUGE:600:U:U",
- "DS:stu:GAUGE:600:U:U",
- "RRA:AVERAGE:0.5:1:600",
- "RRA:AVERAGE:0.5:6:700",
- "RRA:AVERAGE:0.5:24:775",
- "RRA:AVERAGE:0.5:288:797",
- "RRA:MAX:0.5:1:600",
- "RRA:MAX:0.5:6:700",
- "RRA:MAX:0.5:24:775",
- "RRA:MAX:0.5:444:797")
-
- if ret:
- print rrdtool.error()
复制代码 更新数据库
stu# rrdtool fetch rrd/temperture.rrd AVERAGE -s 1340784000
fb stu
1340784300: nan nan
1340784600: nan nan
1340784900: nan nan
1340785200: nan nan
1340785500: nan nan
1340785800: nan nan
1340786100: nan nan
1340786400: nan nan
stu# ./update.py
stu# rrdtool fetch rrd/temperture.rrd AVERAGE -s 1340784000
fb stu
1340784300: nan nan
1340784600: nan nan
1340784900: nan nan
1340785200: nan nan
1340785500: nan nan
1340785800: nan nan
1340786100: nan nan
1340786400: 4.6699204174e+01 4.7510090197e+01
1340786700: nan nan
update.py- #!/usr/local/bin/python
- import sys
- import time
- import commands
- import rrdtool
- ret="/sbin/sysctl -a | /usr/bin/grep hw | /usr/bin/grep temper"
- (t,tmp)=commands.getstatusoutput(ret)
- t=tmp.split()
- tmp=t[1].split('C')[0]
- stu=tmp.split('.')[0]
- ret="/usr/local/bin/snmpwalk -c public -v 1 fb.xxx.cn .1.3.6.1.4.1.2021.51.101.1"
- (t,tmp)=commands.getstatusoutput(ret)
- t=tmp.rsplit('"')[1]
- tmp=t.split()[0]
- fb=tmp.split('.')[0]
- tmp='N:%s:%s' % (fb,stu)
- ret = rrdtool.update('/usr/local/www/rrdtool/rrd/temperture.rrd',tmp)
- if ret:
- print rrdtool.error()
- exit()
复制代码 有数据更新后,你就可以把update.py放进crontab中让它5分钟跑一次。
绘图
在update.py中添加绘图代码:- ret = rrdtool.graph( "/usr/local/www/apache22/data/temperture.png", "--start", "-1d", "--vertical-label=SystemTemperture",
- "DEF:fb=/usr/local/www/rrdtool/rrd/temperture.rrd:fb:AVERAGE",
- "DEF:stu=/usr/local/www/rrdtool/rrd/temperture.rrd:stu:AVERAGE",
- "AREA:fb#00FF00:FB",
- "LINE1:stu#0000FF:STU\\r",
- )
- if ret:
- print rrdtool.error()
复制代码stu# ./update.py
stu# ls -l /usr/local/www/apache22/data/temperture.png
-rw-r--r-- 1 root wheel 7158 Jun 27 16:47 /usr/local/www/apache22/data/temperture.png
stu#
这是成果:
先到此为止吧。大家一起努力呀…… |
|