SNMP 是Zabbix中最常用的监控类型之一,但对于新手而言,也是配置时最令人难以捉摸的工具之一。即便是经验丰富者也容易在配置时犯下简单错误,导致更多问题出现,如item或接口不稳定,误报等,甚至更糟。
目录
一 介绍
二 关于SNMP
1. SNMP版本
2. SNMP OID(对象标识符)
3. SNMP接口
4. SNMPv3 配置错误
三 总结
介绍
本文将讨论安装过程中,用SNMP成功监控设备时,需要记住和遵守的事项;讲解关于SNMP的关键概念,以及在设定第一个SNMP item时需牢记在心的最重要信息。
关于SNMP
SNMP即Simple Network Management Protocol,全称为简单网络管理协议。它通过查询工作,常用于监控网络设备,如交换机,路由器,部分防火墙,或任意存储库。
如果在Configuration (配置) > Hosts中点击Items部分,并打开Item参数,Type (类型)部分可以在SNMPv1,SNMPv2,SNMPv3 或SNMP trap这几项之间选择。
SNMP options
1. SNMP agent
SNMPv1,SNMPv2,和SNMPv3版本之间有功能上的区别。其主要不同之处在于:
- SNMPv1是最早的版本。因为没有加密,此版本并不安全。唯一用来确认监控Host和设备间通信的就是community。SNMP community在设备上配置,agent通过SNMP community获得指标。此外,SNMPv1限制在已过时的32位counter上使用。
- SNMPv2也未被加密并只使用community进行识别(community名称),但SNMPv2可以使用64位counter。
- SNMPv3允许加密网络设备与Zabbix server或proxy之间的通信,且使用用户名和密码进行准确识别。
SNMPv3更加安全,但维护方面也更为复杂。需要创建用户并设置大量参数,如Context name (上下文名称),Security name (安全名称), Security level (安全等级)等等;还需要在所有监控环境和设备中维护这项配置。
SNMPv3 attributes
2. SNMP OID (对象标识符)
SNMP中最令人失望的是Key (密钥)不代表任何事物,它只是一个占位符,无法找到任何从设备中收集网络流量的密钥。你需要使用SNMP OID (对象标识符),一串用于识别被监控设备及其状态的数字。
SNMP OID在MIB (Management Information Base管理信息库)中与特定对象连接,可以明确到每台设备。这些是跟指标相连接的独有的标识符。
OID
因此,需要在item上配置OID以便从SNMP item接收数据。问题是通常你并不知道OID。只知道需要监控某些设备,但不知道需监控指标的OID。这种情况下,最简单的选择是给需要的网络设备使用MIB文件,此文件包含所有可用指标和收集方法的信息。你能找到许多可以打开和可视化MIB文件的浏览器应用程序,但没有办法将MIB文件导入Zabbix。
注:Zabbix可以监控SNMP所做的检查,但无法直接连接到外部网络设备。Zabbix在机器上使用snmpd。因此,当Zabbix查询一个item时会询问SNMP,而snmpd与设备连接并请求数据。
新的MIB文件应被加入默认的MIB文件位置(至少在大部分Linux系统中如此),你可以在CLI (计算机指令)中打开:
代码语言:javascript复制cd /usr/share/snmp/mibs
如果对一个MIB文件做了部分更改,需要将更改部分加载入SNMP守护进程。具体操作方式可在官网文档中查看。比如,可以根据对象的OID使用snmptranslate命令获得一个MIB名称。
1. 为了添加一个新的MIB文件,需要编辑SNMP配置文件。如果不知道此文件的位置,可以使用net-snmp-config -snmpconfpath命令并添加mibs 和一个MIB名称。
代码语言:javascript复制mibs SOME-MIB
2. 也可以在MIB路径中添加你拥有的所有MIB文件:
代码语言:javascript复制/usr/share/snmp/mibs
这种情况下,你需要添加snmp.conf文件:
代码语言:javascript复制mibs ALL
尽管在目录中加入了所有内容,作出更改后,仍需要重启SNMP守护进程和Zabbix。
3. SNMP 接口
配置Host时,解决SNMP接口问题后才能加入任意SNMP监控item。为了开始监控SNMP,你需要在SNMP interface处单击Add。指定将被监控的设备的IP地址或DNS名称,以及SNMP接口的一个默认端口‘161’。
SNMP interface
Use bulk requests 使用批量请求是默认打开的。但是,如果看到item不断波动并改变状态,或者SNMP接口从绿色跳转为红色,从可用跳转为不可用状态,唯一能修复监控的解决方案可能是禁用批量请求。
注:监控时,Zabbix不会为了轮询每个指标或数据集而单独连接到个人网络设备。相反,Zabbix请求批量数据。如果启用批量请求,Zabbix进行第一次连接来获得一个单一指标,然后暂停。一切顺利的情况下,Zabbix会依次收集两个指标,三个指标,然后继续用下一个值乘以1.5,且最多执行128个连接。有些设备无法响应批量请求。这种情况下,部分请求不会在每个连接都被支持。
注:如果有配置缓存和proxy,记得重新加载。
4 .SNMPv3 配置错误
1. SNMPv3较为安全,但因为加密和身份验证的特性,运行也更慢。因此,为SNMPv3定义大量item参数时,注意不要出现拼写错误。否则,你的Host将不会支持一些item,或SNMP接口将在红绿色之间波动。
2. SNMPv3第二个最常见的错误与snmpEngineID相关。如果正在监控SNMPv3设备,那么设备配置的snmpEngineID必须是独一无二的。
注:在一个管理域内,snmpEngineID是SNMP引擎唯一的标识符。SNMP引擎和SNMP实体间存在一对一的关联,这也是此管理域中SNMP实体唯一和清晰的标识符。
engineID默认作为设备的MAC地址,应该具有唯一性,但网络管理员倾向于在他们的环境中改变这些内容。因此,如果必须用完全一样的engineID监控设备就会出现问题。最简单的问题修复方案是检查SNMP接口的批量请求,然后对设备做snmpEngineID处理。
以下有几种检索snmpEngineID的方式:
1. snmpEngineID也是一个对象 (object),具有对象标识符。可以从个人设备上用snmpget检索这个指标并将其与其他设备进行比较。
2. 你可以检查被监控设备的设置。
3. 最复杂的方式是收集tcpdump以检查线上通讯。使用SNMPv3必须指定凭据和身份证明,而后解密并检查snmpEngineIDs是否唯一。
总结
在为网络监控创建新item或模板又不清楚被监控对象的OID或MIB文件时,比起搜索他人做好的模板,建议尝试自己完成所有工作。如果需要以输入流量、输出流量或接口丢弃作为通用指标,可以使用默认SNMP模板作为通用指标的OID。因为在多个供应商之间,此模板通常是相同的。如果想在设备上监控非常具体的东西,那么试着直接搜索,如Cisco OID。在创建item并将其添加到会连接至数百或数千台Cisco (思科)设备的模板前,在CLI (计算机指令)中运行snmpget并在设备中查询需要的值。当能确保正确时,才添加新item和创建新模板。