由于上證所,深交所level1,level2金融數(shù)據(jù)服務(wù)器在上午9:00開始到11:30和下午13:00開始到15:30一共大約5個(gè)小時(shí)的時(shí)間內(nèi)流量比較大所以被監(jiān)控服務(wù)器的網(wǎng)絡(luò)流速算是一個(gè)被監(jiān)控的重要指標(biāo)。可以通過累加一段時(shí)間內(nèi)各個(gè)網(wǎng)卡的上行,下行流量除以這個(gè)時(shí)間間隔計(jì)算出這段時(shí)間內(nèi)的平均網(wǎng)速,我現(xiàn)在的采集頻率是1分鐘采集一次,在實(shí)際開盤期間運(yùn)行過程中得到的網(wǎng)速監(jiān)控信息用還是比較準(zhǔn)確的,都保持在5M/S左右的速度,有時(shí)候在平時(shí)非服務(wù)期看見某臺(tái)服務(wù)器的內(nèi)網(wǎng)網(wǎng)卡網(wǎng)速達(dá)到5M/S ,果然就是有人在大手筆傳輸。
獨(dú)立的監(jiān)控腳本是返回一個(gè)列表嵌套元組的數(shù)據(jù)結(jié)構(gòu),最后再匯總成一個(gè)完整的XML數(shù)據(jù)島,為了調(diào)試方便腳本的每一個(gè)中間結(jié)果都導(dǎo)出到一個(gè)臨時(shí)文本中。
運(yùn)行以下腳本要確定你的linux裝了ethtool工具,在ubuntu2.6.27-7-server,ubuntu22.6.27.19-5-default,suse 2.6.27.19-5-default 測(cè)試通過。
代碼:
-
-
- import re
- import os
- import time
-
- import utils
- def sortedDictValues3(adict):
- keys = adict.keys()
- keys.sort()
- return map(adict.get, keys)
-
- def run():
- if utils.isLinux() == False:
- return [('ifconfig_collect os type error','this is windows')]
-
- if os.path.isfile('./oldifconfig'):
- fileold = open('./oldifconfig', 'r')
- fileold.seek(0)
-
- (oldtime, fileoldcontent) = fileold.read().split('#')
- fileold.close;
- netcard = {}
- tempstr = ''
- key = ''
- for strline in fileoldcontent.split('\n'):
- reobj = re.compile('^lo*.')
- if reobj.search(strline):
- break;
- reobj = re.compile('^eth*.')
- if reobj.search(strline):
- key = strline.split()[0]
- tempstr = tempstr + strline + '\n'
- netcard[key] = tempstr
- RXold = {}
- TXold = {}
- for key,value in netcard.items():
- tempsplit = value.split('\n')
- netcard[key] = ''
- for item in tempsplit:
- item = item + '<br>'
- netcard[key] = netcard[key] + item
- tempcount = 1
- for match in re.finditer("(bytes:)(.*?)( \()", item):
- if tempcount == 1:
- RXold[key] = match.group(2)
- tempcount = tempcount + 1
- elif tempcount == 2:
- TXold[key] = match.group(2)
- netcard[key] = netcard[key] + 'net io percent(bytes/s): 0 <br>'
-
-
- os.system('ifconfig > ifconfigtemp')
- file = open('./ifconfigtemp','r');
- fileold = open('./oldifconfig', 'w')
- temptimestr = str(int(time.time()));
- fileold.write(temptimestr)
- fileold.write('#')
- file.seek(0)
- fileold.write(file.read())
- fileold.close()
- returnkeys = []
- returnvalues = []
- netcard = {}
- tempcountcard = 0
- file.seek(0)
- key = ''
- for strline in file.readlines():
- reobj = re.compile('^lo*.')
- if reobj.search(strline):
- break;
- reobj = re.compile('^eth*.')
- if reobj.search(strline):
- key = strline.split()[0]
- netcard[key] = ''
- netcard[key] = netcard[key] + strline
- newnetcard = {}
- file.seek(0)
- key = ''
- for strline in file.readlines():
- reobj = re.compile('^lo*.')
- if reobj.search(strline):
- break;
- if re.search("^eth", strline):
- templist = strline.split()
- key = templist[0]
- newnetcard[key] = ''
- newnetcard[key] = templist[4] + newnetcard[key] + ' '
- if re.search("^ *inet ", strline):
- templist = strline.split()
- newnetcard[key] = templist[1][5:] + ' ' + newnetcard[key] + ' '
- for key,value in newnetcard.items():
-
- os.system('ethtool %s > ethtooltemp'%(key))
- file = open('./ethtooltemp','r');
- tempethtooltemplist = file.read().split('\n\t')
- file.close
- if re.search("yes", tempethtooltemplist[-1]):
- templist = newnetcard[key].split()
- newnetcard[key] = templist[0] + ' runing! ' + templist[1]
- else:
- templist = newnetcard[key].split()
- if len(templist) > 1:
- newnetcard[key] = templist[0] + ' stop! ' + templist[1]
- else:
- newnetcard[key] = 'stop! ' + templist[0]
- file.close()
- RX = {}
- TX = {}
- for key,value in netcard.items():
- tempsplit = value.split('\n')
- netcard[key] = ''
- for item in tempsplit:
- item = item + '<br>'
- netcard[key] = netcard[key] + item
- tempcount = 1
- for match in re.finditer("(bytes:)(.*?)( \()", item):
- if tempcount == 1:
- RX[key] = str(int(match.group(2)) - int(RXold[key]))
- tempcount = tempcount + 1
- elif tempcount == 2:
- TX[key] = str(int(match.group(2)) - int(TXold[key]))
- divtime = float(int(time.time()) - int(oldtime))
- if divtime == 0:
- rate = (float(TX[key]) + float(RX[key]))
- else:
- rate = (float(TX[key]) + float(RX[key]))/(divtime)
- if rate == 0:
- newnetcard[key] = '0' + ' ' + newnetcard[key]
- else:
- newnetcard[key] = '%.2f'%rate + ' ' + newnetcard[key]
- return zip(['order'], ['48']) + newnetcard.items();
- else:
- os.system('ifconfig > ifconfigtemp')
- file = open('./ifconfigtemp','r');
- fileold = open('./oldifconfig', 'w')
- temptimestr = str(int(time.time()));
- fileold.write(temptimestr)
- fileold.write('#')
- file.seek(0)
- fileold.write(file.read())
- fileold.close()
-
- netcard = {}
- file.seek(0)
- key = ''
- for strline in file.readlines():
- reobj = re.compile('^lo*.')
- if reobj.search(strline):
- break;
- reobj = re.compile('^eth*.')
- if reobj.search(strline):
- key = strline.split()[0]
- netcard[key] = ''
- netcard[key] = netcard[key] + strline
- RX = {}
- TX = {}
-
- key = ''
- newnetcard = {}
- file.seek(0)
- for strline in file.readlines():
- reobj = re.compile('^lo*.')
- if reobj.search(strline):
- break;
- if re.search("^eth", strline):
- templist = strline.split()
- key = templist[0]
- newnetcard[key] = templist[4] + ' '
- if re.search("^ *inet ", strline):
- templist = strline.split()
- newnetcard[key] = newnetcard[key] + templist[1][5:] + ' '
- for key,value in newnetcard.items():
- os.system('ethtool %s > ethtooltemp'%(key))
- file = open('./ethtooltemp','r');
- tempethtooltemplist = file.read().split('\n')
- file.close
- if re.search("yes", tempethtooltemplist[-1]):
- newnetcard[key] = newnetcard[key] + 'runing!'
- else:
- newnetcard[key] = newnetcard[key] + 'stop!'
- file.close()
- for key,value in netcard.items():
- tempsplit = value.split('\n')
- netcard[key] = ''
- for item in tempsplit:
- item = item + '<br>'
-
- netcard[key] = netcard[key] + item
- tempcount = 1
- for match in re.finditer("(bytes:)(.*?)( \()", item):
- if tempcount == 1:
- RX[key] = match.group(2)
- tempcount = tempcount + 1
- elif tempcount == 2:
- TX[key] = match.group(2)
- netcard[key] = netcard[key] + 'net io percent(bytes/s): 0 <br>'
- newnetcard[key] = newnetcard[key] + ' ' + '0 <br>'
- return zip(['order'], ['48']) + newnetcard.items();
- if __name__ == '__main__':
- print run()
使用例子:
每一個(gè)列表元素元組里面第二個(gè)元素第一個(gè)字段為網(wǎng)速 Bytes/S,例如eth1網(wǎng)卡的網(wǎng)速就是3.3KB/s,eth0網(wǎng)速是2.9KB/s,今天是周六這個(gè)流量很正常