OpenNMS是个很强大的网管软件,用它可以监视服务器的资源使用状况,并在必要的时候向管理员发出警告。(当然它的强大功能不止这些,我就用到这个功能而已)。安装其实也不麻烦,基本上按照官方文档的安装过程都没问题。
网上流传的方法都是将OpenNMS装在Tomcat上,不过最新版的opennms-1.6.1内置了Web服务器,所以Tomcat就不是必须的了,这样安装要方便许多。下面这篇文章是在Redhat Liux Enterprise 4上安装的,其实RH系列的操作系统都差不多,大家在安装时注意选择和操作系统匹配的软件包就行了。
下载
由于局域网中不能使用yum,所以必须手动下载需要的安装包。安装OpenNMS需要以下软件:
- Postgresql:Linux自带
- OpenNMS:从下载页面 选择binaries下载。
- jicmp和iplike,从OpenNMS的yum页面可以下载。
- JDK,从Sun的下载页面上下载。
安装Postgresql
首先安装Postgresql:
# rpm -i postgresql-7.4.8-1.RHEL4.1.i386.rpm # rpm -i postgresql-server-7.4.8-1.RHEL4.1.i386.rpm # chkconfig postgresql on # /etc/init.d/postgresql start
然后要编辑配置文件 /var/lib/pgsql/data/pg_hba.cof 中权限相关的部分:
把下面这一行:
local all all ident sameuser
改成这样:
local all all trust host all all 127.0.0.1/32 trust host all all ::1/128 trust
然后需要编辑 /var/lib/pgsql/data/postgresql.conf,让它监听TCP。我用的是RHEL4的postgresql-7.4.8,修改方法如下:
#tcpip_socket = false
改成
tcpip_socket = true
如果是较新的服务器,那应该是默认监听TCP的,如果不行,就要在 postgresql.conf 中加入这样一行:
listen_addresses = 'localhost'
然后重启一下服务器:
/etc/init.d/postgresql restart
确认一下postgresql是否启动成功:
# netstat -lntp ...(中略) tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 28603/postmaster # 有这一行即可
最后要创建OpenNMS的数据库:
# sudo -u postgres createdb -U postgres -E UNICODE opennms CREATE DATABASE
安装JDK
我从Sun的网站上下载了rpm版的JDK 6 Update 11。安装很简单:
# ./jdk-6u11-linux-i586-rpm.bin
安装OpenNMS
安装OpenNMS需要以下几个包:
- opennms-1.6.1-1.noarch.rpm:为yum准备的快捷包,不装也行
- opennms-core-1.6.1-1.noarch.rpm:OpenNMS的核心
- opennms-docs-1.6.1-1.noarch.rpm:OpenNMS的文档
- opennms-webapp-jetty-1.6.1-1.noarch.rpm:OpenNMS自带的Web服务器
还有依赖关系:
- jicmp-1.0.7-1.i386.rpm:注意这个包,不同系统上的安装包是不一样的
- iplike-1.0.7-1.i366.rpm:注意这个包,不同系统上的安装包是不一样的
如果你要与Tomcat配合使用,可以选择安装opennms-webapp-standalone-1.6.1-1.noarch.rpm,这里就不介绍了。
按照顺序分别安装以上几个包:
# rpm -i jicmp-1.0.7-1.i386.rpm # rpm -i opennms-core-1.6.1-1.noarch.rpm # rpm -i opennms-webapp-jetty-1.6.1-1.noarch.rpm # rpm -i opennms-docs-1.6.1-1.noarch.rpm # rpm -i opennms-1.6.1-1.noarch.rpm
安装iplike:
# rpm -i iplike-1.0.7-1.i386.rpm
安装过程中会创建存储过程,如果失败的话,可以在排除原因之后执行 /usr/sbin/install_iplike.sh 。
配置OpenNMS
首先设置一个环境变量,指向OpenNMS的安装位置,便于以后的输入:
export OPENNMS_HOME=/opt/opennms
告诉OpenNMS使用新安装的JDK。注意这一步一定要指定你上面刚刚安装的JDK。系统中有可能自带了JRE的java解释器,那个不行,要用JDK的。
# $OPENNMS_HOME/bin/runjava -S /usr/java/latest/bin/java
然后安装OpenNMS的数据库:
# $OPENNMS_HOME/bin/install -dis
最后启动OpenNMS:
# chkconfig --add opennms # /etc/init.d/opennms start
然后打开浏览器,访问 http://<your_ip_address>:8980/opennms/ ,用户名admin密码admin,登录就行了。
配置被监视的服务器
要监视服务器的运行状态,应该在要监视的服务器上安装SNMP。如果是Linux系统,那么可以使用自带的net-snmp包。
# rpm -i net-snmp-libs-5.1.2-11.EL4.6.i386.rpm # rpm -i net-snmp-5.1.2-11.EL4.6.i386.rpm # rpm -i net-snmp-utils-5.1.2-11.EL4.6.i386.rpm # chkconfig snmpd on # /etc/init.d/snmpd start
然后修改 /etc/snmp/snmpd.conf 。该文件主要由四个指令构成:
com2sec | 定义一个安全策略。community的作用类似于密码。 |
group | 将安全策略映射到组。securityModel指SNMP版本号,可以选择v1、v2c或v3。 |
view | 定义一个视图,规定视图中包括的内容。 |
access | 定义哪个组可以访问哪个视图,以及访问权限。 |
view中的一长串数字 .1.3.6.1.2.1.1 是MIB结点名称(OID),由RFC1065/1155定义。用snmptranlsate工具可以看到数字的意义:
# snmptranslate .1.3.6.1.2.1.1 SNMPv2-MIB::system
我们可以让SNMP返回更多的信息(由于是局域网,所以就不考虑安全性问题了)。按照以下方式修改snmpd.conf,同时注释掉原有内容:
com2sec opennms 192.168.1.100/32 opennms # 最后一个字段为community名称 group opennmsGroup v1 opennms view view_all included .1 access opennmsGroup "" any noauth exact view_all none none
另外syslocation和syscontact指令是用来记录服务器所在物理位置和管理员联系地址的,适当填写即可。
最后重启SNMP:
# /etc/init.d/snmpd restart
用snmpwalk工具检查配置是否正确,正确的话应该会输出很多信息:
# snmpwalk -c opennms -v 1 192.168.1.100
最后将每台要监视的服务器都按照上述方法配置即可。
在OpenNMS中添加节点
登录到OpenNMS中,点击Admincaidan,然后点击左侧Operations中的Configure Discovery。在Specifics表格中将要监视的服务器的IP地址填进去。如果要监视大范围的服务器,可以在下面的Include Ranges中指定IP地址的范围。最后点击“Save and Restart Discovery”,重新开始搜索节点。
稍等几分钟,再点击Node List菜单,即可看到刚刚添加的服务器。
但是现在在服务器状态中还看不到SNMP信息,因为我们还没设置SNMP的community名称—— 刚才说过,community名称相当于密码。
点击Admin菜单,然后选择左侧的Configure SNMP Community Names by IP命令。然后输入IP地址,以及刚才在snmpd.conf中使用的community名称,版本号也要与snmpd.conf的group指令中设置的一致,最后点击Submit。
接下来回到Node List,进入要监视的服务器的状态页面,点击上方菜单中的Rescan。等待一分钟左右再刷新页面,就可以看到SNMP状态信息了。(由于有了SNMP的帮助,你会发现状态页面的信息一下子多了许多。)
这样,我们可以通过点击上方的Resource Graphs即可看到服务器运行状态的图表。