这次讲2 个小小知识点,一个关于监控交换机端口流量,一个关于store value。
一.监控交换机端口流量
目前互联网上生产环境当中的交换机监控文档。故此做一个完整,中间在穿插讲其中一个重点知识。算是还zabbix 一个清白吧。!!!本次我拿生产环境Cisco 3750 交换机做演示!!!(只有3750,,没有其他产品)
ZABBIX 的详细介绍:请点这里 ZABBIX 的下载地址:请点这里
相关阅读:
安装部署分布式监控系统Zabbix 2.06 http://www.linuxidc.com/Linux/2013-07/86942.htm
《安装部署分布式监控系统Zabbix 2.06》 http://www.linuxidc.com/Linux/2013-07/86942.htm
CentOS 6.3下Zabbix安装部署 http://www.linuxidc.com/Linux/2013-05/83786.htm
Zabbix分布式监控系统实践 http://www.linuxidc.com/Linux/2013-06/85758.htm
CentOS 6.3下Zabbix监控apache server-status http://www.linuxidc.com/Linux/2013-05/84740.htm
CentOS 6.3下Zabbix监控MySQL数据库参数 http://www.linuxidc.com/Linux/2013-05/84800.htm
配置步骤:
1.配置交换机SNMP
#configure terminal
(config)#snmp-server community test ro 建立一个用户为test,权限为只读
(config)#snmp-server traps enable 允许将所有SNMP Trap 信息发送
(config)#snmp-server host 10.0.0.1 version 2c test 10.0.0.1 接受交换机所发送过来
的SNMPTrap 信息
(config)#snmp-server trap-source loopback0 使用loopback0 接口的IP 地址作为SNMP
Traps发送源地址
2.创建自定义模板
首先是需要获取Cisco 3750 SNMP 对应OID,OID 这个我就放在文档最下面了。
这里我就讲端口进出流量监控,举1 个端口例子,其他照搬即可。
打个比方我现在想监控G1/0/5 端口进出流量,该这么做呢。?
先要获取根据对应OID 直接获取数据,同时去判断获得数据单位。
G1/0/5 端口进流量
snmpwalk -v 2c -c test 10.0.0.254 1.3.6.1.2.1.2.2.1.10.10105
IF-MIB::ifInOctets.10105 = Counter32: 1663553768
G1/0/5 端口出流量
snmpwalk -v 2c -c test 10.0.0.254 1.3.6.1.2.1.2.2.1.16.10105
IF-MIB::ifOutOctets.10105 = Counter32: 2288654478
这里开始讲第一个问题,之前群里有人提出zabbix 监控交换机端口流量不行。不建议使用zabbix 监控交换机流量。而是采用cacti,其实cacti 也有问题,只是你没碰见而已!!!原因在于cacti 监控的数据比zabbix 监控的数据大。两边不一致。回到正题
其实监控交换机端口流量,注意2 个细节就好。
1.抽取出来数据单位,是bit 还是bytes。
这关心到创建items 配置问题。咿,上面的数据没有单位,你让我咋找呢。? 我这里单位默认是bytes。这样就涉及到单位换算问题了。
在cacti 一般采用单位是bit/sec(bps),如果在zabbix 里设置单位也是bps。而不经过计算。那么毫无意外zabbix 数据比cacti 相差8倍 。
为什么这样呢。? 因为单位不对等!!!Bytes 和bit 完全不对等。如果想要对等,在bytes
基础上乘以8,这样就对了。为什么乘以8 呢。?因为bytes = 8bit怎么让zabbix 取出来的数据而乘以8 呢。? 在创建items 里有个选项是Use custom multiplier。你在这里面添上8 即可。等下回贴个items 图。方便大家更明白。
2.store value 问题
上面做好,还需要修改store value,就是Delta(speed per second),这个值对应cacti 里的counter,这样问题就解决了。
具体算法是:(当前取值- 上一次取值)/ (当前时间- 上一次时间)
上面得到的结果然后存储在数据库中,然后WEB 端展现。。
这里顺便讲下我之前遇到的问题。某天老大对我提出一个要求,nginx 请求图做的更好点,而不是显示上次是1W 请求,这次取值是2W 请求。而是显示当前与上次值之差,也就是变化部分。当时,不知道怎么搞呀。愁啊。造成的影响就是zabbix 细节方面没cacti 好啊。其实不然,是俺没学到家!!! 泥煤,自从有了store value,和烦恼说北北啊!!
回到主题,刚那个小故事,就是我们可以利用store value 里的Delta(speed per second),实现两次取值之间变化部分。达到cacti 那种效果。关于store value 大家还是详细看下官方解释:https://www.zabbix.com/documentation/2.0/manual/config/items/item 扯了这么多。来实际的吧。直接创建items
基于上面创建items 设置,基本上流量不会出现问题了。其他端口照葫芦画瓢就好了。
好吧,我还漏了一个问题。细心看文档的,有没有发现SNMP 取出来的值是否有问题呢。?
在回顾下
IF-MIB::ifOutOctets.10105 = Counter32: 2288654478
这里所说的问题呢?不是值不对,而是Counter32 的问题。为什么它是问题呢。?
Counter32 是交换机的一个计数器,这个计数器是32 位。是一个从0 开始不断累加,那么它最大为多少呢。? 2^32 次方=4294967296 当计数器达到4294967296 就会重新从0 开始
累加。这里就出现了一个问题。计数器溢出!!
计数器溢出实际就是当zabbix 取值时,当前值如果比上一次值小的话,那么就是计数器溢出了,当出现这个问题Zabbix 根据speed per second 就会忽略这个值,然后再取一个值。然后在利用speed per second 计算方式计算,存储在数据库在展现。
最前面讲过cacti也有问题,归根究底其实是交换机的32位计数器搞的鬼,32 位计数器最大能表示流量为4G,如果计数器在采集时间之内溢出一次,上一次采集值与当前采集值之差超过4G,而且当流量达到109.225Mbps 流量就会有问题。4G/300*8=109.225Mbps 300=5*60 同时cacti和zabbix认为在溢出之后,上一次与当前采集差值是正常的,并不会认为是差值是溢出导致。
解决方法:
1.把取值间隔调快点,比如1 分钟取一次。这样就不会存在问题。
2.使用64 位计数器。大家可以查下交换机手册,是否支持64 位计数器,新一代交换机全支持64 位计数器。如果当前生产环境不支持64 位计数器,那么就使用第一种方法咯。加快取值间隔时间。。
针对上面这个问题呢,肥肥兄实际碰到过这个问题。- -
好了,到这里文档码完了。希望对大家有帮助。Thank you !!!!!
噢,对了,还差OID 列表
获取端口列表及描述
snmpwalk -v 2c -c test IP 1.3.6.1.2.1.2.2.1.2
获取端口UP/DOWN 情况
snmpwalk -v 2c -c test IP 1.3.6.1.2.1.2.2.1.8
获取端口入流量(byte)
snmpwalk -v 2c -c test IP 1.3.6.1.2.1.2.2.1.10
获取端口出流量(byte)
snmpwalk -v 2c -c test IP 1.3.6.1.2.1.2.2.1.16
获取过去5 秒内的cpu load(百分比)
snmpwalk -v 2c -c test IP 1.3.6.1.4.1.9.2.1.56.0
获取过去10 秒内的cpu load(百分比)
snmpwalk -v 2c -c test IP 1.3.6.1.4.1.9.2.1.57.0
获取过去15 秒内的cpu load(百分比)
snmpwalk -v 2c -c test IP 1.3.6.1.4.1.9.2.1.58.0
获取内存使用情况
snmpwalk -v 2c -c test IP 1.3.6.1.4.1.9.9.48.1.1.1.5
获取内存空闲情况
snmpwalk -v 2c -c test IP 1.3.6.1.4.1.9.9.48.1.1.1.6