當前位置:成語大全網 - 書法字典 - 如何用Python寫壹個簡單的監控系統

如何用Python寫壹個簡單的監控系統

首先,構建數據庫表。

建立數據庫“falcon”,建表語句如下:

創建表“stat ”(

` id ' int(11)無符號NOT NULL AUTO_INCREMENT,

` host ' varchar(256)默認為空,

` mem_free` int(11)默認為NULL,

` mem_usage` int(11)默認為NULL,

` mem_total` int(11)默認為NULL,

` load _ avg ' varchar(128)默認為NULL,

` time ' bigint(11)默認為NULL,

主鍵(` id `),

鍵` host` (`host`(255))

)ENGINE=InnoDB AUTO_INCREMENT=0默認CHARSET = utf8

首先,我們設計壹個web服務來實現以下功能:

1.完成監控頁面的顯示

2.接受郵寄提交的數據

3.提供json數據獲取接口。

目錄結構如下:

├──燒瓶_web.py

└──模板

mon.html└──

flask_web.py

將mysqldb作為MySQL導入

導入json

從燒瓶導入燒瓶,請求,渲染_模板

app = Flask(__name__)

db = mysql.connect(user="reboot ",passwd="reboot123 ",\

db="falcon ",charset="utf8 ")

db .自動提交(True)

c = db.cursor()

@app.route("/",methods=["GET "," POST"])

def hello():

sql = " "

if request.method == "POST ":

data = request.json

嘗試:

結構化查詢語言

= "插入` stat `中

(` host ',` mem_free ',` mem_usage ',` mem_total ',` load_avg ',` time `)

值(' %s ',' %d ',' %d ',' %d ',' %s ',' %d ')"(數據['主機'],

數據['MemFree'],數據['MemUsage'],數據['MemTotal'],數據['LoadAvg'],

int(data['Time']))

ret = c.execute

除了mysql。完整性錯誤:

及格

返回“確定”

否則:

返回render_template("mon.html ")

@app.route("/data ",methods=["GET"])

def getdata():

c.execute("SELECT `time `,從` stat `中選擇` mem_usage ' ")

ones = [[i[0]*1000,i[1]] for i in c.fetchall()]

返回“% s(% s);”% (request.args.get('callback '),json.dumps(ones))

if __name__ == "__main__ ":

app.run(host="0.0.0.0 ",port=8888,debug=True)

這個模板頁面是我復制的高庫存的壹個例子,mon.html。

為了簡單起見,我們只向頁面顯示mem_usage信息。

& lttitle & gt51 reboot . com & lt;/title & gt;

& lt!DOCTYPE HTML & gt

& lthtml & gt

& lthead & gt

& ltmeta/Ajax/libs/jquery/1 . 8 . 2/jquery . min . js " & gt;& lt/script & gt;

& ltstyle type="text/css " >

${demo.css}

& lt/style & gt;

& ltscript type = " text/JavaScript " & gt;

$(function () {

$.getJSON('/data?回調=?',函數(數據){

//創建圖表

$('#container ')。高圖表('股價圖',{

範圍選擇器:{

inputEnabled: $('#container ')。width()>;480,

選中:1

},

標題:{

文本:“51Reboot.com”

},

系列:[{

姓名:' 51Reboot.com ',

數據:數據,

類型:“樣條線”,

工具提示:{

數值小數:2

}

}]

});

});

});

& lt/script & gt;

& lt/head & gt;

& ltbody & gt

& ltscript src = "/Ajax/libs/high stock/2 . 0 . 4/high stock . js " & gt;& lt/script & gt;

& ltscript src = "/modules/exporting . js " & gt;& lt/script & gt;

& ltdiv id = " container " style = " height:400 px " & gt;& lt/div & gt;

& lt/body & gt;

& lt/html & gt;

web演示頁面已經完成,並且正在運行:

Python flask_web.py監聽端口8888。

我們需要成為壹個代理來收集數據並上傳到數據庫。

moniItems.py

#!/usr/bin/env python

進口檢驗

導入時間

導入urllib,urllib2

導入json

導入插座

mon類:

def __init__(self):

self.data = {}

def getTime(自身):

return str(int(time . time())+8 * 3600)

def getHost(self):

返回socket.gethostname()

def getLoadAvg(self):

使用open('/proc/loadavg ')作為load_open:

a = load_open.read()。split()[:3]

返回“,”。加入(a)

def getMemTotal(self):

使用open('/proc/meminfo ')作為mem_open:

a = int(mem_open.readline()。split()[1])

返回a / 1024

def getMemUsage(self,noBufferCache=True):

如果沒有緩存:

使用open('/proc/meminfo ')作為mem_open:

T = int(mem_open.readline()。split()[1])

F = int(mem_open.readline()。split()[1])

B = int(mem_open.readline()。split()[1])

C = int(mem_open.readline()。split()[1])

return (T-F-B-C)/1024

否則:

使用open('/proc/meminfo ')作為mem_open:

a = int(mem_open.readline()。split()[1])-int(mem _ open . readline()。split()[1])

返回a / 1024

def getMemFree(self,noBufferCache=True):

如果沒有緩存:

使用open('/proc/meminfo ')作為mem_open:

T = int(mem_open.readline()。split()[1])

F = int(mem_open.readline()。split()[1])

B = int(mem_open.readline()。split()[1])

C = int(mem_open.readline()。split()[1])

return (F+B+C)/1024

否則:

使用open('/proc/meminfo ')作為mem_open:

mem_open.readline()

a = int(mem_open.readline()。split()[1])

返回a / 1024

def runAllGet(self):

#自動獲取mon類中的所有getXXX方法,以XXX為鍵,以getXXX()的返回值為值構造壹個字典。

為了在inspect.getmembers(self,predicate=inspect.ismethod)中獲得樂趣:

if fun[0][:3] == 'get ':

self . data[fun[0][3:]]= fun[1]()

返回自我數據

if __name__ == "__main__ ":

雖然正確:

m = mon()

data = m.runAllGet()

打印數據

req = urllib2。請求(":8888 ",json.dumps(data),{ ' Content-Type ':' application/JSON ' })

f = urllib2.urlopen(req)

response = f.read()

打印響應

f.close()

時間.睡眠(60)

nohup python moniItems.py & gt/dev/null 2 & gt;& amp1。奔跑