1. 程式人生 > >Python中使用rrdtool結合Django進行頻寬監控

Python中使用rrdtool結合Django進行頻寬監控

我們有個閘道器需要做下頻寬監控,能獲取這個資料的唯一方法就是登入到管理介面檢視。然後咱就寫了個模擬登入的爬蟲,定時抓取資料用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進行頻寬監控

我們有個閘道器需要做下頻寬監控,能獲取這個資料的唯一方法就是登入到管理介面檢視。然後咱就寫了個模擬登入的爬蟲,定時抓取資料用rrdtool儲存,最後通過Django來展示。這裡就涉及了python

Python日期和時間進行操作time和datetime

Python中提供了多個用於對日期和時間進行操作的內建模組:time模組、datetime模組和calendar模組。其中time模組是通過呼叫C庫實現的,所以有些方法在某些平臺上可能無法呼叫,但是其提供的大部分介面與C標準庫time.h基本一致。time模組相比,datetime模組提供的介面更直

python的list如何進行相減操作或者將list分片,即list加減

問題描述:假設我有這樣兩個list,        一個是list1,list1 = [1, 2, 3, 4, 5]        一個是list2,list2 = [1, 4, 5]   

python簡單使用socket進行通訊

客戶端: import socket link = socket.socket(socket.AF_INET, socket.SOCK_STREAM) link.connect(("192.168.43.64", 80)) while True: data = input(

Python使用mock模組進行單元測試

為什麼需要Mock 假設現在系統有兩個模型A和B,其中A依賴B(例如A,B都是函式,A函式體內呼叫了B函式),但是B還沒完成,或者根本就不在控制之內;這時候又需要對A的功能進行單獨測試,就需要使用mock物件,模擬出一個假的fake_B模組,雖然這個fake_

按照字符串的數組進行排序的方法(python

正則表達 mil uil () false 解決 lam font .cn 有時候處理數據時,想要按照字符串中的數字的大小進行排序。 譬如,存在一組記錄文件,分別為‘1.dat’,‘2.dat‘... 當我把該文件夾中的所有記錄文件名讀到一個列表中,這些字符串的排列方式為:

Python之路66-Django的Cookie和Session

python目錄一、Cookie二、Session一、Cookie1.獲取Cookie request.COOKIES["key"] request.get_signed_cookie(key, default=RAISE_ERROR, s, max_age=None) # 參數 # default:默認

pythondjango框架的csrf驗證

驗證 觸發 pwd checkbox 參數 setup quest class 設置 在form表單以post的方式提交時,django默認會帶一個驗證的機制csrf驗證 <form action="/day02/login/" method="post">

利用Zabbix的自動註冊功能添加局域網的服務器進行監控

監控 自動註冊 zabbix 在PMM監控系統的日常使用過程中發現了一些槽點: 1.監控報警功能不熟悉 2.歷史數據保存問題 3.莫名其妙的在一段時間內缺失監控數據,導致和開發理論的時候心虛決定搭建一套zabbix監控環境進行互補 服務端安裝: yum -y inst

[Python] 利用Django進行Web開發

ons 條件 turn log har 包含 參數 ^c 檢測 第一步:下載並安裝django 首先,在Django官網上下載適合自己Python的Django版本,在安裝Django前首先確定你已成功安裝了python。 Windows系統下安裝Djang

Python進行JSON轉化

發送 div 方法 ati 時也 load 默認 轉換 ict JSON(JavaScript Object Notation, JavaScript對象表示)是網絡傳輸中經常使用的一種數據形式。 在Python中,經常將字典轉化成JSON來發送,使用的主要方法為dumps

Python學習21:Python函數的用法,使用函數進行簡單的數學運算

Python 函數 錯誤 今天學習了Python函數的用法,了解了使用Python如何定義一個函數。而且代碼編寫過程中也遇到了一些小小的錯誤,特此記錄一下,以方便以後在遇到同樣錯誤時能夠快速找到問題的點。 # --coding: utf-8 -- # 定義4個簡單的函數,分別是加、減、乘、除,定義

python學習-pythonrrdtool結合模塊

rrdtools rrdtool(round robin database)工具為環狀數據庫的存儲格式,round robin是一種處理定量數據以及當前元素指針的技術。rrdtool主要用來跟蹤對象的變化情況,生成這些變化的走勢圖,比如業務的訪問流量、系統性能、磁盤利用率等趨勢圖,很多流行監控平臺都使用到r

Python+Selenium與Chrome如何進行完美結合

python selenium 開篇:最近有學員在學習Selenium時,使用firefox有問題,就想嘗試chrome,而其使用crome時又遇到個各種問題..。特整理如下文章供遇到該問題的人參考整篇:如何解決呢?可參考如下..基礎環境介紹:python3.5 + selenium2.48(或以上)

Django數據查詢對字段進行排序

www. .cn href ref 倒序 pan 兩個 ctime bject 第一種方法:使用order_by進行排序 Articlelist = Article.objects.filter(**kwargs).order_by(‘nid‘) Articlelist =

PYTHON使用TMTOOLKIT進行主題模型LDA評估

統一 進行 常量 註意 參數 cti 8.0 數列 ng- 主題建模的英文一種在大量文檔中查找抽象藝術主題藝術的方法。有了它,就有可能發現隱藏或“潛在”主題的混合,這些主題因給定語料庫中的文檔而異。一種作為監督無的機器學習方法,主題模型不容易評估,因為沒有標記的“基礎事實”

Python筆記19(Djangoauth模塊的用法)

刪除 我想 super 校驗 utf-8 strac 開發 src length 一、auth模塊簡介 Django自帶的用戶認證 我們在開發一個網站的時候,無可避免的需要設計實現網站的用戶系統。此時我們需要實現包括用戶註冊、用戶登錄、用戶認證、註銷、修改密碼等功能,這

Python腳本調用Django環境

name mod default ngs code 環境 del imp color import os if __name__ == ‘__main__‘: os.environ.setdefault("DJANGO_SETTINGS_MODULE", "BM

Python基於imageio讀取視訊進行完美編解碼的簡易方法

讀視訊和寫視訊一直由於編解碼的問題給程式設計師造成很多麻煩。對此進行了一些探索。用Python讀取視訊有兩種主要方法,分別是基於imageio庫和OpenCV,其中OpenCV加上ffmpeg的安裝編譯很麻煩,推薦大家使用第一種方法,不過大家也可依據自己的需求進行使用。 方法一:使用image

Python | 5分鐘教你學會Django系統錯誤監控

話不多說,直入正題。 先上圖,看一下監控的效果。 如下是監控我們網站系統錯誤的郵件。包含了請求的url地址,以及詳細的異常資訊。 一、監控所有的request請求 如何實現系統監控,自動傳送錯誤日誌的郵件呢?只需配置配置settings檔案即可。 1.設定傳送郵件配置資訊 郵件會發送到ADMI