×

Zabbix监控设备SNMP Trap消息

hqy hqy 发表于2020-12-24 11:03:37 浏览3022 评论0

抢沙发发表评论

Zabbix监控设备SNMP Trap消息


mp-协议" style="color: rgb(186, 57, 37);margin: 1.4em 0px 1.1em;border-bottom: 1px solid rgb(238, 238, 238);overflow: hidden;font-size: 1.28571em">一.SNMP 协议

1.协议介绍

snmp 协议是日常使用的较多的一种协议,绝大多数网络设备/存储等都支持 snmp 协议,通过此协议可以实现设备状态的监控及管理。

2.主要组成

SNMP 协议包括以下三个部分1

SNMP Agent:负责处理 snmp 请求,主要包括 get,set 等操作。可通过此接口查询设备的运行状态(使用较多),或者变更配置(使用较少),默认使用 UDP 161 端口

SNMP Trap: snmp 通知消息,主动发送消息到管理端。如设备故障,端口 down 等都会实时发送消息到接收端。默认使用 UDP 162 端口

SNMP MIB:MIB 代表管理信息库,是按层次结构组织的信息的集合,定义了设备内被管理对象的属性。

3.基本操作

经常使用的终端命令有以下几个:
snmpwalk:遍历整个 snmp mib 树,通常用来检测 snmp 是否配置成功,一般完整 walk 到一个 MIB,在 MIB 末尾,都会输出“End Of Mib”的字样。否则可能为 Response timeout 等错误,以此来判断 snmp agent 是否配置成功。
snmpget:获取某个 oid 的具体数值,通常用来检测 oid 是否正确。
遇到很多使用 snmpwalk 来获取 oid 数据的,这是错误的用法,这样是不能测试 oid 的正确性。只有通过 snmpget+oid 能获取的数据的 oid,才能配置成独立的监控项,作为监控指标采集数据。
使用 zabbix 监控 snmp 设备状态,一般按照以下步骤进行操作:

  1. 通过 snmpwalk 确定 snmp agent 配置是否正确

  2. 通过 snmpget 获取具体的某个 oid 的数据,记录 oid

  3. 在 zabbix 上建立对应的 item,interface 选择设备 snmp 接口,Key 可随意,SNMP OID 输入 oid,SNMP community 输入 snmp community Type of information 选择对应类型即可。

二.SNMPTrap 监控

1.SNMPTT 介绍

SNMPTT (SNMP Trap Translator) 是一个 perl 语言编写的用来处理 snmptrap 消息的程序,可与 Net-SNMP / UCD-SNMP snmptrapd 程序(www.net-snmp.org)一起使用,基本流程如下2snmptt 负责处理 net-snmp 接收到的 trap 消息,通过 snmptt 命令或 snmptthandler 进行处理,解析消息之后可将消息写入文件或数据库。

2.安装 SNMPTT

操作系统为 centos 7.7 1908 x64,使用 yum 方式安装 snmptt,snmptt 不在默认的官方源,属于 epel 源,因此需要首先安装 epel 源。 添加 epel 源

yum install epel-release -y

安装 snmptt 及相关组件

yum install snmptt perl-Sys-Syslog perl-DBD-MySQL -y

即可完成安装。

3.转换 MIB 文件

snmp trap 消息如果不翻译,原始内容可能是这样的

{   "Version": 2,   "TrapType": 0,   "OID": null,   "Other": null,   "Community": "public",   "Username": "",   "Address": "172.16.1.64:49692",   "VarBinds": {     ".1.3.6.1.2.1.1.3.0": 7908527690000000,     ".1.3.6.1.2.1.2.2.1.1.18": 18,     ".1.3.6.1.2.1.2.2.1.2.18": "Vlanif103",     ".1.3.6.1.2.1.2.2.1.7.18": 2,     ".1.3.6.1.2.1.2.2.1.8.18": 2,     ".1.3.6.1.6.3.1.1.4.1.0": [1, 3, 6, 1, 6, 3, 1, 1, 5, 3]   },   "VarBindOIDs": [     ".1.3.6.1.2.1.1.3.0",     ".1.3.6.1.6.3.1.1.4.1.0",     ".1.3.6.1.2.1.2.2.1.1.18",     ".1.3.6.1.2.1.2.2.1.7.18",     ".1.3.6.1.2.1.2.2.1.8.18",     ".1.3.6.1.2.1.2.2.1.2.18"   ] }

如果需要知道上述 oid 的具体内容及数值意义就需要对照 MIB 文件对消息进行“翻译”。snmptt 需要加载对应配置文件,对 trap 消息进行翻译。 snmptt 提供了 snmpttconvertmib 工具,snmpttconvertmib 是一个 Perl 脚本,它将读取 MIB 文件并将 TRAP-TYPE(v1)或 NOTIFICATIONATION-TYPE(v2)定义转换为 SNMPTT 可读的配置文件,从而实现对 trap 消息的翻译,基本命令如下:

/usr/bin/snmpttconvertmib --in=/usr/share/snmp/mibs/CPQHOST.mib --out=/etc/snmp/snmptt.conf.compaq --net_snmp_perl
  • /usr/share/snmp/mibs/ 为 centos7 默认的 mibs 文件路径,上传设备 mib 文件到此目录。

  • /etc/snmp/snmptt.cong.compaq 转换完输出的配置文件

由于一般情况设备 mib 可能有多个,建议转换为一个配置文件中,便于管理,可使用以下命令进行批量转换。

for i in HUAWEI* do /usr/bin/snmpttconvertmib --in=$i --out=/etc/snmp/snmptt.conf.huawei --net_snmp_perl done

以 HUAWEI 开头的 mib 文件都转换为 snmptt.conf.huawei,基本都是一些私有的 MIB。snmptt 自带的 snmptt.conf 配置文件里已经包括了一些常用的配置如端口 up/down。实际过程中,只转换需要关注的 MIB 文件即可。 这里以配置华为 USG 6320 登录 trap 告警为例,从华为官网下载 MIB 文件,并上传到系统/usr/share/snmp/mibs 目录下,从 MIB 说明文件得知,用户登录 MIB 文件属于 HUAWEI-SECURITY-LOGIN-MIB.mib 文件,对 mib 文件进行转换

/usr/bin/snmpttconvertmib --in=/usr/share/snmp/mibs/HUAWEI-SECURITY-LOGIN-MIB.mib --out=/etc/snmp/snmptt.conf.HUAWEI-SECURITY-LOGIN --net_snmp_perl

输入如下4.配置 snmptt

snmptt 配置文件有 2 个

  • /etc/snmp/snmptt.ini snmptt 主要配置文件

  • /etc/snmp/snmptt.conf 系统默认的策略文件,包括一些基本的端口 up/down 的配置 修改默认的 snmptt.ini 配置文件,主要修改一下几个地方

mode = standalone multiple_event = 0 net_snmp_perl_enable = 1 translate_log_trap_oid = 1 date_time_format = %Y/%m/%d %H:%M:%S syslog_enable = 0

在这里需要加载刚才转换完成的 snmptt.conf.HUAWEI-SECURITY-LOGIN 配置文件 在 snmptt.ini 文件末尾如下添加 snmptt.conf.HUAWEI-SECURITY-LOGIN

[TrapFiles] # A list of snmptt.conf files (this is NOT the snmptrapd.conf file).  The COMPLETE path # and filename.  Ex: '/etc/snmp/snmptt.conf' snmptt_conf_files = <<END /etc/snmp/snmptt.conf /etc/snmp/snmptt.conf.HUAWEI-SECURITY-LOGIN END

snmptt 有二种模式,分别为

  • standalone 每次收到 trap 消息时读取 snmptt.ini 配置文件调用 snmptthandler 来处理 trap 消息

  • daemon 顾名思义守护进程方式,启动 snmptrap 时,初始化时一次性读取 snmptt.ini 二种方式各有区别,选择使用即可,具体区别可查看官方说明snmptt mode

由于这里测试使用,经常修改 snmptt.ini 配置文件,如果使用 daemon 模式,那么每次修改 snmptt.ini 配置文件就需要重启 snmptt,因此这里我使用 standalone 模式。

5.配置 snmptrap

snmp trap 消息为主动通知,因此需要配置服务器来接收设备发送过来的 snmp trap 消息。net snmp 接收 trap 消息后,通过 traphandle 调用 snmptt 来对 trap 消息进行处理。 安装 net snmp,建议安装 net-snmp 的所有关联包

yum install net-snmp* -y

即可完成 snmp 安装。 修改/etc/sysconfig/snmptrapd 为以下内容

OPTIONS="-m +ALL -On"

修改/etc/snmp/snmptrapd.conf 配置文件,添加如下

authCommunity execute public traphandle default /usr/sbin/snmptt

authCommunity 可以配置多个 启动 snmptrap 服务

systemctl start snmptrapd systemctl enable snmptrapd

在 usg 6320 上配置 trap 消息,并指向 snmp trap server,配置 Community 为 public4配置之后,通过 web 登录 USG 和退出 USG,都会收到 trap 消息。snmptt 日志文件为/var/log/snmptt/snmptt.log 即可看到6表示配置处理 trap 成功,原始内容都为变量内容,不太友好, 可以通过调整 snmptt.conf.HUAWEI-SECURITY-LOGIN,配置 trap 消息输出格式。 snmptt.conf.HUAWEI-SECURITY-LOGIN 配置文件内容大致如下

... EVENT hwSecLOGINSucced .1.3.6.1.4.1.2011.6.122.62.2.1 "Status Events" Normal FORMAT ZBXTRAP $aA $* SDESC The user login succeeded. Variables:   1: hwSecLOGINUser      Syntax="OCTETSTR"      Descr="The user name."   2: hwSecLOGINIP      Syntax="OCTETSTR"      Descr="The User IP address."   3: hwSecLOGINTime      Syntax="OCTETSTR"      Descr="The User login time."   4: hwSecLOGINType      Syntax="OCTETSTR"      Descr="The User access type."   5: hwSecLOGINLevel      Syntax="INTEGER32"      Descr="The User login level." EDESC ......

其中 FROMAT 就是需要修改定义的,其中包括很多变量,具体可在SNMPTT.CONF-FORMAT 常用的几个如下:

  • $aA snmp trap 的代理 IP,即源 IP

  • $* 所有变量

  • $n n 为数字,表示变量次序 Variables 为 trap 变量,基本可以看懂

  • hwSecLOGINUser 登录用户名

  • hwSecLOGINIP 登录 IP

  • hwSecLOGINTime 登录时间

  • hwSecLOGINType 登录类型

  • hwSecLOGINLevel 登录级别 按照变量,可以对 trap 消息进行定制化,还支持中文!将 FORMAT 一行修改为

FORMAT ZBXTRAP $aA User login succeed!userName = $1, loginIP = $2, loginTime = $3, accessType = $4, userLevel = $5

修改后,登录 USG,查看 snmptt.log 日志,日志已经被格式成需要的格式,已经可以看懂了!

2019/09/27 15:08:49 hwSecLOGINSucced Normal "Status Events" 172.16.1.64 - ZBXTRAP 172.16.1.64 User login succeed!userName = admin, loginIP = 10.128.23.19, loginTime = 2019/09/27 16:54:08, accessType = web, userLevel = 15

至此完成了 snmp trap 消息的接收及翻译工作。

三.配置 Zabbix

1.zabbix 安装注意事项

zabbix 可以配置读取接收到的 trap 文件,从而实现对对 trap 消息的告警,如过 zabbix 是编译安装,系统需要安装 net-snmp-devel 包,编译时需要添加以下参数

–with-net-snmp

2.修改 zabbix server 配置文件

修改 zabbix server 配置文件

SNMPTrapperFile=/var/log/snmptt/snmptt.log StartSNMPTrapper=1

制定 trap 文件为 snmptt 日志文件,并开启 strap 处理的 poller,修改之后重启 zabbix server。

3.配置 snmptrap item

添加一个主机11SNMP interfaces 添加机器 Ip,添加之后创建 item12

  • Type 为 SNMP trap

  • snmptrap 为 zabbix 内置的 key,用来获取 trap 文件内容

  • Type of information 选择 log

  • Log time format 和 snmptt 配置一致,配置为 yyyy/MM/dd hh:mm:ss 直接配置 Key 为 snmptrap,表示获取 snmptt 日志里的所有消息。配置之后登录设备,退出设备,可在 Last data 看到数据已经采集。(此截图为为进行翻译之前截取,翻译之后可显示中文,英文)13

4.配置 Trigger

目前已经采集了 trap 日志,需要配置对应的 trigger 对 trap 消息进行告警。以 usg 设备登录错误为例,登录错误时间类型为:hwSecLOGINFailed,因此配置如下 trigger14配置之后,用错误的用户登录 USG,发现已经告警了。15由于 zabbix 配置了微信告警,微信上可以看到如下消息:125 分钟后故障自动恢复,至此配置完成。

5.一般用法

以上只是简单测试,生产环境中应该注意以下事项

  • 分析需要告警的 trap event 类型 如:hwSecLOGINFailed/warmStart/linkDown/coldStart/authenticationFailure 根据类型,配置对应的 triger 即可

  • 可直接配置对应的 key 来采集对应的指标,只要收到消息就告警。如下图配置只采集 hwSecLOGINSucced 的指标。23配置对应的 trigger,进行告警25

  • 如只配置了采集对应的 item,而没有配置 snmptrapkey,建议配置一个 snmptrap.fallback 的 item,配有匹配的 item 消息,都会保存到此 item 里

  • 更多配置及用法参考 zabbix 官网配置zabbix trap

四.注意事项

1.MIB 文件

一定要确保 MIb 文件的准确性,设备版本与 MIB 文件版本必须一致,包括大小版本。如不一致会看到解析文件出现以类似错误

1
2019/09/27 08:34:23 .1.3.6.1.4.1.2011.6.122.62.2.2 Normal "Status Events" 172.16.1.64 - the user 123 login with web on 10.128.23.19 in 2019/09/27 08:34:22 by time on 2019/09/27 08:34:22 ,status is Wrong Type (should be OCTET STRING): 0

说明 mib 文件里定义的 trap 变量类型和实际收到的 trap 消息变量类型不一致,解析错误。

2.zabbix 配置

建议对同一类型设备配置统一的 snmp trap 模版,相同型号直接关联模版即可使用。

3.snmptt 日志

随之 snmp trap 消息的增多,snmptt 会逐渐变大,建议配置 logrotate 对日志进行切分,使用 yum 安装的 snmptt 已经自动配置了,使用编译安装的,可以参考 /etc/logrotate.d/snmptt

/var/log/snmptt/snmptt*.log /var/log/snmptt/snm ptthandler.debug {     weekly     notifempty     missingok } /var/log/snmptt/snmptt.debug {     weekly     notifempty     missingok     postrotate         /etc/init.d/snmptt reload >/dev/null 2>/dev/null || true     endscript }

snmptt 可开启 debug 日志,建议在测试阶段开启 debug 日志,以便进行排错。

以上为 snmp trap 告警的全面解读,下期预告:《基于 Web 方式的 snmp trap 管理》敬请关注!

参考文档
1.http://snmptt.sourceforge.net/docs/snmptt.shtml
2.https://www.miraclelinux.com/product-service/zabbix/tech-lounge/zbx-tl-001


打赏

本文链接:https://www.kinber.cn/post/1570.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客