码迷,mamicode.com
首页 > 其他好文 > 详细

交换机监控

时间:2016-10-28 03:45:08      阅读:294      评论:0      收藏:0      [点我收藏+]

标签:语句   监控   gen   code   strip()   运营   tar   start   公司   

  交换机需要采集的指标项包括:电源、端口状态、端口映射(物理端口&逻辑端口)、温度、内存、cpu(最大cpu、平均cpu)、端口出入流量(需要计算峰值流量)、端口带宽使用率等,其中分品牌采集不同的指标,主要有四个品牌,brocade、blade、vdx、huawei,分别采集不同的指标,其中brocade全部指标都有采集到。采集维度是1分钟。本文主要介绍交换机监控系统后台逻辑。

  监控指标主要是带宽使用率、流量波动值(波动比)、cpu使用率、内存使用率、温度、端口状态(up->down)、端口衰减,同时需要统计各个ope(运营商)的流量峰值和流量总和。

  公司的交换机大概有120多台,登记于CMDB,信息包括ip、名称、带宽信息、负责人、固执编号、品牌型号、端口总数、价格、购买日期、质保年限、IDC机房、机架、体积U数、上架时间、状态、相应级别、备注。我们系统需要的信息主要是ip、名称(告警信息展示)、负责人(主要为基础运维组)、品牌型号、带宽信息(包含ope和对应的物理端口登记、带宽)。

  了解完交换机的大概之后就是程序了。程序的架构逻辑也很简单,使用snmp v2采集信息:首先配置好采集客户端的路由和snmp配置,然后从CMDB获取交换机信息,接着就是采集、上报、展示、解析告警了。配置路由主要由基础运维配置后提供,需要什么客户端直接报给他们,他们帮忙配好即可。以下是程序的架构:

技术分享

考虑到容灾和方便横向扩展,所以增加了一个ip调度中心,将CMDB的ip随机分配到各个采集agent中,采集agent分布在不同机房,一旦机房不可用则可以根据调度中心将ip分配到其他机房,而如果想横向扩展则可以增加agent,配置好snmp环境和路由,修改调度中心配置即可。

  后台程序主要分为三个部分:ip调度中心、采集客户端、解析告警。

  一、ip调度中心

  由于调度中心实现功能比较简单,只是根据客户端随机分配相同数量ip给采集器。所以我没有专门写一个c/s程序,只是简单写一个公用接口,挂在开放接口【运维监控系列文章会介绍】名下,由各个采集器去调用。

  调度中心配置包含所有的采集器ip,一旦有采集器调用,则会去CMDB获取交换机信息,然后平均分配给各个采集器,因为从CMDB获取的信息是固定顺序的,所以每次分配给各个采集器也是固定的ip列表,如果CMDB增加了ip,则一般会被分配到最后一个采集器上,不会漏掉。很容易看出,这其实不是随机算法。(其实是懒,要写到真正随机只能写一个c/s程序,由服务端产生随机数,一次随机分配到各个客户端。而不是由客户端去调用接口,每个客户端都需要调用一次,一旦同时调用,服务端就无法准确分配)。如果增加了采集器,则只需要在配置agentList里面添加多该采集器ip即可。代码如下(sql语句部分字段被我修改了):

 1 def getConf(db):
 2     retInfo = {}
 3     sql = ("select id, ip, model, width, name from "
 4            "switchConf where currentStatus=3 and ip > 0 "
 5            "order by id asc")
 6     code, count, errMsg = db.doSql(sql)
 7     if 0 != code:
 8         return retInfo
 9 
10     info = {}
11     ipList = []
12     res = db.getRet()
13     for each in res:
14         ip = int(each[1])
15         brand = each[2].strip()
16         bw = each[3]
17         name = each[4].strip()
18         if ip in info:  # 过滤重复的交换机ip
19             continue
20         ipList.append(ip)  # 顺序插入list
21         info[ip] = dict(brand=brand, bandWidth=bw, name=name)
22 
23     agentNums = len(agentList)
24     ipNums = len(ipList)
25     step = ipNums / agentNums
26     start = 0
27     for index in range(agentNums):
28         agent = agentList[index]
29         retInfo[agent] = {}
30         if index == agentNums - 1:  # 最后一个break
31             break
32         stop = start + step
33         for i in range(start, stop):  # 按顺序获取前面的ip列表
34             ip = ipList[i]
35             retInfo[agent][ip] = info[ip]
36         start += step
37     for i in range(start, ipNums):  # 获取剩下的所有ip
38         ip = ipList[i]
39         retInfo[agent][ip] = info[ip]
40 
41     return retInfo

  二、采集程序

  三、解析告警

  四、展示

原创文章,请勿转载。知识交流讨论请加qq:1130010617。谢谢合作。

交换机监控

标签:语句   监控   gen   code   strip()   运营   tar   start   公司   

原文地址:http://www.cnblogs.com/lxmhhy/p/6006252.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!