程序笔记   发布时间:2022-07-19  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了自定义粒度,snmp流量监控,业务突发可视化大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_607_0@现在主流监控软件和云平台提供的流量监控,监控粒度最小只能设置为1分钟,无法准确定位故障,特别是瞬时突发较大的业务

@H_607_0@对比python的snmp库还是更喜欢用subprocess调用snmpwalk命令,脚本如下,前端可以使用脚本采集到的数据进行绘图

@H_772_6@ 1 #! /usr/bin/env python
@H_772_6@ 2 #-*-coding:utf-8-*-
@H_772_6@ 3 import time,subprocess,re,signal,os,sys
@H_772_6@ 4 class traffic:  
@H_772_6@ 5     def __init__(self,ip,port,community,interval):
@H_772_6@ 6         cmd_index = 'snmpwalk -v 2c -c %s %s  ifDescr | grep -w %s'%(community,ip,port) 
@H_772_6@ 7         porTindex = subprocess.Popen(cmd_index,sHell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE).communicate()[0]
@H_772_6@ 8         ret = re.findall('ifDescr.d+',porTindex.decode('utf8'))[0]
@H_772_6@ 9         portMIB = int(re.findall('d+',ret)[0])
@H_772_6@10         self.cmd_in='snmpwalk -v 2c -c %s %s ifHCInOctets.%s'%(community,ip,portMIB) 
@H_772_6@11         self.cmd_out='snmpwalk -v 2c -c %s %s ifHCOutOctets.%s'%(community,ip,portMIB) 
@H_772_6@12         self.interval = interval
@H_772_6@13     def form(self,data):
@H_772_6@14         ret = re.findall('Counter64:.*',data.decode('utf8'))[0]
@H_772_6@15         ret = ret.split(':')[1].Strip()
@H_772_6@16         ret = round(int(ret)*8/1024/1024,2)
@H_772_6@17         return ret
@H_772_6@18     def snmp(self):
@H_772_6@19         traffic_in =  subprocess.Popen(self.cmd_in,sHell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE).communicate()[0]
@H_772_6@20         traffic_out = subprocess.Popen(self.cmd_out,sHell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE).communicate()[0]
@H_772_6@21         traffic_in = self.form(traffic_in)
@H_772_6@22         traffic_out = self.form(traffic_out)
@H_772_6@23         return(traffic_in,traffic_out)
@H_772_6@24     def gettraffic(self):
@H_772_6@25         befo_in,befo_out = self.snmp()
@H_772_6@26         time.sleep(self.interval)
@H_772_6@27         after_in,after_out = self.snmp()
@H_772_6@28         return ({'in':round((after_in-befo_in)/self.interval,2),'out':round((after_out-befo_out)/self.interval,2)})
@H_772_6@29 def signal_handler(*args, **kwargs):
@H_772_6@30     try:
@H_772_6@31         if count!=0:
@H_772_6@32             print('----------------------------end-----------------------------')
@H_772_6@33             print('               min          max          avg')
@H_772_6@34             print('incoming    %sM        %sM        %sM'%(traffic_in_min,traffic_in_max,round(traffic_in_sum/count,2)))
@H_772_6@35             print('outgoing    %sM        %sM        %sM'%(traffic_out_min,traffic_out_max,round(traffic_out_sum/count,2)))
@H_772_6@36     except:
@H_772_6@37         os._exit(0)
@H_772_6@38     os._exit(0)
@H_772_6@39 if __name__  == "__main__":
@H_772_6@40     signal.signal(signal.SIGINT, signal_handler)
@H_772_6@41     traffic_in_max = 0
@H_772_6@42     traffic_out_max = 0
@H_772_6@43     traffic_in_min = 999999999999
@H_772_6@44     traffic_out_min = 999999999999
@H_772_6@45     traffic_in_sum = 0
@H_772_6@46     traffic_out_sum = 0
@H_772_6@47     count = 0
@H_772_6@48     try:
@H_772_6@49         host = sys.argv[1]
@H_772_6@50         port = sys.argv[2]
@H_772_6@51         community = sys.argv[3]
@H_772_6@52         interval = int(sys.argv[4])
@H_772_6@53         mx =traffic(host,port,community,interval)
@H_772_6@54         print('-------------%s %s秒粒度流量监控------------------'%(host,interval))
@H_772_6@55         while True:
@H_772_6@56             ret = mx.gettraffic()
@H_772_6@57             traffic_in = ret['in']
@H_772_6@58             traffic_out = ret['out']
@H_772_6@59             traffic_in_max = max(traffic_in,traffic_in_maX)
@H_772_6@60             traffic_out_max = max(traffic_out,traffic_out_maX)
@H_772_6@61             traffic_in_min = min(traffic_in,traffic_in_min)
@H_772_6@62             traffic_out_min = min(traffic_out,traffic_out_min)
@H_772_6@63             traffic_in_sum += traffic_in
@H_772_6@64             traffic_out_sum += traffic_out
@H_772_6@65             count+=1
@H_772_6@66             print('traffic_in: %s Mbps'%traffic_in,'traffic_out: %s Mbps'%traffic_out)
@H_772_6@67     except:
@H_772_6@68         print('usage:')
@H_772_6@69         print('    <host> <port> <community> <interval>')
@H_772_6@70         print('options:')
@H_772_6@71         print('    host: <dest_ip>')
@H_772_6@72         print('    portMIB <dest port>')
@H_772_6@73         print('    community: <community>')
@H_772_6@74         print('    interval: <get data interval>')
@H_772_6@75         print('examples:')
@H_772_6@76         print('    ./traffic.py 10.0.0.1 ge-0/0/46 public 5')
@H_607_0@效果如下

@H_772_6@ 1 $ ./traffic.py
@H_772_6@ 2 usage:
@H_772_6@ 3     <host> <port> <community> <interval>
@H_772_6@ 4 options:
@H_772_6@ 5     host: <dest_ip>
@H_772_6@ 6     port <dest port>
@H_772_6@ 7     community: <community>
@H_772_6@ 8     interval: <get data interval>
@H_772_6@ 9 examples:
@H_772_6@10     ./traffic.py 10.0.0.1 ge-0/0/46 public 5
@H_772_6@11 
@H_772_6@12 
@H_772_6@13 $ ./traffic.py 10.0.0.1 ge-0/0/46 public 5
@H_772_6@14 -------------10.0.0.1 5秒粒度流量监控------------------
@H_772_6@15 traffic_in: 7.65 Mbps traffic_out: 42.16 Mbps
@H_772_6@16 traffic_in: 14.98 Mbps traffic_out: 51.32 Mbps
@H_772_6@17 traffic_in: 13.96 Mbps traffic_out: 51.99 Mbps
@H_772_6@18 traffic_in: 8.18 Mbps traffic_out: 44.42 Mbps
@H_772_6@19 traffic_in: 8.99 Mbps traffic_out: 53.03 Mbps
@H_772_6@20 traffic_in: 17.66 Mbps traffic_out: 49.03 Mbps
@H_772_6@21 traffic_in: 47.14 Mbps traffic_out: 49.27 Mbps
@H_772_6@22 traffic_in: 71.05 Mbps traffic_out: 50.45 Mbps
@H_772_6@23 traffic_in: 72.73 Mbps traffic_out: 48.16 Mbps
@H_772_6@24 ^C----------------------------end-----------------------------
@H_772_6@25                min          max          avg
@H_772_6@26 incoming    7.65M        72.73M        29.15M
@H_772_6@27 outgoing    42.16M        53.03M        48.87M
@H_607_0@ 

大佬总结

以上是大佬教程为你收集整理的自定义粒度,snmp流量监控,业务突发可视化全部内容,希望文章能够帮你解决自定义粒度,snmp流量监控,业务突发可视化所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。