zabbix snmp
概述
如果我们需要监控打印机、路由器、UPS 等设备,肯定不能使用 zabbix agentd,因为他们不能安装软件的,还好他们一般都支持 SNMP 协议,这样我可以使用 SNMP 来监控他们.如果你希望使用 SNMP agent 来获取这些设备的信息,那么在安装 zabbix server 的时候你需要增加 snmp 的支持.
备注:SNMP 检查基于 UDP 协议
注意事项
如果监控基于 SNMPv3 协议的设备,确保 msgAuthoritativeEngineID(通常叫做 snmpEngineID 或“Engine ID”)是唯一的. 以前 SNMPv3 协议只支持 MD5 和 DES 加密,从 zabbix 2.2 开始支持 SHA 与 AES 加密协议.
配置 SNMP 监控
使用 SNMP 来监视设备,需要完成以下步骤
1. 创建主机
创建一个使用 SNMP 接口的主机(请参考 zabbix 创建主机),创建主机过程中你可以选择相应的模板,路由器、交换机这些设备的监控 itme,zabbix 已经默认自带了。
2. 找出你想监控的 SNMP 字符串(或者 OID )
如果你想获取 SNMP 所有字符串,你可以使用命令 snmpwalk 来实现,当然在安装 zabbix 的时候你需要安装启动过snmp服务。
# snmpwalk -v 2c -c public 127.0.0.1 > oid.txt
2c表示SNMP标准版本,snmp推出了v1,v2,v3版本,你也可以 写成1,表示使用1版本.上面的命令会获取到一个本机SNMP的列表输出到文本,包含键值,默认情况下我们 snmp 不加密,使用 public 作为共同体即可,这些列表中 有你需要的一些监控数据.但是线上环境我们不可能获取所有的键值,如果需要获取特定的数据,例如像获取交换机第三个端口的入口流量,需要使用 IF-MIB::ifInOctets.1 字符串,如下:
IF-MIB::ifInOctets.1 = Counter32: 3409739121
然后使用 snmpget 命令来获取 IF-MIB::ifInOctets.1 的 OID。命令如下
# snmpget -v 2c -c public -On 127.0.0.1 IF-MIB::ifInOctets.1
最后一个数字 1 表示端口 1,如果你想监控端口 23 那就写上 23.
会输出如下值:
.1.3.6.1.2.1.2.2.1.10.1 = Counter32: 3472126941
同理,OID 的最后一个数字 1 表示端口号,要特别注意的是 3COM 的端口号 1 是 101,3 是 103,但是 cisco 还是不变,1 号还是数字 1.
创建监控项 item
回到 zabbix 的主机列表中,在你需要配置的主机那行,点击监控,在右上角点击“create item”,和普通的监控项创建方法差不多,仅有几个地方不同,type 选择 SNMP v2 或者 v1,v3,一般选择 v2,snmp community 使用默认的 public,port 不填写默认为 161. SNMP OID 写上 OID,例如”.1.3.6.1.2.1.2.2.1.10.1″。然后其他内容和其他 item type 一样,然后保存即可。最后去看看是否获取到了数据。
简单实例
参数
值
Community
Public(或者你定义的)
OID
.1.3.6.1.2.1.2.2.1.10.1 (或者.1.2.3.45.6.7.8.0)
Key
例如 sysName 等,比 OID 好记
OID 可以写数字也可以使用字符串. 然而,一些项目中,字符串 OID 需要转为数字格式,我们可以使用命令
snmpget 来获取,如下命令:
# snmpget -v 2c -c public -On 127.0.0.1 sysName
.1.3.6.1.2.1.1.5 = No Such Instance currently exists at this OID #前面的数字即为sysName的OID