共计 3550 个字符,预计需要花费 9 分钟才能阅读完成。
这次讲 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