Python中使用rrdtool结合Django进行带宽监控
2016-10-18 17:56
666 查看
我们有个网关需要做下带宽监控,能获取这个数据的唯一方法就是登录到管理界面查看。然后咱就写了个模拟登录的爬虫,定时抓取数据用rrdtool存储,最后通过Django来展示。这里就涉及了python的rrdtool,还有django怎么生成rrdtool这两个事。
rrdtool怎么使用的不细说了,比较好的教程是cu上的那个帖子,贴下部分代码,希望遇到类似需求的读者少走弯路。
安装就是
pip install rrdtool
创建和更新rrd数据库
创建和更新rrd文件# coding:utf-8 import os import time import rrdtool from settings import BASE_DIR def rrd_init_or_update(rrdname, rx, tx): base_dir = os.path.join(BASE_DIR, "rrddatas") rrdpath = os.path.join(base_dir, rrdname) if not os.path.isdir(base_dir): os.makedirs(base_dir) if os.path.isfile(rrdpath): rrd_update(rrdpath, rx, tx) else: rrd_init(rrdpath) rrd_update(rrdpath, rx, tx) def rrd_init(rrdname): """ 聚合时间根据自己需要 """ rrdtool.create(rrdname, "--start", str(int(time.time()) - 3600*24), "--step", '300', "DS:wan_rx:COUNTER:600:0:U", "DS:wan_tx: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", "RRA:MIN:0.5:1:600", "RRA:MIN:0.5:4:600", "RRA:MIN:0.5:24:600", "RRA:MIN:0.5:288:730") def rrd_update(rrdname, rx, tx): rrdtool.update(rrdname, "N:%s:%s" % (rx, tx))
注意 “DS:wan_rx:COUNTER:600:0:U”, 这里的U代表不限制上线,从0到最大值,如果可以预测区间,最好给一个最大值。
画图展示到web端
django展示rrd画图的view部分#-*- coding=utf-8 -*- import os import cStringIO import tempfile import datetime import rrdtool from django.shortcuts import render from django.http import HttpResponse from PIL import Image def wn_status(request): rrd_name = os.path.join(BASE_DIR, "rrddatas/gw.rrd") fd, path = tempfile.mkstemp('.png') # 时间格式中的 : 也要转义 dtime = datetime.datetime.strftime( datetime.datetime.now(), "%Y-%m-%d %H\:%M\:%S" ) rrdtool.graph(path, '--start', "-12h", "-t", "渭南网关带宽", "-w", "600", "-h", "200", 'DEF:value1={0}:wan_rx:AVERAGE'.format(rrd_name), 'DEF:value2={0}:wan_tx:AVERAGE'.format(rrd_name), 'AREA:value1#00ff00: rx', 'LINE:value2#ff0000: tx', "COMMENT:\\n", 'AREA:value1#00ff00:下载', 'GPRINT:value1:LAST:当前\:%8.0lf', 'GPRINT:value1:AVERAGE:平均\:%8.0lf', 'GPRINT:value1:MAX:最大\:%8.0lf', 'GPRINT:value1:MIN:最小\:%8.0lf', "COMMENT:\\n", 'LINE2:value2#4433ff:上传', 'GPRINT:value2:LAST:当前\:%8.0lf', 'GPRINT:value2:AVERAGE:平均\:%8.0lf', 'GPRINT:value2:MAX:最大\:%8.0lf', 'GPRINT:value2:MIN:最小\:%8.0lf', "COMMENT:\\n", "COMMENT:Date " + dtime) im = Image.open(path) out = cStringIO.StringIO() im.save(out, format='png') room = out.getvalue() out.close() os.remove(path) return HttpResponse(room, 'image/png')
!!注意: COMMENT那里需要做下转义,否则无法正常换行。画图中特别要注意转义的问题
\
:都要转义。
还有的做法就是定时使用 rrdtool的命令行工具生成监控图,web端访问的时候就和普通图片一样了。如果定时生成图片,就没那么灵活了。
相关文章推荐
- Python中使用rrdtool结合Django进行带宽监控
- 结合centreon监控平台,对rrdtool的数据进行二次分析highchart展现
- 使用python程序监控云服务器的带宽
- 如何在Django1.6结合Python3.4版本中使用MySql数据库
- 使用Flask结合python实现多台服务的内存监控
- 使用ajax来进行前后传送数据(django框架、Python语言)
- 如何在Django1.6结合Python3.4版本中使用MySql
- 如何在Django1.8 结合Python3.4版本中使用MySql
- 使用Python的Django框架结合jQuery实现AJAX购物车页面
- 使用Python的Supervisor进行进程监控以及自动启动
- 使用Grafana结合Zabbix进行监控图表展示
- 使用Python的Supervisor进行进程监控以及自动启动
- 使用python进行系统资源使用率监控
- python使用pygal进行绘制数据图表和监控图表
- django框架中使用Python的xlrd和xlwt进行excel表的导入和导出
- 使用Python的Django框架结合jQuery实现AJAX购物车页面
- 使用WAN优化进行带宽管理和监控
- 使用Flex 4、Django、Python和PyAMF进行开发
- python使用pygal进行绘制数据图表和监控图表
- 使用python对kafka offset 进行监控