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