学用py-rrdtool_lgpl

本帖最后由 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
  1. #!/usr/local/bin/python
  2. import sys
  3. import rrdtool

  4. ret = rrdtool.create("/usr/local/www/rrdtool/rrd/temperture.rrd", "--step", "300", "--start", '0',
  5. "DS:fb:GAUGE:600:U:U",
  6. "DS:stu:GAUGE:600:U:U",
  7. "RRA:AVERAGE:0.5:1:600",
  8. "RRA:AVERAGE:0.5:6:700",
  9. "RRA:AVERAGE:0.5:24:775",
  10. "RRA:AVERAGE:0.5:288:797",
  11. "RRA:MAX:0.5:1:600",
  12. "RRA:MAX:0.5:6:700",
  13. "RRA:MAX:0.5:24:775",
  14. "RRA:MAX:0.5:444:797")

  15. if ret:
  16. 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
  1. #!/usr/local/bin/python
  2. import sys
  3. import time
  4. import commands
  5. import rrdtool
  6. ret="/sbin/sysctl -a | /usr/bin/grep hw | /usr/bin/grep temper"
  7. (t,tmp)=commands.getstatusoutput(ret)
  8. t=tmp.split()
  9. tmp=t[1].split('C')[0]
  10. stu=tmp.split('.')[0]
  11. ret="/usr/local/bin/snmpwalk -c public -v 1 fb.xxx.cn .1.3.6.1.4.1.2021.51.101.1"
  12. (t,tmp)=commands.getstatusoutput(ret)
  13. t=tmp.rsplit('"')[1]
  14. tmp=t.split()[0]
  15. fb=tmp.split('.')[0]
  16. tmp='N:%s:%s' % (fb,stu)
  17. ret = rrdtool.update('/usr/local/www/rrdtool/rrd/temperture.rrd',tmp)
  18. if ret:
  19.         print rrdtool.error()
  20. exit()
复制代码
有数据更新后,你就可以把update.py放进crontab中让它5分钟跑一次。

绘图
在update.py中添加绘图代码:
  1. ret = rrdtool.graph( "/usr/local/www/apache22/data/temperture.png", "--start", "-1d", "--vertical-label=SystemTemperture",
  2. "DEF:fb=/usr/local/www/rrdtool/rrd/temperture.rrd:fb:AVERAGE",
  3. "DEF:stu=/usr/local/www/rrdtool/rrd/temperture.rrd:stu:AVERAGE",
  4. "AREA:fb#00FF00:FB",
  5. "LINE1:stu#0000FF:STU\\r",
  6. )
  7. if ret:
  8.         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#

这是成果:
temperture.png
转自: http://bbs.chinaunix.net/forum-viewthread-tid-3755510.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值