转载于:http://njulinq.blog.51cto.com/1257169/291192
在上一篇文章
中,介绍了OpenNMS在收到受管设备发出的SNMP Trap之后,如何将收到的SNMP Trap与eventconf.xml文件中定义的事件(event)进行匹配,从而触发该事件的发生。主要是引入了<mask>标签元素。在此基础上,OpenNMS还提供了根据SNMP Trap带上来的varbinds对SNMP Trap进一步过滤。
我们还是以ciscoC3800SysAggregateStatusChange事件为例,当Cisco
C3800的Aggregate状态发生变化时,便会发出SNMP Trap,并触发该事件。然而该事件的严重度如何?该状态变化是“好”(比如由不可操作变为可操作)还是“坏”(由可操作变为不可操作)?其实这个信息在发上来的SNMP Trap中就已经包含了,其对应的就是parm中的第三个参数,即trap的严重度等级。
OpenNMS从1.1版本开始,就加入了根据varbinds对SNMP trap进行过滤的功能。这也是通过在<mask>中实现的,我们可以重写OpenNMS全接触-事件及通知(八)中提到的event中的mask元素:
- <mask>
- <maskelement>
- <mename>id</mename>
- <mevalue>.1.3.6.1.4.1.9.9.70.2</mevalue>
- </maskelement>
- <maskelement>
- <mename>generic</mename>
- <mevalue>6</mevalue>
- </maskelement>
- <maskelement>
- <mename>specific</mename>
- <mevalue>17</mevalue>
- </maskelement>
- <varbind>
- <vbnumber>3</vbnumber>
- <vbvalue>3</vbvalue>
- </varbind>
- </mask>
在原来的基础上加入了<varbind>元素,加入该元素后,那么该匹配条件就更严格,在原来的基础上,即OID为.1.3.6.1.4.1.9.9.70.2,且generic为6,而specific为17,又加入了对第三个参数即trap
serverity只
关注等级为3的snmp trap,当然这里的等级3是由设备在发送snmp trap时确定的。比如这里的3代表着Cisco给定的等级“主要的”。
当然,我们还可以通过多个varbinds对snmp trap进行过滤。例如:
- <varbind>
- <vbnumber>3</vbnumber>
- <vbvalue>2</vbvalue>
- <vbvalue>3</vbvalue>
- </varbind>
- <varbind>
- <vbnumber>4</vbnumber>
- <vbvalue>2</vbvalue>
- <vbvalue>3</vbvalue>
- </varbind>
该过滤条件将匹配出第3个参数为2或者3,第4个参数为2或者3的snmp trap。
从OpenNMS1.6版本开始,还加入了通过正则表达式对varbinds的值进行过滤,只要在表达式之前加~
- <varbind>
- <vbnumber>1</vbnumber>
- <vbvalue>~[Dd]own</vbvalue>
- </varbind>
该过滤条件将过滤出第1个参数取值为“Down”或者“down"。
另外还可以通过通配符%进行快速前缀匹配,如:
- <varbind>
- <vbnumber>1</vbnumber>
- <vbvalue>Error:%</vbvalue>
- </varbind>
这将会匹配出所有第一个参数以Error:开头的所有值。
很多MIB库对某些OID的值进行了编码,即分配了一些特定值,例如snmp agent对ifAdminStatus及ifOperStatus就进行了编码处理:1代表Up,2代表Down。
而因为OpenNMS没有自带的Mib Browser,所以OpenNMS是将这种映射关系定义在event的事件描述中的。只要event配置正确,也可以在event的logmsg中将snmp trap中带的数值转换为更有意义的字符描述信息。
让我们以CiscoHSRP 的状态变化为例,(该trap对应的OID .1.3.6.1.4.1.9.9.106.2
generic 6 and specific 1),对应的事件为uei.opennms.org/vendor/Cisco/traps/cHsrpStateChange。
该trap中包含有一个varbind,其名称为cHsrpGrpStandbyState,其取值范围为从1到6,含义如下:
initial(1) learn(2) listen(3) speak(4) standby(5) active(6).
该事件的原始定义如下:
- <event>
- <mask>
- <maskelement>
- <mename>id</mename>
- <mevalue>.1.3.6.1.4.1.9.9.106.2</mevalue>
- </maskelement>
- <maskelement>
- <mename>generic</mename>
- <mevalue>6</mevalue>
- </maskelement>
- <maskelement>
- <mename>specific</mename>
- <mevalue>1</mevalue>
- </maskelement>
- </mask>
- <uei>uei.opennms.org/vendor/Cisco/traps/cHsrpStateChange</uei>
- <event-label>CISCO-HSRP-MIBdefinedtrapevent:cHsrpStateChange</event-label>
- <descr><p>AcHsrpStateChangenotificationissentwhena
- cHsrpGrpStandbyStatetransitionstoeitheractiveor
- standbystate,orleavesactiveorstandbystate.There
- willbeonlyonenotificationissuedwhenthestatechange
- isfromstandbytoactiveandviceversa.</p><table>
- <tr><td><b>
- cHsrpGrpStandbyState</b></td><td>%parm[#1]%
- </td><td><p;>
- initial(1)learn(2)listen(3)speak(4)standby(5)active(6)</p>
- </td;></tr></table>
- </descr>
- <logmsgdest='logndisplay'><p>CiscoEvent:HSRPStateChange.</p></logmsg>
- <severity>Minor</severity>
- </event>
现在我们要求在事件的logmsg中看到状态变化的值,即要求包含有cHsrpGrpStandbyState的当前值。而直接将其取值如2,显示在logmsg中是没有多大意义的,除非用户自己知道
这个数字的含义。那么现在我们就可以通过varbind解码的方法将这个值映射为其字符串描述即learn。
- <event>
- <mask>
- <maskelement>
- <mename>id</mename>
- <mevalue>.1.3.6.1.4.1.9.9.106.2</mevalue>
- </maskelement>
- <maskelement>
- <mename>generic</mename>
- <mevalue>6</mevalue>
- </maskelement>
- <maskelement>
- <mename>specific</mename>
- <mevalue>1</mevalue>
- </maskelement>
- </mask>
- <uei>uei.opennms.org/vendor/Cisco/traps/cHsrpStateChange</uei>
- <event-label>CISCO-HSRP-MIBdefinedtrapevent:cHsrpStateChange</event-label>
- <descr><p>AcHsrpStateChangenotificationissentwhena
- cHsrpGrpStandbyStatetransitionstoeitheractiveor
- standbystate,orleavesactiveorstandbystate.There
- willbeonlyonenotificationissuedwhenthestatechange
- isfromstandbytoactiveandviceversa.</p><table>
- <tr><td><b>
- cHsrpGrpStandbyState</b></td><td>%parm[#1]%
- </td><td><p;>
- initial(1)learn(2)listen(3)speak(4)standby(5)active(6)</p>
- </td;></tr></table>
- </descr>
- <logmsgdest='logndisplay'><p>CiscoEvent:HSRPStateChangeto%parm[#1]%.</p></logmsg>
- <severity>Minor</severity>
- <varbindsdecode>
- <parmid>parm[#1]</parmid>
- <decodevarbindvalue="1"varbinddecodedstring="initial"/>
- <decodevarbindvalue="2"varbinddecodedstring="learn"/>
- <decodevarbindvalue="3"varbinddecodedstring="listen"/>
- <decodevarbindvalue="4"varbinddecodedstring="speak"/>
- <decodevarbindvalue="5"varbinddecodedstring="standby"/>
- <decodevarbindvalue="6"varbinddecodedstring="active"/>
- </varbindsdecode>
- </event>
那么在该定义中,第一个参数varbind将通过<varbindsdecode>定义的映射关系将其取值替换为字符描述。例如,如果该snmp trap的第一个参数其值为6的话,则在logmsg中将显示:
<p>CiscoEvent:HSRPStateChangetoactive</p>
在后续文章中将介绍如何根据MIB库中定义的trap转换为eventconf.xml文件中的事件。
分享到:
相关推荐
7. **事件处理和通知**:OpenNMS的核心功能之一是事件处理,包括触发警报、执行自动化操作和发送通知。这些功能基于复杂的规则引擎实现。 8. **服务监测**:通过Ping、SMTP、HTTP等协议检查网络服务的可用性,确保...
openNMS1.6.5源码,最新稳定的版本。OpenNMS是第一个开发在开源模式下的企业级网络管理平台应用。OpenNMS的目标是成为一个真真的分布式、可升级的网络管理平台,尽管它看似一个FCAPS网络管理模型,使之可用于开放...
1. **核心框架**:这部分代码构建了openNMS的基础,包括事件处理、通知服务、数据采集等核心模块。这些模块通过模块化设计,实现了对网络监控的全面覆盖。 2. **SNMP支持**:由于SNMP(简单网络管理协议)在企业级...
"opennms-source.tar.gz_SNMP_openNMS"这个压缩包,便是OpenNMS源码的载体,它包含了使用SNMP(简单网络管理协议)进行网络监控和管理所需的所有组件。 SNMP,全称Simple Network Management Protocol,是一种广泛...
2. **事件处理**:系统记录所有监控事件,并通过邮件、短信或集成其他通知方式将报警信息传递给管理员。 3. **故障恢复确认**:当故障解决后,OpenNMS会进行恢复确认,避免发出不必要的重复报警。 五、报告与分析 ...
OpenNMS-Helm是基于OpenNMS监控系统的Grafana插件,它能够扩展Grafana的功能,以适应更复杂的网络监控需求。OpenNMS-Helm的安装和配置涉及到多个步骤,包括系统的前置安装条件、安装OpenNMS-Helm、启动服务、启用...
standalone-opennms-1.6.8.jar
OpenNMS-阈值-事件-生成器一种基于当前阈值设置生成良好阈值事件定义(和通知)的工具。 要编译该工具,请使用 Maven: mvn install这将生成一个带有依赖项的 JAR,以便能够轻松执行该工具,例如: java -jar ...
opennms 中文 http://www.qoswork.com OpenNMS 官方文档 https://qoswork.github.io/odoc/
OpenNMS Javascript API 用于访问OpenNMS网络监视平台的客户端API。 在代码中使用OpenNMS.js API 中提供了有关入门以及如何使用API的。 完整的API列表可在。 使用OpenNMS.js命令行 安装 运行npm install -g ...
) 使脚本可执行将通知命令添加到 $OPENNMS_HOME/etc/notificationCommands.xml 调用脚本。 (脚本头中有一个例子) 重启 OpenNMS 并登录导航到 Admin->Configure Notifications->Destination Paths 选择并升级,...
通过opennms-ksc-grafana,用户可以充分利用Grafana的可视化优势,对OpenNMS KSC的监控数据进行深度分析和展示,这对于网络运维团队来说,无疑是一种提升效率、优化工作流程的有效手段。无论是日常监控、问题排查,...
为了使用 OpenNMS Modules Manager,你需要先将其克隆或下载到本地,例如,你可以找到名为 "opennms-modules-manager-master" 的压缩包文件,解压后通过 Java 运行环境执行相应的脚本或命令。在执行前,确保你的系统...
本文将深入介绍如何在OpenNMS中配置邮件通知,让管理员能够通过邮件接收来自OpenNMS的事件通知。 首先,我们需要了解邮件服务器的配置。在OpenNMS中,邮件服务器的配置主要通过修改配置文件来实现。默认情况下,...
OpenNMS-IP-发现-供应-适配器可选的Provisioning Adapter,用于将IP接口的自动发现管理为非托管动机找到想要发现并持久存储数据库中所有IP接口,但仅主动监视受监控的服务的OpenNMS用户和操作员是很常见的,这些服务...
opennms-事件使用 Kibana 分析 opennms 事件安装(来自源码) 这是一条骆驼路线,因此它需要 Java、Maven 3、Elasticsearch 和可以访问 opennms 存储其数据的 postgres 数据库的数据库用户。 克隆这个存储库,然后 ...
厨师食谱,用于管理OpenNMS Horizon的安装和配置。 当前版本支持CentOS 6和7的发行版16、17、18、19、20、21、22、23、24、25、26。 版本号 从OpenNMS Horizon 16开始,该食谱版本的MSB与其支持的OpenNMS ...
OpenNMS-KSC至Grafana 将 KSC报表转换为仪表板。 已针对Grafana 4.x,5.x和6.x进行了测试; 尽管该工具仅在Grafana 5.x或更高版本上在标准输出上提供有关生成的仪表板的信息。 由于Grafana的工作方式不同,它不会...
OpenNMS集成API 该项目旨在通过引入一个稳定的接口来对其进行编写,从而使其更容易为OpenNMS编写插件和扩展。 然后,OpenNMS和Meridian的版本将实现API的至少一个主要版本。 特征 API的用户当前可以利用以下功能和...