OpenNMS技术分析与扩展开发
1. 技术分析
OpenNMS用Java语言实现,基于linux系统和Postgres数据库的网络管理系统。系统配置信息通过XML数据存储,网络数据通过JDBC对数据进行持久化,Web采用JSP/Servlet。OpenNMS是一个Open Source Framework,它采用了诸多的开源组件与框架,使用了各种协议的开源实现:
l OpenNMS采用了xml数据绑定技术(opennms采用的是castor)。根据xml文件的schema定义文件(xsd文件)生成对xml文件到java对象的映射,这样就不需要写解析xml文件的代码而是针对java对象进行操作。因此这些类都是在系统编译过程中由castor包根据xsd文件生成的。(Castor是一个Java开源数据绑定框架,它主要目标是提供Java对象与XML 的绑定,Java到SQL的持久化等.)
l Cleanimports是对java文件中的无用的imports作清理,并通过配置文件提供的格式对imports代码段进行格式整理。
l HttpUnit进行模拟HTTP测试。
l jWebUnit 是基于java的测试网络程序的框架。它提供了一套测试见证和程序导航标准。jWebUnit 有JUnit和HtppUnit实现。
l Junit单元测试
l nekohtml解析HTML,Html Tidy对html 字符串进行修正,并做标准化的处理。
l Avalon主要是一种Server的架构,可以满足配置、日志等服务器程序的需要,
l Jdhcp,java DHCP的实现。
l Xerces解析XML,API与实现有:xmlParserAPIs, xml-apis, xercesImpl
l FOP可以将xml文件转换成pdf,mif,pcl,txt等多种格式以及直接输出到打印机,并且支持使用SVG描述图形。
l jCIFS,用Java开发的SMB客户端库。
l ldap-impl,LDAP java实现。
l smtp.jar pop3.jar,SMTP,POP3协议Java实现。
l JRobin基于LGPL授权的网络性能监控系统,是RRDTool的一个纯Java实现。
l joeSNMP,Java SNMP类库。
所以,要想扩展(Extending)开发OpenNMS需掌握如下技术(Technologies):
Java 2,XML/XSL,Servlets,JSPs,RDBMS,JMS,Castor,JoesSNMP,RRDTool
2. 系统架构
图1. OpenNMS系统架构图
l OpenNMS架构主要包括如下功能:Discovery,CAPSD,Eventd,Actiond,Notifd,Scheduler,Service Monitor(pollers),RTC,Outage Manager,Data Collection,Reporting(Performance Reports,Availability Reports),Web UI
l 流程说明:
1. 总控/调度Classloader
2. 发现轮询
l 能力检查Capability daemon - capability check on nodes
l 动态主机配置协议DHCP daemon - DHCP client for OpenNMS
l 发现Discovery daemon - initial and ongoing discovery互联网控制消息协议(Internet Control Message Protocol或简写ICMP)
3. 配置采集
数据采集Collection daemon - collects datajmxMbean:Collectd extendsServiceDaemon
采集流程:
⑴ Initializing collection daemon 初始化日志加载调度
⑵ Loading collectors"
a) instantiateCollectors
b) createScheduler
c) createEventProcessor
⑶ start
scheduleExistingInterfaces()
⑷ pause
⑸ resume
⑹ stop
4. 性能采集
5. 事件
l 通知Notification daemon - external notification of users
l 实时控制RTC manager daemon - real time availability information
l 陷阱SNMP trap daemon – handles SNMP traps
l 阈值Threshold daemon – monitor for threshold values
6. 服务
l 轮询Poller daemon - polls managed nodes/services
7. 运行情况Outage manager daemon - consolidates events
3. 扩展开发
3.1. 开发环境
l 采用版本:
OpenNMS-1.2.9-1
l 开发环境与工具:
Redhat Enterprise Linux 5.0,JDK1.5,Tomcat-4.1.37,Eclipse(WTP), Ant1.6.5,JDBC2.0,JSP1.2,Servlet2.3,JSTL,HTML,XML/XSL,rrdtool 1.0及相关的开源组件与框架。
3.2. 配置说明
OpenNMS可通过XML配置文件来扩展网络配置与定制服务。
1. 自身管理
l service-configuration.xml
定义OpenNMS本身要启动的服务. 它和VM有关,并且控制哪个服务在哪个VM中开启.
l jmx-datacollection-config.xml
2. 发现配置
l discovery-configuration.xml (daemon)
定义要发掘的网络地址范围,(ping sweep)以及逾时,重试次数,以及用来做发掘的执行绪(thread)数目。这个档案也提供 初次发掘间隔时间(initial-sleep-time)和重新发掘间隔时间(restart-sleep-time)。这些数值以毫秒(miliseconds)为单位,用来决定 OpenNMS 执行后,间隔多久要开始针对网络地址清单作发掘;以及每次发掘之间的间隔时间。
<discovery-configuration threads="1" packets-per-second="1"
initial-sleep-time="300000" restart-sleep-time="86400000"
retries="3" timeout="800">
<include-range retries="2" timeout="3000">
<begin>192.168.0.1</begin>
<end>192.168.0.254</end>
</include-range>
<include-url>file:/usr/local/OpenNMS/source/dist/etc/include</include-url>
</discovery-configuration>
3. 配置性能采集
l snmp-config.xml
定义snmp采集的节点、版本、read-community、超时、重试次数等
<snmp-config retry="3" timeout="800" read-community="public" write-community="private">
<definition version="v2c">
<specific>192.168.0.5</specific>
</definition>
<definition retry="4" timeout="2000">
<range begin="192.168.1.1" end="192.168.1.254"/>
<range begin="192.168.3.1" end="192.168.3.254"/>
</definition>
<definition read-community="bubba" write-community="zeke">
<range begin="192.168.2.1" end="192.168.2.254"/>
</definition>
<definition port="1161">
<specific>192.168.5.50</specific>
</definition>
</snmp-config>
l collectd-configuration.xml
透过collectd进程进行数据收集。collectd侦听SNMP服务的NodeGainedService事件,在些它会检查是否存在节点集合中初始的SNMP接口。
<collectd-configuration hreads="5">
<package name="example1">
<filter>IPADDR IPLIKE *.*.*.*</filter>
<specific>0.0.0.0</specific>
<include-range begin="192.168.0.1" end="192.168.0.254"/>
<include-url>file:/opt/OpenNMS/etc/include</include-url>
<service name="SNMP" interval="300000" user-defined="false" status="on">
<parameter key="collection" value="default"/>
<parameter key="port" value="161"/>
<parameter key="retry" value="3"/>
<parameter key="timeout" value="3000"/>
</service>
<outage-calendar>zzz from poll-outages.xml zzz</outage-calendar>
</package>
<collector service="SNMP"
class-name="org.OpenNMS.netmgt.collectd.SnmpCollector"/>
</collectd-configuration>
l datacollection-config.xml (daemon)
包含给RRDTool的数据收集信息.
l poller-configuration.xml (daemon)
用来定义轮询组合(packages)以及设定各种服务的轮询器(pollers)。一个轮询组合内含数种项目,例如网络地址范围,服务,排修时段(outage calendars),和故障时段模式(down time models).
4. 性能阈值
l thresholds.xml
5. RTC
l rtc-configuration.xml
定义RTC (Real Time Console)的属性,例如用来计算故障时段百分比的周期(rolling window),web UI刷新周期,以及多久 RTC将更新送至web接口。
6. 事件告警
l eventconf.xml
定义通用事件识别码(Universal Event Identifiers或UEIs)以及它们的事件屏蔽(masks),描述,记录文件讯息,和严重程度。
l trapd-configuration.xml (daemon)
定义SNMP trap的埠口(port)。
l eventd-configuration.xml (daemon)
定义eventd的运作参数,例如逾时值以及监听器执行绪(listener threads)的数量。
l actiond-configuration.xml (daemon)
在事件(events)产生时所呼叫的外部程序称为(actions). 这个设定档控制最多可以同时 执行的action数量, 以及等待action执行完毕回传结果的逾时值。
l notifications.xml
定义哪个事件或UEI发出告警, 以及发出告警的途径.
<notification name="nodeAdded">
<uei><![CDATA[http://uei.OpenNMS.org/products/bluebird/nodes/nodeAdded]]></uei>
<rule><![CDATA[IPADDR IPLIKE *.*.*.*]]></rule>
<destinationPath>Email-Network/Systems</destinationPath>
<text-message>OpenNMS has discovered a new node named %parm[nodelabel]%.
Please be advised.</text-message>
<subject>%parm[nodelabel]% discovered.</subject>
</notification>
l destinationPaths.xml
用来定义告警的目标路径(destination path), 例如告警应该送给谁, 传送方式用传呼, 电邮, 或者电邮-传呼.
l notificationCommands.xml
定义如何达成在destinationPaths.xml中所使用的各种联络方式. 这包括了可执行文件的所在位置, 各种联络方式的别名(aliases), 以及特定传送方式尚需的其它信息.
<command type="email">
<name>/bin/mail</name>
<lookup>email</lookup>
<lookup>mail</lookup>
<comment>for sending email notifications</comment>
<argument streamed="false">
<substitution>-s</substitution>
<switch>-subject</switch>
</argument>
<argument streamed="false">
<switch>-email</switch>
</argument>
<argument streamed="true">
<switch>-tm</switch>
</argument>
</command>
7. 服务管理
l capsd-configuration.xml (daemon)
对于已经发现的节点(包含由discovery daemon或SNMP所发现的),能够侦测出哪些服务. 它还可定义,若发掘了某些网络地址/网络地址区段,则应该受控或排除在外. 对于没有定义到的其它网络地址,它可用一个预设的状态(管理政策)来规范.
<capsd-configuration rescan-frequency="86400000"
management-policy="unmanaged">
可以设定"rescan-frequency"(重新扫描网络的频率).这个设定决定了时间间隔多久需重新扫描网络上的设备, 并且重新确认其上有哪些服务. 单位是毫秒,默认值是86400000,也就是24小时.
l outage-configuration.xml
定义(服务)中断管理(outage manager)可以有多少个写入执行绪(writer threads)。
相关推荐
OpenNMS是第一个开发在开源模式下的企业级网络管理平台应用。OpenNMS的目标是成为一个真真的分布式、可升级的网络管理平台,尽管它看似一个FCAPS网络管理模型,使之可用于开放源码和商业领域。目前:OpenNMS专注与...
五、报告与分析 1. **历史数据**:OpenNMS存储长时间范围内的监控数据,可用于趋势分析和容量规划。 2. **自定义报告**:你可以创建定制化的报告,包含网络状态、性能指标、故障历史等信息。 3. **报表导出**:...
OpenNMS 启动过程分析 OpenNMS 作为一个功能强大的网络管理系统,其启动过程中涉及到多个服务的启动、线程的启动和配置文件的解析。下面将对 OpenNMS 的启动过程进行详细分析。 一、OpenNMS 系统架构 OpenNMS 的...
在IT行业中,网络管理是至关重要的环节,而OpenNMS作为一款开源的网络管理系统,以其强大的功能和灵活的可扩展性,深受广大网络管理员的喜爱。"opennms-source.tar.gz_SNMP_openNMS"这个压缩包,便是OpenNMS源码的...
1. **Java和Spring框架**:OpenNMS主要使用Java语言开发,利用Spring框架来实现依赖注入和模块化设计,确保系统可扩展性和灵活性。 2. **JMS(Java消息服务)**:OpenNMS使用JMS来处理事件和通知,实现异步通信,...
openNMS开源网管,OpenNMS是一个企业级基于Java/XML的分布式网络和系统监控管理平台-OpenNMS Open Source Network Management, OpenNMS is an enterprise-class based on the Java/XML distributed network and ...
OpenNMS Introduction,OpenNMS architecture,OpenNMS SNMP Data Collection,Data Collection Configuration example
OpenNMS安装、配置详解 OpenNMS是一个流行的开源网络管理平台,提供了强大的网络监控和管理功能。本文将详细介绍如何在Ubuntu系统上安装和配置OpenNMS。 一、安装OpenNMS 1. 首先,需要编辑Ubuntu的sources.list...
3. **安装PostgreSQL数据库**:为了与OpenNMS一起使用,需要下载与OpenNMS兼容的PostgreSQL版本(根据文档描述,应该选择9.x版本,而不是10.x版本)。下载后,需要给安装包添加执行权限,并运行安装程序。安装过程中...
该项目旨在通过引入一个稳定的接口来对其进行编写,从而使其更容易为OpenNMS编写插件和扩展。 然后,OpenNMS和Meridian的版本将实现API的至少一个主要版本。 特征 API的用户当前可以利用以下功能和界面。 有关完整...
OpenNMS数据库,OpenNMS数据库中各个字段的关系矢量图
此外,手册还提供了许多有用的信息链接,指向与openNMS相关的技术标准、书籍、社区和官方网站,为用户深入学习和解决问题提供了丰富的资源。 总的来说,《openNMS操作手册》是一份全面且实用的文档,对于管理和维护...
"Opennms从源码编译安装指南" Opennms是一款功能强大的网络管理系统,能够提供网络设备的监控、配置和故障排除等功能。从源码编译安装Opennms可以提供更高的自定义化和灵活性,满足个性化的需求。本文将详细介绍...
windows下opennms jicmp.dll
rrd是一个高效的数据存储技术,适合于时间序列数据的存储。在配置文件中,可以定义多个`<rra>`元素来设置不同的数据归档策略。例如,`RRA:AVERAGE:0.5:1:2016`表示五分钟数据,采样率为0.5,一天的数据被归档为一...
OpenNMS是由许多个人及组织,在OpenNMS软件专案这支大旗下,所共同打造的网络管理系统。从最初到2002年,程序代码是由Oculan Corporation开发并以GPL释出,后来后案的管理移交给 Tarus Balog。
6. **插件体系**:openNMS的可扩展性体现在其插件机制上,开发者可以根据需要编写插件来实现特定功能,源代码中会包含插件开发的相关指南和示例。 7. **自动化和脚本**:openNMS支持自动化任务和脚本执行,例如通过...
需要注意的是,由于内容中有OCR技术识别的误差,实际操作时应核对参数的准确性,并且在配置文件中正确填写,以确保邮件发送功能能够正常工作。例如,在原始描述中出现的`org.opennms.core.utils.authenticateUser`...