俗话说的好,师傅带徒弟,徒弟码文档,是吧.? 肥肥兄,最近弄了不少东西。解决了几

个历史遗留问题,当然全靠这个肥肥师傅咯。

 进入正题,这次讲2 个小小知识点,一个关于监控交换机端口流量,一个关于store value。


一.监控交换机端口流量

 目前互联网上生产环境当中的交换机监控文档。故此做一个完整,中间在穿插讲其中一个重点知识。算是还zabbix 一个清白吧。!!!本次我拿生产环境Cisco 3750 交换机做演示!!!(只有3750,,没有其他产品)


配置步骤:

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


wKiom1MxMOaiZt3VAALv3dpKauM767.jpg

基于上面创建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