python监控网卡流量并使用graphite绘图的示例
代码如下:
#!/usr/bin/env python import sys,time from socket import socket def read_interface(in_file): with file(in_file) as f: return f.readlines()[2:] def set_interface(inter_msg): dic={} for i in xrange(len(inter_msg)): dic[inter_msg[i].split(":")[0].strip()]={"in":inter_msg[i].split(":")[1].strip().split()[0],"out":inter_msg[i].split(":")[1].strip().split()[8]} return dic CARBON_SERVER = '127.0.0.1' CARBON_PORT = 2003 delay = 3 sock = socket() try: sock.connect( (CARBON_SERVER,CARBON_PORT) ) except: print "Couldn't connect to %(server)s on port %(port)d, is carbon-agent.py running?" % { 'server':CARBON_SERVER, 'port':CARBON_PORT } sys.exit(1) while True: now = int( time.time() ) lines=[] int1=read_interface("/proc/net/dev") inter_dic1=set_interface(int1) time.sleep(1) int2=read_interface("/proc/net/dev") inter_dic2=set_interface(int2) print int(inter_dic2[inter_dic2.keys()[1]]["in"]),int(inter_dic1[inter_dic1.keys()[1]]["in"]) for i in xrange(len(inter_dic1.keys())): lines.append("interface.%s_in %s %d" % (inter_dic1.keys()[i],int(inter_dic2[inter_dic2.keys()[i]]["in"])-int(inter_dic1[inter_dic1.keys()[i]]["in"]),now)) lines.append("interface.%s_out %s %d" % (inter_dic1.keys()[i],int(inter_dic2[inter_dic2.keys()[i]]["out"])-int(inter_dic1[inter_dic1.keys()[i]]["out"]),now)) message = '\n'.join(lines) + '\n' print "sending message\n" print '-' * 80 print message sock.sendall(message) time.sleep(delay)