OpenNMS安装与配置笔记 博客分类: OpenNMS OpenNMSSNMP监控配置
程序员文章站
2024-03-13 13:41:27
...
OpenNMS安装与配置笔记
一.从GIT获取源码,建立eclipse工程
1.mkdir ~/rcs; cd ~/rcs
2. git clone git://opennms.git.sourceforge.net/gitroot/opennms/opennmss
3. git branch -a (查看所有的分支)
4. git checkout -b 1.8 remotes/origin/1.8 (创建本地分支)
5. git reset --hard HEAD
6. git clean -f -d -x (5-6创建分支后的清理工作)
7. git pull (更新)
8.compile.pl (编译)此过程须要修改*目录下POM中maven-get-plugin版本(2.3.0-1-SNAPSHOT),此插件的官方包有bug,目前没有解决,在opennms上一个开发人员自己提供了一个修改过的版本(http://www.stroppykitten.com/gwt-maven-plugin-2.3.0-1-SNAPSHOT.tar.gz)将此版本放到maven的本地库中在编译即可。
9.eclipse Import 编译完后导入eclipse,即可做二次开发
二. 从源码安装OpenNMS
安装前确保JAVA环境使用的是sun-jdk 版本1.5以上
Ubuntu11.10环境下安装:
1.安装jicmp
下载地址: http://sourceforge.net/projects/opennms/files/JICMP/
版本:stable-1.2
cd jicmp
autoreconf -fvi
./configure
make
sudo make install
2.从源码安装OpenNMS
(1).在OpenNMS源码目录下,通过./compile.pl编译源码。
(2).完成编译后运行./assemble.pl -Dbuild.profile=dir 将OpenNMS安装到/target目录下
3.安装PostgreSql
(1).sudo apt-get install postgresql 安装postgresql
(2).sudo vim /etc/postgresql/9.1/main/pg_hba.conf 修改数据库密码验证方式.修改为
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 md5
4.运行OpenNMS
(1).进入OpenNMS安装目录,修改目录中权限BUG
cd <opennms.home>
chmod +x bin/*
chmod +x contrib/*
chmod -x contrib/*.README
chmod -x contrib/opennms.mib
(2).运行 ./bin/runjava -s 设置JVM
(3).运行 ./bin/install -dis 设置数据库
(4).运行 ./bin/opennms start 运行opennms
访问http://localhost:8980/opennms即可
CentOS6.2中源码安装:
安装步骤与Ubuntu中安装相同,过程中可能遇到以下几个问题:
1.安装JICMP时make、autoconfig、libtool未安装
解决方法:分别在下列网址中下载安装:
http://www.gnu.org/software/automake
http://www.gnu.org/software/autoconf
http://www.gnu.org/software/libtool
2.PostgreSQL数据库安装与启动方式不同
yum install postgresql postgresql-server 安装数据库
/sbin/service postgresql initdb 初始化数据库
/sbin/service postgresql start 启动数据库服务
/sbin/chkconfig postgresql on 设置数据库服务开机自动启动
3.运行./bin install -dis 初始化数据库设置时报错an error occurred getting the version from the database,language "plpgsql" does not exist
解决方法:参考:http://www.opennms.org/wiki/QuickStart#Initialize_OpenNMS_and_the_Database
执行下列语句 : createlang -U postgres plpgsql opennms
4.启动OpenNMS时,报错:DHCP服务冲突
解决方法: 参考:http://www.opennms.org/wiki/FAQ-Troubleshooting#Q:_Why_doesn.27t_the_dhcpd_process_ever_start.3F
修改$OPENNMS_HOME/etc/service-configuration.xml 文件中的配置,将以下内容注释掉。
<service>
<name>OpenNMS:Name=Dhcpd</name>
<class-name>org.opennms.netmgt.dhcpd.jmx.Dhcpd</class-name>
<invoke pass="1" method="start"/>
<invoke at="status" pass="0" method="status"/>
<invoke at="stop" pass="0" method="stop"/>
</service>
重启OpenNMS即可。 注意:修改配置后,OpenNMS无法监控DHCP服务
CentOS6.2 YUM安装
1.rpm -Uvh http://yum.opennms.org/repofiles/opennms-repo-stable-rhel6.noarch.rpm
2.yum -y install opennms
3./opt/opennms/bin/runjava -s
4.yum install postgresql postgresql-server
5./sbin/service postgresql start
6.vi /var/lib/pgsql/data/pg_hba.conf
7./sbin/service postgresql restart
8./opt/opennms/bin/install -dis
CentOS6.2 RPM安装centos
安装脚本:install_opennms.sh
需要的RPM包:
#!/bin/bash -
rpm -vih postgresql-libs-8.4.9-1.el6_1.1.x86_64.rpm
rpm -vih postgresql-8.4.9-1.el6_1.1.x86_64.rpm
rpm -vih postgresql-server-8.4.9-1.el6_1.1.x86_64.rpm
service postgresql initdb
/etc/init.d/postgresql start
file="/var/lib/pgsql/data/pg_hba.conf"
mv ${file} ${file}.bak
sed 's/ident/trust/g' ${file}.bak>>${file}
/etc/init.d/postgresql restart
rpm -vih jdk-6u24-linux-amd64.rpm
rpm -vih jicmp-1.2.1-1rhel6.x86_64.rpm
rpm -vih jicmp6-1.0.1-1rhel6.x86_64.rpm
rpm -vih opennms-core-1.10.0-2.noarch.rpm
rpm -vih opennms-webapp-jetty-1.10.0-2.noarch.rpm
rpm -vih opennms-1.10.0-2.noarch.rpm
/opt/opennms/bin/runjava -s
/opt/opennms/bin/install -dis
/opt/opennms/bin/opennms start
如果在安装过程中遇到如下错误:
错误:代理抛出异常: java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: centos62virtualProduct: centos62virtualProduct
修改/etc/hosts文件,在其中加入本机的hostname即可解决,如:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 “YOUR HOST NAME”
三.OpenNMS邮件通知配置
打开通知功能:Admin页面中Operations下放的Notification Status 选项设置为On,点击Update。
1.邮件服务器的配置:
配置文件:$opennms_home/etc/javamail-configuration.properties
配置方案:
org.opennms.core.utils.useJMTA=false //是否使用JMTA,如果适用JMTA则将使用本机代理发送邮件
org.opennms.core.utils.mailHost=mail.360buy.com //邮件服务器地址
org.opennms.core.utils.transport=smtp //发送协议
org.opennms.core.utils.smtpport=25 //SMTP协议端口
org.opennms.core.utils.debug=true //打印错误日志,日志文件 $opennms_home//logs/daemon/notifd.log
org.opennms.core.utils.smtpssl.enable=true //使用SSL链接服务器,starttls和SSL需根据邮件服务器来设置
org.opennms.core.utils.quitwait=true //等待服务器返回
org.opennms.core.utils.authenticate=true //启用验证
org.opennms.core.utils.authenticateUser=guwenwu@360buy.com
org.opennms.core.utils.authenticatePassword=*******your password*****
org.opennms.core.utils.starttls.enable=false //使用TLS连接服务器,使用京东邮件服务器应设置为false。
org.opennms.core.utils.messageContentType=text/html
org.opennms.core.utils.charset=UTF-8
org.opennms.core.utils.fromAddress=guwenwu@360buy.com //邮件中显示的发送者,须同authenticateUser一致。
2.用户配置:
webUI配置路径:Admin->Configure Users, Groups and Roles->Configure Users->AddNew User->
输入ID和password->在用户信息中输入Email(用户的邮件接收地址)->Finsh
如果需要修改用户信息,可以在Configure Users中点击Modify按钮修改。
3.Destination Paths配置(发送路径,配置需要接收通知的群组、用户、角色和E-mail)
webUI配置路径:Admin->Configure Notifications->Configure Destination Paths->New path
->输入路径名称(如:testEmail-path)->点击Initial Targets右边的Edit,配置需要接受邮件的目标;
在这个页面*有四个个选框:User、Groups、Roles、Email选中需要接收邮件的目标即可。Email中
可以添加任意邮箱来接收邮件。->next配置用户之间的发送延迟时间->next发送方式,选择javaEmail即用邮件发送。
配置文件:$opennms_home/etc/destinationPaths.xml也可在配置文件中配置路径
4.event配置
WebUI配置路径:Admin->Configure Notifications->Configure Event Notifications->点击上方的Add New Event Notification
添加新的Event->在events列表中选择一个事件->Next->Skip results validation->编辑事件邮件内容,在choose A path 中选择一个发送路径。->Finish
四.NET-SNMP包的安装与配置
1.安装net-snmp:
Ubuntu11.10:apt-get install snmp snmpd
CentOS6.2: yum install net-snmp net-snmp-devel net-snmp-utils
启动SNMP服务:/etc/init.d/snmpd start
查看SNMP版本:snmpget --version
2.SNMP配置:/etc/snmp/snmpd.conf(需要root权限)
(1)对于SNMP V3版本,默认设置是监听本机的snmp请求,应该将其修改成成监听所有设备的请求,V2c版本不用修改。
# Listen for connections from the local system only
#agentAddress udp:127.0.0.1:161
# Listen for connections on all interfaces (both IPv4 *and* IPv6)
agentAddress udp:161,udp6:[::1]:161
(2)配置SNMP的访问权限,
默认的访问权限设置如下,这个设置只能收集到系统的基本信息。
view systemonly included .1.3.6.1.2.1.1
view systemonly included .1.3.6.1.2.1.25.1
# group context sec.model sec.level prefix read write notif access notConfigGroup "" any noauth exact systemonly none none
可以修改成:
view all included .1
# group context sec.model sec.level prefix read write notif access notConfigGroup "" any noauth exact all none none
(3)如果需要修改默认的Community String可以将public替换掉:
com2sec notConfigUser 0.0.0.0 public
配置完成后,检查snmp是否能够访问:snmpwalk -v 2c -c public YourIpAddress
(4)如果完成以上配置后依然无法访问SNMP服务,可以尝试
#sudo lsof-i:161
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
snmpd 1212 root 6u IPv4 11012 0t0 UDP *:snmp
PS:如果这里显示为snmpd 9641snmp 6u IPv4 29940 0t0 localhost:snmp:snmp
说明161端口是监听在localhost上的,也就是说不对外开放,只能访问本地的161端口。
iptables -A INPUT -p udp -i eth0 --dport 161 -j ACCEPT 将161端口开放
或关闭掉iptables
五.SNMP数据收集,RRD数据存储方式配置。
(1).SNMP version与Community配置
默认的SNMP版本和是V2c,密码是piblic。添加节点时可以在页面修改。
或者在Admin->Configure SNMP Community Names by IP中根据不同的IP配置
配置文件:($OPENNMS_HOME/etc/snmp-config.xml)
配置文件中的标签和属性含义:
<snmp-config>标签中定义的属性为全局的,适用与所有设备。
retry:重连次数,默认为1
timeout:等待时间,单位是毫秒,默认为3000
read-community:利用SNMP读取数据的密码,默认为public
write-community:利用SNMP写数据的密码,当前版本没有实现。
port:SNMP的端口,默认161
<definition>中的属性为局部的,仅适用与标签内指定的IP,并会覆盖全局属性。
(2).配置数据收集colletd进程
配置文件:$OPENNMS_HOME/collectd-configuration.xml
配置文件中的标签和属性含义:
collectd-configuration.xml
threads:用于收集数据的线程数量
<package>将设备分组进行数据收集
<filter> :对package中的设备进行过滤,IP地址满足过滤条件的设备将被包含在这个package中
<filter>IPADDR IPLIKE *.*.*.*</filter>
<specific> 指定一个特定的IP到package中
<include-range >指定一个特定IP范围到package中 <include-range begin="192.168.0.1" end="192.168.0.254"/>
<exclude-range>在package中排除范围内的设备
<exclude-range begin="192.168.0.100" end="192.168.0.104"/>
<include-url >指定一个文件文件中所有的IP都将包含到package中
<include-url>file:/opt/OpenNMS/etc/include</include-url>
<Services>为package中的设备配置数据收集服务,其中包含以下属性:
name:服务的名字,如SNMP、OpenNMS-JVM
interval:收集数据的时间间隔,单位为毫秒,默认为300000(5分钟)
user-defined:当前的版本还没有实现这个功能
parameter:设置变量
<outage>用于配置计划中的中断、故障
(3)SNMP数据收集配置以及RRD配置
配置文件:$OPENNMS_HOME/datacollection.xml
<snmp-collection>中定义了SNMP需要收集的数据组、RRD存储方式和存储目录
RRD
rrdRepository:属性定义了RRD存储目录,如果修改这一属性,因同时修改一下配置文件中的内容:
poller-configuration.xml
thresholds.xml
http-datacollection-config.xml
jmx-datacollection-config.xml
nsclient-datacollection-config.xml
<rrd>标签定义了rrd数据存储方式,如:
<rrd step="30">
<rra>RRA:AVERAGE:0.5:1:2016</rra>
</rrd>
step;步长,以秒为单位,默认值是300。
<rra>中的内容是RRD存储数据的详细配置,格式如下:
RRA:Cf:xff:steps:rows
RRA:表明这是一个RRD数据的配置命令。
Cf:存储内容统计函数,包含AVERAGE, MAX, MIN, LAST四种。
xff是一个影响因子,用于防止一个统计周期内大量数据丢失的情况,默认值是0.5,即允许有50%的数据丢失
steps,即多少个步长进行一次统计,并将数据存储为一行。
rows,表示RRD总共存储多少行数据。
如:step=300 RRA:AVERAGE:0.5:1:2016 表示,存储5分钟内的平均值,允许有50%的数据丢失,总共存储2016条数据
SNMP
<include-collection dataCollectionGroup="MIB2"/> 将SNMP收数据分成组,
每一个组都在$OPENNMS_HOME/etc/datacoll ection中有一个对应的配置文件。
其中配置了每个数据的ID和名字,系统已经自动配置好了大部分的数据,如果有需求可以手动在其中添加。
六.阀值Thresholds
1.配置流程
(1)首先,必须要收集你想要监控阀值的数据。
(2)然后,在 thresholds.xml中为你想要监控的数据配置一个阀值。
(3)然后在threshd-configuration.xml中设置需要监控阀值的设备、IP段、接口。
(4)最后为阀值监控创建报警或通知。
2.阀值监控的种类(type)
按照data source分类有两种。
Basic Threshold——直接对data source进行监控。
Expression based Threshold——监控按照表达式进行处理后的data source
(1).high:当数据高于设定的阀值时,触发一个'highthreshold'事件,直到数据低于re-arm值时,事件才被取消。
(2).low:与high相反。
(3).relativeChange:监控数据的相对变化,如下配置数据上涨了50%将引发事件(rearm值relativeChange无效)
<!-- Note: the "rearm" and "trigger" values are not currently used. -->
<threshold type="relativeChange" ds-name="ifInOctets" ds-type="if" value="1.5" rearm="1.0" trigger="1"/>
(4)absoluteChange:监控数据的绝对变化,如下配置数据上涨或下降3将引发事件。
<!-- Note: the "rearm" and "trigger" values are not currently used. -->
<threshold type="absoluteChange" ds-name="loss" ds-type="node" value="3" rearm="1.0" trigger="1"/>
3.配置文件中的标签和属性含义:
thresholds.xml
type:阀值监控的类型:‘high’ ‘low’ ‘relativeChange' 'absoluteChange'
rrdRepository:rrd数据存放目录,指向SNMP收集到的数据存放地址
expression:对数据源进行计算处理的数学表达式
ds-name:data source的名称
ds-type:data source类型,节点数据对应“node",接口数据对应‘if’
ds-label:data source的标签
value:阀值,对不同的type有不同的意义,如果设置为负数,将取其绝对值
rearm:The value at which the threshold will reset itself. Not used for relativeChange thresholds.
trigger:设置数据超过阀值的多少次才会引发事件,对 relativeChange 不适用
triggeredUEI:当阀值监控被触发时,向event发送事件时的UEI,如果设置为空,将默认生成一个标准thresholds UEIs.
rearmedUEI:threshold rearm时发送事件时的UEI
filters:一个正则表达式,用于对data source进行过滤
filterOperator:多个filter之间的连接符,可用or和and,默认值为or
threshd-configuration.xml
在thresholds.xml中,为每一个thresholds配置了相关的阀值、过滤、数据源等,并将其分到不同的group中,而在threshd-configuration.xml中为每一个group建立一个package,可以在其中配置被监控的设备IP段、
filter:对IP地址进行过滤,符合条件的设备才进行监控
include-range:将一个IP段加入到监控中
4.在web UI中管理thresholds
Admin->Manage Thresholds->选择一个Group,点击Edit进行编辑
NOTE:早期的OpenNMS中,threshd进行阀值监控和collectd不是同步的,threshd取出的数据可能是错误。后期OpenNMS将threshd和collectd进行了同步,collected收集到数据后,立即由threshd将数据与阀值进行比较,对于ICMP的数据,threshd和poller是同步的,如果需要开启SNMP同步功能可以在collectd-configuration.xml中,添加一个parameter
<parameter key="thresholding-enabled" value="true"/>
5.配置举例:为disk设置阀值
在threshd-configuration.xml中添加一个group:
<package name="Your NetWare Server Name">
<filter>IPADDR IPLIKE *.*.*.*</filter>
<specific>"Your NetWare IP Address"</specific>
<service name="SNMP" interval="300000" user-defined="false" status="on">
<parameter key="thresholding-group" value="Your NetWare server name-snmp"/>
</service>
<outage-calendar>zzz from poll-outages.xml zzz</outage-calendar>
</package>
在thresholds.xml中为group配置阀值:
<group name="Your NetWare server name-snmp"
rrdRepository = "/var/opennms/rrd/snmp/">
<threshold type="low" ds-name="disk-sys-free" ds-type="node" value="1204764" rearm="1304764" trigger="3"/>
<threshold type="low" ds-name="disk-dept-free" ds-type="node" value="20062184" rearm="2104764" trigger="3"/>
<threshold type="low" ds-name="disk-nos-free" ds-type="node" value="2085172" rearm="2185172" trigger="3"/>
<threshold type="low" ds-name="disk-ts-free" ds-type="node" value="564680" rearm="664680" trigger="3"/>
<threshold type="low" ds-name="disk-psft-free" ds-type="node" value="20897928" rearm="21897928" trigger="3"/>
<threshold type="low" ds-name="disk-user-free" ds-type="node" value="10025812" rearm="11025812" trigger="3"/>
<threshold type="low" ds-name="disk-apps-free" ds-type="node" value="7417340" rearm="7517340" trigger="3"/>
</group>
note:ds-name可以在$OPENNMS_HOME/etc/datacollection/*.xml中查找到
七.事件events
1.event种类
(1).由OpenNMS内部产生的“internal event”. (2).通过SNMP traps 生成的event
2.配置文件:eventconf.xml
UEI:Universal Event Identifier 用于辨识事件
event-label:web UI 中显示的时间标签
dscr:对事件的描述,支持html标签
logmsg:对事件的简短描述,包含一个“dest”属性,用于指明是否在数据库中log或在web Ui中展现,dest包含以下几个选项
logndisplay:在数据库中记录,并在web UI中展示
logonly:只记录,不展示
suppress:不记录也不展示
donotpersist:不在数据库中记录,但依然想其余进程发送event
discardtraps:只适用与trapd进程抛出trap的时候 ,trapd将不生成事件,直接忽略trap
severity:事件的严重程度,包含七个级别,并用不同颜色区分
Critical (dark red):表明网络中大量设备被这个event影响,应立即得到修正
Major (light red):设备完全down或有down的风险,事件应收到重视
Minor (orange):部分服务或功能损坏
Warning (yellow):不太紧要的,事件有可能需要得到注意,但是不用立即解决。
Normal (green):正常的事件
Cleared (light grey):表明之前的一个错误事件已经被纠正,服务已经恢复
Indeterminate (yellow-green):事件的影响无法预测
operinstruct:给管理员的操作提示
mouseovertext:web Ui中鼠标停留在event上时的文本提示
event-file:包含其他文件中的event
修改eventconf.xml文件后应用以下命令通知OpenNMS事件配置已经修改:
$OPENNMS_HOME/bin/send-event.pl uei.opennms.org/internal/eventsConfigChange
可以利用一下脚本来测试event配置:
$OPENNMS_HOME/bin/send-event.pl
$OPENNMS_HOME/bin/send-trap.pl
3.Event translator
event translator 允许对已经生成的event进行更改,它将clone一个相同的事件,并按照配置文件修改event中的一部份属性。使用这个功能的原因是:
创建被动状态事件。
将事件与不同的节点关联起来。
配置文件为:$OPENNMS_HOME/etc/translator-configuration.xml
可以利用从数据库取出的数据、正则表达式匹配的数据、String来替换event原有的属性,并生成一个新的event
4.事件发生时调用bean shell script
事件触发时,可以通过调用bean shell脚本来处理事件,脚本可以在$OPENNMS_HOME/etc/scriptd-configuration.xml中针对不同的UEI配置,也可以配置针对所有事件全局的脚本。
5.通过XML-RPC远程发送event
OpenNMS有一个个xmlrpcd进程,允许通过xml-RPC向远程系统转发event,配置文件为:$OPENNMS_HOME/etc/xmlrpcd-configuration.xml
1.配置举例:
<xmlrpcd-configuration max-event-queue-size="5000">
<external-servers retries="3" elapse-time="15000">
<xmlrpc-server url="http://10.1.8.10:8000" />
</external-servers>
<subscription>
<subscribed-event uei="uei.opennms.org/nodes/nodeLostService"/>
<subscribed-event uei="uei.opennms.org/nodes/nodeRegainedService"/>
<subscribed-event uei="uei.opennms.org/nodes/nodeUp"/>
<subscribed-event uei="uei.opennms.org/nodes/nodeDown"/>
<subscribed-event uei="uei.opennms.org/nodes/interfaceUp"/>
<subscribed-event uei="uei.opennms.org/nodes/interfaceDown"/>
<subscribed-event uei="uei.opennms.org/internal/capsd/updateServer"/>
<subscribed-event uei="uei.opennms.org/internal/capsd/updateService"/>
<subscribed-event uei="uei.opennms.org/internal/capsd/xmlrpcNotification"/>
</subscription>
</xmlrpcd-configuration>
标签和属性含义:
max-event-queue-size:存储队列的最大值
generic-msgs:默认是false,表示仅转发默认的六种basic event(node/service/interface +down/up)。设置为true时,表示转发所有订阅的event
external-servers:需要转发的xmlrpc服务器地址
retries:重试次数
elapse-time:重试等待时间
subscription:一组订阅的需要转发的事件,可以设置一个name
subscirption-event:一个订阅的需要转发的事件
OpenNMS系统将对external-servers中配置的所有服务器转发event,如果所有服务器都不可达,系统将存储5000条数据(max-event-queue-size)
2.激活xmlrpcd:
该进程默认是关闭的,如果需要开启这个功能,应该编辑$OPENNMS_HOME/etc/service-configuration.xml 解除以下配置代码的注释:
<service>
<name>OpenNMS:Name=Xmlrpcd</name>
<class-name>org.opennms.netmgt.xmlrpcd.jmx.Xmlrpcd</class-name>
<invoke at="start" pass="0" method="init"/>
<invoke at="start" pass="1" method="start"/>
<invoke at="status" pass="0" method="status"/>
<invoke at="stop" pass="0" method="stop"/>
</service>
3.运行流程
xmlrpcd初始化时,为每一个XMLRPC server创建一个EventListener和queue,当EventListener监听到一个被订阅的event时,将将event加入到queue中等待处理。当事件被处理时,xmlrpcd先检查generic-msgs属性,如果为false,只有默认的6种事件会被转发给XMLRPC server。
6.Automation 自动化
automation是opennms从1.3版本开始提供的功能,它由一个trigger和一个操作数据库的action statement构成,它可以完成一系列自动化的动作,比如定期清楚过期数据或当一个event长事件没有acknowledged,自动的将其severity级别升级。
配置文件:$OPENNMS_HOME/etc/vacuumd-configuration.xml
1.automation的属性:
name(required):用于区别automation的String
interval(required):整数,单位为毫秒,指明多长事件允许一次automation
trigger-name:通过名字来引用trigger
action-name(required):通过名字来引用action
action-event:需要发送的action-event名字
2.trigger:包含下列三个属性,并球有一个SQL statement,SQL语句的结果将由action中的语句进行处理。
name:名字 row-count和operator:两个属性一起使用,共同决定是否应该执行action
如:
<trigger name="selectNumBlafasel" operator=">=" row-count="1" >
<statement>
select
distinct(ipaddr) as _ipaddr,
count(nodeid),
nodeid as _nodeid
from events
where
eventuei='uei.opennms.org/test/blafasel' and
eventtime >= now()-'2 minutes'::INTERVAL
group by nodeid,ipaddr
having count(nodeid) > 10;
</statement>
</trigger>
当statement中的查询结果数量大于1时才执行action
3.action:action是automation中必须的一个组成部分,包括name和可以处理trigger中结果或独立执行的SQL statement。如:
UPDATE alarms SET severity = least(7, severity+1)
WHERE alarmid = ${alarmid}
AND alarmAckUser is NULL
automation将对语句进行解析,并确定trigger中的result set包含语句中所需的字段,然后执行语句,更新数据库。
4.action-event:当automation运行时生成一个或多个event,但不是必须的。
八.警报 Alarms
Alarms是由event衍生出来的,它的配置同event整合在一起,在$OPENNMS_HOME/etc/eventconf.xml中.在event中添加alarm-data标签来配置alarm:
1.alarm-data的属性:
reduction-key:用于区分警报,对事件进行过滤,防止重复报警。如一下配置:
<alarm-data reduction-key="%uei%:%nodeid%" alarm-type="1" auto-clean="false" />
alarm将把event中的uei和nodeid存储到报警列表中,对之后的生成的有相同uei和nodeid的event将不会产生报警,而是只更新alarm的lastEventTime, lastEventID,这样就防止了重复警报
alarm-type:这个属性共有三个可能值 “1”表示需要解决,“2”表示警报已解决方案,“3”表示可能没有解决方案。
auto-clean:如果设置为true将自动从数据库删除满足 reduction-key中的条件的event
clear-key:仅当alarm-type设置为2的时有效,用于在故障恢复后,自动将满足clear-key的alarm清除
一.从GIT获取源码,建立eclipse工程
1.mkdir ~/rcs; cd ~/rcs
2. git clone git://opennms.git.sourceforge.net/gitroot/opennms/opennmss
3. git branch -a (查看所有的分支)
4. git checkout -b 1.8 remotes/origin/1.8 (创建本地分支)
5. git reset --hard HEAD
6. git clean -f -d -x (5-6创建分支后的清理工作)
7. git pull (更新)
8.compile.pl (编译)此过程须要修改*目录下POM中maven-get-plugin版本(2.3.0-1-SNAPSHOT),此插件的官方包有bug,目前没有解决,在opennms上一个开发人员自己提供了一个修改过的版本(http://www.stroppykitten.com/gwt-maven-plugin-2.3.0-1-SNAPSHOT.tar.gz)将此版本放到maven的本地库中在编译即可。
9.eclipse Import 编译完后导入eclipse,即可做二次开发
二. 从源码安装OpenNMS
安装前确保JAVA环境使用的是sun-jdk 版本1.5以上
Ubuntu11.10环境下安装:
1.安装jicmp
下载地址: http://sourceforge.net/projects/opennms/files/JICMP/
版本:stable-1.2
cd jicmp
autoreconf -fvi
./configure
make
sudo make install
2.从源码安装OpenNMS
(1).在OpenNMS源码目录下,通过./compile.pl编译源码。
(2).完成编译后运行./assemble.pl -Dbuild.profile=dir 将OpenNMS安装到/target目录下
3.安装PostgreSql
(1).sudo apt-get install postgresql 安装postgresql
(2).sudo vim /etc/postgresql/9.1/main/pg_hba.conf 修改数据库密码验证方式.修改为
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 md5
4.运行OpenNMS
(1).进入OpenNMS安装目录,修改目录中权限BUG
cd <opennms.home>
chmod +x bin/*
chmod +x contrib/*
chmod -x contrib/*.README
chmod -x contrib/opennms.mib
(2).运行 ./bin/runjava -s 设置JVM
(3).运行 ./bin/install -dis 设置数据库
(4).运行 ./bin/opennms start 运行opennms
访问http://localhost:8980/opennms即可
CentOS6.2中源码安装:
安装步骤与Ubuntu中安装相同,过程中可能遇到以下几个问题:
1.安装JICMP时make、autoconfig、libtool未安装
解决方法:分别在下列网址中下载安装:
http://www.gnu.org/software/automake
http://www.gnu.org/software/autoconf
http://www.gnu.org/software/libtool
2.PostgreSQL数据库安装与启动方式不同
yum install postgresql postgresql-server 安装数据库
/sbin/service postgresql initdb 初始化数据库
/sbin/service postgresql start 启动数据库服务
/sbin/chkconfig postgresql on 设置数据库服务开机自动启动
3.运行./bin install -dis 初始化数据库设置时报错an error occurred getting the version from the database,language "plpgsql" does not exist
解决方法:参考:http://www.opennms.org/wiki/QuickStart#Initialize_OpenNMS_and_the_Database
执行下列语句 : createlang -U postgres plpgsql opennms
4.启动OpenNMS时,报错:DHCP服务冲突
解决方法: 参考:http://www.opennms.org/wiki/FAQ-Troubleshooting#Q:_Why_doesn.27t_the_dhcpd_process_ever_start.3F
修改$OPENNMS_HOME/etc/service-configuration.xml 文件中的配置,将以下内容注释掉。
<service>
<name>OpenNMS:Name=Dhcpd</name>
<class-name>org.opennms.netmgt.dhcpd.jmx.Dhcpd</class-name>
<invoke pass="1" method="start"/>
<invoke at="status" pass="0" method="status"/>
<invoke at="stop" pass="0" method="stop"/>
</service>
重启OpenNMS即可。 注意:修改配置后,OpenNMS无法监控DHCP服务
CentOS6.2 YUM安装
1.rpm -Uvh http://yum.opennms.org/repofiles/opennms-repo-stable-rhel6.noarch.rpm
2.yum -y install opennms
3./opt/opennms/bin/runjava -s
4.yum install postgresql postgresql-server
5./sbin/service postgresql start
6.vi /var/lib/pgsql/data/pg_hba.conf
7./sbin/service postgresql restart
8./opt/opennms/bin/install -dis
CentOS6.2 RPM安装centos
安装脚本:install_opennms.sh
需要的RPM包:
#!/bin/bash -
rpm -vih postgresql-libs-8.4.9-1.el6_1.1.x86_64.rpm
rpm -vih postgresql-8.4.9-1.el6_1.1.x86_64.rpm
rpm -vih postgresql-server-8.4.9-1.el6_1.1.x86_64.rpm
service postgresql initdb
/etc/init.d/postgresql start
file="/var/lib/pgsql/data/pg_hba.conf"
mv ${file} ${file}.bak
sed 's/ident/trust/g' ${file}.bak>>${file}
/etc/init.d/postgresql restart
rpm -vih jdk-6u24-linux-amd64.rpm
rpm -vih jicmp-1.2.1-1rhel6.x86_64.rpm
rpm -vih jicmp6-1.0.1-1rhel6.x86_64.rpm
rpm -vih opennms-core-1.10.0-2.noarch.rpm
rpm -vih opennms-webapp-jetty-1.10.0-2.noarch.rpm
rpm -vih opennms-1.10.0-2.noarch.rpm
/opt/opennms/bin/runjava -s
/opt/opennms/bin/install -dis
/opt/opennms/bin/opennms start
如果在安装过程中遇到如下错误:
错误:代理抛出异常: java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: centos62virtualProduct: centos62virtualProduct
修改/etc/hosts文件,在其中加入本机的hostname即可解决,如:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 “YOUR HOST NAME”
三.OpenNMS邮件通知配置
打开通知功能:Admin页面中Operations下放的Notification Status 选项设置为On,点击Update。
1.邮件服务器的配置:
配置文件:$opennms_home/etc/javamail-configuration.properties
配置方案:
org.opennms.core.utils.useJMTA=false //是否使用JMTA,如果适用JMTA则将使用本机代理发送邮件
org.opennms.core.utils.mailHost=mail.360buy.com //邮件服务器地址
org.opennms.core.utils.transport=smtp //发送协议
org.opennms.core.utils.smtpport=25 //SMTP协议端口
org.opennms.core.utils.debug=true //打印错误日志,日志文件 $opennms_home//logs/daemon/notifd.log
org.opennms.core.utils.smtpssl.enable=true //使用SSL链接服务器,starttls和SSL需根据邮件服务器来设置
org.opennms.core.utils.quitwait=true //等待服务器返回
org.opennms.core.utils.authenticate=true //启用验证
org.opennms.core.utils.authenticateUser=guwenwu@360buy.com
org.opennms.core.utils.authenticatePassword=*******your password*****
org.opennms.core.utils.starttls.enable=false //使用TLS连接服务器,使用京东邮件服务器应设置为false。
org.opennms.core.utils.messageContentType=text/html
org.opennms.core.utils.charset=UTF-8
org.opennms.core.utils.fromAddress=guwenwu@360buy.com //邮件中显示的发送者,须同authenticateUser一致。
2.用户配置:
webUI配置路径:Admin->Configure Users, Groups and Roles->Configure Users->AddNew User->
输入ID和password->在用户信息中输入Email(用户的邮件接收地址)->Finsh
如果需要修改用户信息,可以在Configure Users中点击Modify按钮修改。
3.Destination Paths配置(发送路径,配置需要接收通知的群组、用户、角色和E-mail)
webUI配置路径:Admin->Configure Notifications->Configure Destination Paths->New path
->输入路径名称(如:testEmail-path)->点击Initial Targets右边的Edit,配置需要接受邮件的目标;
在这个页面*有四个个选框:User、Groups、Roles、Email选中需要接收邮件的目标即可。Email中
可以添加任意邮箱来接收邮件。->next配置用户之间的发送延迟时间->next发送方式,选择javaEmail即用邮件发送。
配置文件:$opennms_home/etc/destinationPaths.xml也可在配置文件中配置路径
4.event配置
WebUI配置路径:Admin->Configure Notifications->Configure Event Notifications->点击上方的Add New Event Notification
添加新的Event->在events列表中选择一个事件->Next->Skip results validation->编辑事件邮件内容,在choose A path 中选择一个发送路径。->Finish
四.NET-SNMP包的安装与配置
1.安装net-snmp:
Ubuntu11.10:apt-get install snmp snmpd
CentOS6.2: yum install net-snmp net-snmp-devel net-snmp-utils
启动SNMP服务:/etc/init.d/snmpd start
查看SNMP版本:snmpget --version
2.SNMP配置:/etc/snmp/snmpd.conf(需要root权限)
(1)对于SNMP V3版本,默认设置是监听本机的snmp请求,应该将其修改成成监听所有设备的请求,V2c版本不用修改。
# Listen for connections from the local system only
#agentAddress udp:127.0.0.1:161
# Listen for connections on all interfaces (both IPv4 *and* IPv6)
agentAddress udp:161,udp6:[::1]:161
(2)配置SNMP的访问权限,
默认的访问权限设置如下,这个设置只能收集到系统的基本信息。
view systemonly included .1.3.6.1.2.1.1
view systemonly included .1.3.6.1.2.1.25.1
# group context sec.model sec.level prefix read write notif access notConfigGroup "" any noauth exact systemonly none none
可以修改成:
view all included .1
# group context sec.model sec.level prefix read write notif access notConfigGroup "" any noauth exact all none none
(3)如果需要修改默认的Community String可以将public替换掉:
com2sec notConfigUser 0.0.0.0 public
配置完成后,检查snmp是否能够访问:snmpwalk -v 2c -c public YourIpAddress
(4)如果完成以上配置后依然无法访问SNMP服务,可以尝试
#sudo lsof-i:161
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
snmpd 1212 root 6u IPv4 11012 0t0 UDP *:snmp
PS:如果这里显示为snmpd 9641snmp 6u IPv4 29940 0t0 localhost:snmp:snmp
说明161端口是监听在localhost上的,也就是说不对外开放,只能访问本地的161端口。
iptables -A INPUT -p udp -i eth0 --dport 161 -j ACCEPT 将161端口开放
或关闭掉iptables
五.SNMP数据收集,RRD数据存储方式配置。
(1).SNMP version与Community配置
默认的SNMP版本和是V2c,密码是piblic。添加节点时可以在页面修改。
或者在Admin->Configure SNMP Community Names by IP中根据不同的IP配置
配置文件:($OPENNMS_HOME/etc/snmp-config.xml)
配置文件中的标签和属性含义:
<snmp-config>标签中定义的属性为全局的,适用与所有设备。
retry:重连次数,默认为1
timeout:等待时间,单位是毫秒,默认为3000
read-community:利用SNMP读取数据的密码,默认为public
write-community:利用SNMP写数据的密码,当前版本没有实现。
port:SNMP的端口,默认161
<definition>中的属性为局部的,仅适用与标签内指定的IP,并会覆盖全局属性。
(2).配置数据收集colletd进程
配置文件:$OPENNMS_HOME/collectd-configuration.xml
配置文件中的标签和属性含义:
collectd-configuration.xml
threads:用于收集数据的线程数量
<package>将设备分组进行数据收集
<filter> :对package中的设备进行过滤,IP地址满足过滤条件的设备将被包含在这个package中
<filter>IPADDR IPLIKE *.*.*.*</filter>
<specific> 指定一个特定的IP到package中
<include-range >指定一个特定IP范围到package中 <include-range begin="192.168.0.1" end="192.168.0.254"/>
<exclude-range>在package中排除范围内的设备
<exclude-range begin="192.168.0.100" end="192.168.0.104"/>
<include-url >指定一个文件文件中所有的IP都将包含到package中
<include-url>file:/opt/OpenNMS/etc/include</include-url>
<Services>为package中的设备配置数据收集服务,其中包含以下属性:
name:服务的名字,如SNMP、OpenNMS-JVM
interval:收集数据的时间间隔,单位为毫秒,默认为300000(5分钟)
user-defined:当前的版本还没有实现这个功能
parameter:设置变量
<outage>用于配置计划中的中断、故障
(3)SNMP数据收集配置以及RRD配置
配置文件:$OPENNMS_HOME/datacollection.xml
<snmp-collection>中定义了SNMP需要收集的数据组、RRD存储方式和存储目录
RRD
rrdRepository:属性定义了RRD存储目录,如果修改这一属性,因同时修改一下配置文件中的内容:
poller-configuration.xml
thresholds.xml
http-datacollection-config.xml
jmx-datacollection-config.xml
nsclient-datacollection-config.xml
<rrd>标签定义了rrd数据存储方式,如:
<rrd step="30">
<rra>RRA:AVERAGE:0.5:1:2016</rra>
</rrd>
step;步长,以秒为单位,默认值是300。
<rra>中的内容是RRD存储数据的详细配置,格式如下:
RRA:Cf:xff:steps:rows
RRA:表明这是一个RRD数据的配置命令。
Cf:存储内容统计函数,包含AVERAGE, MAX, MIN, LAST四种。
xff是一个影响因子,用于防止一个统计周期内大量数据丢失的情况,默认值是0.5,即允许有50%的数据丢失
steps,即多少个步长进行一次统计,并将数据存储为一行。
rows,表示RRD总共存储多少行数据。
如:step=300 RRA:AVERAGE:0.5:1:2016 表示,存储5分钟内的平均值,允许有50%的数据丢失,总共存储2016条数据
SNMP
<include-collection dataCollectionGroup="MIB2"/> 将SNMP收数据分成组,
每一个组都在$OPENNMS_HOME/etc/datacoll ection中有一个对应的配置文件。
其中配置了每个数据的ID和名字,系统已经自动配置好了大部分的数据,如果有需求可以手动在其中添加。
六.阀值Thresholds
1.配置流程
(1)首先,必须要收集你想要监控阀值的数据。
(2)然后,在 thresholds.xml中为你想要监控的数据配置一个阀值。
(3)然后在threshd-configuration.xml中设置需要监控阀值的设备、IP段、接口。
(4)最后为阀值监控创建报警或通知。
2.阀值监控的种类(type)
按照data source分类有两种。
Basic Threshold——直接对data source进行监控。
Expression based Threshold——监控按照表达式进行处理后的data source
(1).high:当数据高于设定的阀值时,触发一个'highthreshold'事件,直到数据低于re-arm值时,事件才被取消。
(2).low:与high相反。
(3).relativeChange:监控数据的相对变化,如下配置数据上涨了50%将引发事件(rearm值relativeChange无效)
<!-- Note: the "rearm" and "trigger" values are not currently used. -->
<threshold type="relativeChange" ds-name="ifInOctets" ds-type="if" value="1.5" rearm="1.0" trigger="1"/>
(4)absoluteChange:监控数据的绝对变化,如下配置数据上涨或下降3将引发事件。
<!-- Note: the "rearm" and "trigger" values are not currently used. -->
<threshold type="absoluteChange" ds-name="loss" ds-type="node" value="3" rearm="1.0" trigger="1"/>
3.配置文件中的标签和属性含义:
thresholds.xml
type:阀值监控的类型:‘high’ ‘low’ ‘relativeChange' 'absoluteChange'
rrdRepository:rrd数据存放目录,指向SNMP收集到的数据存放地址
expression:对数据源进行计算处理的数学表达式
ds-name:data source的名称
ds-type:data source类型,节点数据对应“node",接口数据对应‘if’
ds-label:data source的标签
value:阀值,对不同的type有不同的意义,如果设置为负数,将取其绝对值
rearm:The value at which the threshold will reset itself. Not used for relativeChange thresholds.
trigger:设置数据超过阀值的多少次才会引发事件,对 relativeChange 不适用
triggeredUEI:当阀值监控被触发时,向event发送事件时的UEI,如果设置为空,将默认生成一个标准thresholds UEIs.
rearmedUEI:threshold rearm时发送事件时的UEI
filters:一个正则表达式,用于对data source进行过滤
filterOperator:多个filter之间的连接符,可用or和and,默认值为or
threshd-configuration.xml
在thresholds.xml中,为每一个thresholds配置了相关的阀值、过滤、数据源等,并将其分到不同的group中,而在threshd-configuration.xml中为每一个group建立一个package,可以在其中配置被监控的设备IP段、
filter:对IP地址进行过滤,符合条件的设备才进行监控
include-range:将一个IP段加入到监控中
4.在web UI中管理thresholds
Admin->Manage Thresholds->选择一个Group,点击Edit进行编辑
NOTE:早期的OpenNMS中,threshd进行阀值监控和collectd不是同步的,threshd取出的数据可能是错误。后期OpenNMS将threshd和collectd进行了同步,collected收集到数据后,立即由threshd将数据与阀值进行比较,对于ICMP的数据,threshd和poller是同步的,如果需要开启SNMP同步功能可以在collectd-configuration.xml中,添加一个parameter
<parameter key="thresholding-enabled" value="true"/>
5.配置举例:为disk设置阀值
在threshd-configuration.xml中添加一个group:
<package name="Your NetWare Server Name">
<filter>IPADDR IPLIKE *.*.*.*</filter>
<specific>"Your NetWare IP Address"</specific>
<service name="SNMP" interval="300000" user-defined="false" status="on">
<parameter key="thresholding-group" value="Your NetWare server name-snmp"/>
</service>
<outage-calendar>zzz from poll-outages.xml zzz</outage-calendar>
</package>
在thresholds.xml中为group配置阀值:
<group name="Your NetWare server name-snmp"
rrdRepository = "/var/opennms/rrd/snmp/">
<threshold type="low" ds-name="disk-sys-free" ds-type="node" value="1204764" rearm="1304764" trigger="3"/>
<threshold type="low" ds-name="disk-dept-free" ds-type="node" value="20062184" rearm="2104764" trigger="3"/>
<threshold type="low" ds-name="disk-nos-free" ds-type="node" value="2085172" rearm="2185172" trigger="3"/>
<threshold type="low" ds-name="disk-ts-free" ds-type="node" value="564680" rearm="664680" trigger="3"/>
<threshold type="low" ds-name="disk-psft-free" ds-type="node" value="20897928" rearm="21897928" trigger="3"/>
<threshold type="low" ds-name="disk-user-free" ds-type="node" value="10025812" rearm="11025812" trigger="3"/>
<threshold type="low" ds-name="disk-apps-free" ds-type="node" value="7417340" rearm="7517340" trigger="3"/>
</group>
note:ds-name可以在$OPENNMS_HOME/etc/datacollection/*.xml中查找到
七.事件events
1.event种类
(1).由OpenNMS内部产生的“internal event”. (2).通过SNMP traps 生成的event
2.配置文件:eventconf.xml
UEI:Universal Event Identifier 用于辨识事件
event-label:web UI 中显示的时间标签
dscr:对事件的描述,支持html标签
logmsg:对事件的简短描述,包含一个“dest”属性,用于指明是否在数据库中log或在web Ui中展现,dest包含以下几个选项
logndisplay:在数据库中记录,并在web UI中展示
logonly:只记录,不展示
suppress:不记录也不展示
donotpersist:不在数据库中记录,但依然想其余进程发送event
discardtraps:只适用与trapd进程抛出trap的时候 ,trapd将不生成事件,直接忽略trap
severity:事件的严重程度,包含七个级别,并用不同颜色区分
Critical (dark red):表明网络中大量设备被这个event影响,应立即得到修正
Major (light red):设备完全down或有down的风险,事件应收到重视
Minor (orange):部分服务或功能损坏
Warning (yellow):不太紧要的,事件有可能需要得到注意,但是不用立即解决。
Normal (green):正常的事件
Cleared (light grey):表明之前的一个错误事件已经被纠正,服务已经恢复
Indeterminate (yellow-green):事件的影响无法预测
operinstruct:给管理员的操作提示
mouseovertext:web Ui中鼠标停留在event上时的文本提示
event-file:包含其他文件中的event
修改eventconf.xml文件后应用以下命令通知OpenNMS事件配置已经修改:
$OPENNMS_HOME/bin/send-event.pl uei.opennms.org/internal/eventsConfigChange
可以利用一下脚本来测试event配置:
$OPENNMS_HOME/bin/send-event.pl
$OPENNMS_HOME/bin/send-trap.pl
3.Event translator
event translator 允许对已经生成的event进行更改,它将clone一个相同的事件,并按照配置文件修改event中的一部份属性。使用这个功能的原因是:
创建被动状态事件。
将事件与不同的节点关联起来。
配置文件为:$OPENNMS_HOME/etc/translator-configuration.xml
可以利用从数据库取出的数据、正则表达式匹配的数据、String来替换event原有的属性,并生成一个新的event
4.事件发生时调用bean shell script
事件触发时,可以通过调用bean shell脚本来处理事件,脚本可以在$OPENNMS_HOME/etc/scriptd-configuration.xml中针对不同的UEI配置,也可以配置针对所有事件全局的脚本。
5.通过XML-RPC远程发送event
OpenNMS有一个个xmlrpcd进程,允许通过xml-RPC向远程系统转发event,配置文件为:$OPENNMS_HOME/etc/xmlrpcd-configuration.xml
1.配置举例:
<xmlrpcd-configuration max-event-queue-size="5000">
<external-servers retries="3" elapse-time="15000">
<xmlrpc-server url="http://10.1.8.10:8000" />
</external-servers>
<subscription>
<subscribed-event uei="uei.opennms.org/nodes/nodeLostService"/>
<subscribed-event uei="uei.opennms.org/nodes/nodeRegainedService"/>
<subscribed-event uei="uei.opennms.org/nodes/nodeUp"/>
<subscribed-event uei="uei.opennms.org/nodes/nodeDown"/>
<subscribed-event uei="uei.opennms.org/nodes/interfaceUp"/>
<subscribed-event uei="uei.opennms.org/nodes/interfaceDown"/>
<subscribed-event uei="uei.opennms.org/internal/capsd/updateServer"/>
<subscribed-event uei="uei.opennms.org/internal/capsd/updateService"/>
<subscribed-event uei="uei.opennms.org/internal/capsd/xmlrpcNotification"/>
</subscription>
</xmlrpcd-configuration>
标签和属性含义:
max-event-queue-size:存储队列的最大值
generic-msgs:默认是false,表示仅转发默认的六种basic event(node/service/interface +down/up)。设置为true时,表示转发所有订阅的event
external-servers:需要转发的xmlrpc服务器地址
retries:重试次数
elapse-time:重试等待时间
subscription:一组订阅的需要转发的事件,可以设置一个name
subscirption-event:一个订阅的需要转发的事件
OpenNMS系统将对external-servers中配置的所有服务器转发event,如果所有服务器都不可达,系统将存储5000条数据(max-event-queue-size)
2.激活xmlrpcd:
该进程默认是关闭的,如果需要开启这个功能,应该编辑$OPENNMS_HOME/etc/service-configuration.xml 解除以下配置代码的注释:
<service>
<name>OpenNMS:Name=Xmlrpcd</name>
<class-name>org.opennms.netmgt.xmlrpcd.jmx.Xmlrpcd</class-name>
<invoke at="start" pass="0" method="init"/>
<invoke at="start" pass="1" method="start"/>
<invoke at="status" pass="0" method="status"/>
<invoke at="stop" pass="0" method="stop"/>
</service>
3.运行流程
xmlrpcd初始化时,为每一个XMLRPC server创建一个EventListener和queue,当EventListener监听到一个被订阅的event时,将将event加入到queue中等待处理。当事件被处理时,xmlrpcd先检查generic-msgs属性,如果为false,只有默认的6种事件会被转发给XMLRPC server。
6.Automation 自动化
automation是opennms从1.3版本开始提供的功能,它由一个trigger和一个操作数据库的action statement构成,它可以完成一系列自动化的动作,比如定期清楚过期数据或当一个event长事件没有acknowledged,自动的将其severity级别升级。
配置文件:$OPENNMS_HOME/etc/vacuumd-configuration.xml
1.automation的属性:
name(required):用于区别automation的String
interval(required):整数,单位为毫秒,指明多长事件允许一次automation
trigger-name:通过名字来引用trigger
action-name(required):通过名字来引用action
action-event:需要发送的action-event名字
2.trigger:包含下列三个属性,并球有一个SQL statement,SQL语句的结果将由action中的语句进行处理。
name:名字 row-count和operator:两个属性一起使用,共同决定是否应该执行action
如:
<trigger name="selectNumBlafasel" operator=">=" row-count="1" >
<statement>
select
distinct(ipaddr) as _ipaddr,
count(nodeid),
nodeid as _nodeid
from events
where
eventuei='uei.opennms.org/test/blafasel' and
eventtime >= now()-'2 minutes'::INTERVAL
group by nodeid,ipaddr
having count(nodeid) > 10;
</statement>
</trigger>
当statement中的查询结果数量大于1时才执行action
3.action:action是automation中必须的一个组成部分,包括name和可以处理trigger中结果或独立执行的SQL statement。如:
UPDATE alarms SET severity = least(7, severity+1)
WHERE alarmid = ${alarmid}
AND alarmAckUser is NULL
automation将对语句进行解析,并确定trigger中的result set包含语句中所需的字段,然后执行语句,更新数据库。
4.action-event:当automation运行时生成一个或多个event,但不是必须的。
八.警报 Alarms
Alarms是由event衍生出来的,它的配置同event整合在一起,在$OPENNMS_HOME/etc/eventconf.xml中.在event中添加alarm-data标签来配置alarm:
1.alarm-data的属性:
reduction-key:用于区分警报,对事件进行过滤,防止重复报警。如一下配置:
<alarm-data reduction-key="%uei%:%nodeid%" alarm-type="1" auto-clean="false" />
alarm将把event中的uei和nodeid存储到报警列表中,对之后的生成的有相同uei和nodeid的event将不会产生报警,而是只更新alarm的lastEventTime, lastEventID,这样就防止了重复警报
alarm-type:这个属性共有三个可能值 “1”表示需要解决,“2”表示警报已解决方案,“3”表示可能没有解决方案。
auto-clean:如果设置为true将自动从数据库删除满足 reduction-key中的条件的event
clear-key:仅当alarm-type设置为2的时有效,用于在故障恢复后,自动将满足clear-key的alarm清除