Zabbix-数据发现-snmp&snmptrap

时间:2024-02-23 14:59:39

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信息,有时候需要预处理才能得到想要的值,详细可参考这里