Zabbix使用snmp agent管理设备
适用范围:
1.一般用于管理网络设备及其他不支持或者不愿意安装zabbix anget的设备;
SNMP简介
1.snmp(simple network management protocol)简单网络管理协议
2.共有三个版本V1 V2c V3 其中V1完全明文传输 V2c部分明文传输 V3完全密文传输(共有三个安全等级noAuthnoPriv/authnoPriv/authPriv)
3.被管理设备上有MIB(树状结构),server通过使用OID从里面取数据,OID就是类似于IP地址的点与数字组合(从左到右-为MIB的根->叶);
Zabbix SNMP监控准备工作
Part1:被监控设备(这里用某台centos 7服务器)
1.安装snmp相关包(net-snmp-utils为客户端内的一些测试工具)
# yum install net-snmp net-snmp-utils -y
# net-snmp-create-v3-user -ro -a MD5 -A "zabbix@123" -x DES -X "zabbix@1234" zabbixsnmp //常见snmpv3用户
snmpv2及v1配置在/etc/snmp/snmpd.conf,41行可以修改(commuity)及可访问主机,其他具体配置参考链接:https://blog.51cto.com/yasar/1876306
# systemctl start snmpd
# systemctl status snmpd
# snmpwalk -v 3 -u zabbixsnmp -a MD5 -A "zabbix@123" -x DES -X "zabbix@1234" -l authPriv localhost //本地验证下snmp服务是否正常
Part2:Zabbix Server
1.安装的zabbix Server支持snmp,方法一:检查编译安装的日志或者确定有--with-net-snmp 方法二:查看zabbix Server启动日志,开头有相应的显示;
2.确认UDP 161 162端口的正常通信
安装下net-snmp-utils用于确认snmp通信是否正常
# yum install net-snmp-utils -y
# snmpwalk -v 3 -u zabbixsnmp -a MD5 -A "zabbix@123" -x DES -X "zabbix@1234" -l authPriv 192.168.0.1
Zabbix SNMP配置
Part1:新增snmp的host
Part2:配置Host的Temlates及Items
1.Template使用zabbix自带的Linux SNMPv2的模板(因Server缺少fping工具,fping监控项失效状态,回头加)
2.自建item了,Preprocessing(预处理)未配置,key名字任意取的 OID-在snmpwalk下加"-O fn"参数可获取,也可以用SNMPv2-MIB::sysName.0(不加-0 fn就显示这个)
Zabbix使用snmp Trap管理设备
Server接收trap的工作流程
1.snmptrapd 收到trap
2.snmptrapd将trap传递给SNMPTT或调用Perl trap接收器
3.SNMPTT或Perl trap接收器解析,格式化并将trap写入文件
4.Zabbix SNMP trap读取并解析trap文件
5.对于每个trap,Zabbix发现主机接口与接收的trap地址匹配的所有“SNMP trap”监控项。请注意,在匹配期间只使用主机接口中选定的“IP”或“DNS”。
6.对于每个找到的监控项,将trap与“snmptrap[regexp]”中的regexp进行比较。 trap设置为all匹配项的值。如果没有找到匹配的监控项,并且有一个“snmptrap.fallback”监控项,则将trap设置为该监控项的值。
7.如果trap未设置为任何监控项的值,Zabbix默认记录未匹配的trap。(通过管理 → 常规 → 其它中的“记录未匹配的SNMP trap(Log unmatched SNMP traps)”进行配置。)
Zabbix SNMP Trap监控准备工作
Part1:Zabbix Server
1.支持snmp监控,即--with-net-snmp;
2.启动SNMPTraper服务,并配置SNMPTrapperFile;
安装SNMPtrap服务,工具及perl # yum install -y net-snmp net-snmp-utils net-snmp-perl
# vim /etc/snmp/snmptrapd.conf
authCommunity log,execute,net public
perl do "/usr/bin/zabbix_trap_receiver.pl" //调用脚本,即trap信息处理
重启snmptrapd.server(需要在第三步完成后再重启)
# systemctl restart snmptrapd.service
# systemctl enable snmptrapd.service
# systemctl status snmptrapd.service
3.启动SNMPTT服务,或者使用zabbix官方给出的zabbix_trap_receiver.pl脚本(官方推荐使用)并配置;
从源码包复制pl脚本到/usr/bin # cp /usr/local/src/zabbix-4.0.13/misc/snmptrap/zabbix_trap_receiver.pl /usr/bin/ 对脚本添加可执行权限 chmod a+x /usr/bin/zabbix_trap_receiver.pl
4.配置zabbix server配置文件
确认perl脚本中处理过trap日志所在位置 # vim /usr/bin/zabbix_trap_receiver.pl $SNMPTrapperFile = \'/tmp/zabbix_traps.tmp\'; //日志位置 $DateTimeFormat = \'%H:%M:%S %Y/%m/%d\'; //perl定义的时间格式
编辑zabbixserver.conf文件
SNMPTrapperFile=/tmp/zabbix_traps.tmp //指定日志位置,同上日志位置
StartSNMPTrapper=1 //启动trap进程,默认不启动
重启zabbix_server服务
# systemctl restart zabbix-server
# systemctl status zabbix-server
5.针对UDP 161 及162端口放行;
Part2:被监控设备
1.配置snmp trap信息发送;
安装snmp工具包 # yum install net-snmp-utils 测试snmptrap是否可以发到server端且snmp处理成功工作ok; # snmptrap -v2c -c public 192.168.0.88 "traptest192.168.0.12(主机名)" \'.1.3.6.1.2.1.1.5.0\' SNMPv2-MIB::sysName.0 s "SNMP Trap Tested os"
2.查看zabbix server上信息是否收到
# cat /tmp/zabbix_traps.tmp 23:48:24 2019/10/27 ZBXTRAP 192.168.0.12 PDU INFO: notificationtype TRAP version 1 receivedfrom UDP: [192.168.0.12]:47093->[192.168.0.88]:162 errorstatus 0 messageid 0 community public transactionid 2 errorindex 0 requestid 235205289 VARBINDS: SNMPv2-MIB::snmpTrapOID.0 type=6 value=OID: SNMPv2-MIB::sysName.0 SNMPv2-MIB::sysName.0 type=4 value=STRING: "SNMP Trap Tested os"
3.针对UDP 161 及162端口放行;
Zabbix SNMP Trap配置工作
Part1:配置Item且Key为snmptrap[<regex>]
Part2:配置该item的preprocessing(预处理)
预处理的问题
Part3:成果验收(多行未预处理前测试,单行为预处理后数据)
Part4:配置Item且Key为snmptrap.fallback
Part5:验证snmptrap.fallback(未匹配snmptrap[<regex>]的数据均在fallback里面)
实践过程中的一些坑:
SNMP监控设备的网速时:
将ifInOctets和ifOutOctets替换为ifHCInOctets和ifHCOutOctets,详细参考这里
原因:ifInOctets和ifOutOctets的计数器是:Counter32即2**32-1bit,总计数到4Gbit就满了,所以只够1G带宽跑4s的;
ifHCInOctets和ifHCOutOctets的计数器是:Counter64即2**64-1bit,这个时间没算过,但是肯定够用的;
SNMP-Trap的元素处理:
有些MIB的OID是仅可以通过snmp-trap来获取的,比如华为设备的IPlink的OID(enterprises.2011.6.122.45.1.1.X.0)使用snmpwalk无法获取,仅可通过snmptrap获取
snmp-agent snmp-agent community read cipher %^%#FF@c8U6q"+<k]}Fs1G+&CD:TQmH]T\'2sbJ-r32^DVmL)Sp+3qK\J[f!gQ$m>r=[]IeCf*@b(zq(56<"V%^%# snmp-agent sys-info version v2c v3 snmp-agent target-host trap address udp-domain 10.5.90.12 source GigabitEthernet1/0/5 params securityname cipher %^%#Tl4h!:>sV:iq@MF4Q%yFj~ehR%\'acUB)3FMG>#0@%^%# v2c snmp-agent trap source LoopBack0 # iplink相关在NHRP中,开启这个trap既可以收到iplink变化的trap snmp-agent trap enable feature-name NHRP
SNMP收到的trap信息,有时候需要预处理才能得到想要的值,详细可参考这里