1注:因为这里采用的是监控本机的 oracle服务,所以直接使用 /usr/local/nagios/etc/objects/localhost.cfg 配置文件中定义了的主机 localhost和组 linux-servers
    修改 cgi.cfg配置文件,在该文件内所有以 authorized(认证)开头的行的行尾加上用户 nagios。这里推荐使用 sed来进行操作,命令为:
#sed '/authorized/ s/$/,nagios/g' /usr/local/nagios/etc/cgi.cfg
    因为 nagios是利用网页进行监控的,访问 nagios的网页需要进行身份验证,所以要创建 nagios访问网页的用户:
#htpasswd -c /usr/local/nagios/etc/htpasswd.usr nagios
    后根据提示输入密码即可,用户和密码被保存到 /usr/local/nagios/etc/htpasswd.usr文件中。如果是在已有用户的基础上添加新的用户,创建用户的命令跟上面的基本相似,但是不要添加 -c参数,不然会被覆盖掉原有的用户。
 
监控脚本
    nagios中自带监控oracle的监控脚本,但是由于默认脚本功能较多,如果要使用需要先看懂脚本的内容,而且自定义性不是很强,所以这里使用自定义的监控表空间的脚本:
注:自定义的脚本可以放在任何目录,前提是 nagios用户对该脚本有运行权限。为了方便在 nagios中定义监控命令,所以我把脚本放到了 /usr/local/nagios/libexec/目录中:
#cd /usr/local/nagios/libexec
#cat oracle.sh
1       #!/bin/bash
2       /oracle/app/oracle/product/10.2.0/db_1/bin/sqlplus sys/sys as sysdba <<EOF
3      set lines 1000
4       set pages 100
5      spool /tmp/oracle.msg #开启操作记录,并将记录保存到/tmp/oracle.msg文件中
6       SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE, (B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE" FROM SYS.SM\$TS_AVAIL A,SYS.SM\$TS_USED B,SYS.SM\$TS_FREE C WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME; #在系统表中搜索相应的数据并进行运算
7       spool off #操作记录结束
8       exit #推出oracle
9       EOF
10     userspace=`cat /tmp/oracle.msg | grep USER | awk '{print $6}'` #截取保存文件中的USER表的第六列
11     userspace=${userspace%.*} #去掉该数值后面的%后赋值给userpace
12     if [ $userspace -ge 25 ] #判断userspace的值大小给予不同的返回值
13     then
14        exit 0
15     elif [ $userspace -eq 0 ]
16     then
17        exit 2
18     else
19        exit 1
20     fi
注: nagios中的返回值是 nagios程序定义的,其中:
0:正常( OK);
1:警告( WARNING);
3:紧急( CRITICAL);
4:未知( UNKNOWN
    我的 oracle只有一个 USER表空间需要监控,如果有其它的表空间需要监控,只需要仿照第 10到第 20行进行配置即可。
 
4 定义监控命令
    完成了脚本的编写,就需要将脚本编进 nagios调用的监控命令中, nagios定义监控命令是在 $nagios_home/etc/commands.cfg文件中。
 define command{     #定义一个新的命令
        command_name          check_oracle              #定义命令的名称
        command_line              $USER1$/oracle.sh           #定义命令调用脚本的路径
         }
 
5 定义监控服务
    监控是 nagios的核心,如果不监控主机和服务那么之前的设置等于无用功。定义监控的主机,主机组和服务都是在 $nagios_home/etc/objects/localhost.cfg文件中。
    虽然这里使用的是系统默认的主机和组,但这里还是介绍下添加监控主机和主机组的方法:
5.1 定义监控主机
define host{
         host_name                                   oracle                          #定义被监控的主机名
         alias                                               ora                               #定义被监控的主机别名
         address                                         192.168.4.1               #被监控的主机的IP地址
         contact_groups                          admins                        #定义被监控主机所属的用户组
         check_command                        check-host-alive       #定义主机监控
         check_interval                             1                                   #定义检查频率
         max_check_attempts               5                                   #定义检查次数
         notification_interval                  10                                
         notification_period                    24x7
         notification_option                    d,u,r
}
5.2 定义主机组
define hostgroup{
         hostgroup_name                        user                             #定义主机组名称
         alias                                               user
         members                                      oracle                          #定义主机组成员
}
5.3 定义服务
define service{
     use                                                        local-service
     host_name                                localhost
     service_description                 ORACLE
     check_period                             24x7
     normal_check_interval           2
     process_perf_data                  1
     retry_check_interval               1
     max_check_attempts             5
     contact_groups                       admins
     notification_period                  24x7
     notification_options                w,u,c,r
     check_command                      check_oracle
}
    定义的服务中使用的用户、主机和主机组都是系统默认的。
 
6 nagios的用户权限
    nagios使用的用户是我们之前创建的nagios,而登陆oracle需要oracle用户,所以我们需要先将nagios用户加到oracle的用户组中,并且复制oracle用户的环境变量到nagios用户,这些操作需要在root用户进行:
#usermod -G oinstall nagios
#cp /home/oracle/.bash_profile /home/nagios/.bash_profile
#chown nagios.nagios /home/nagios/.bash_profile
 
7 语法检查
    完成了上面的配置之后就需要对配置进行语法检查, nagios自带语法检查的命令:
#/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
 
8 启动 nagios
         如果语法检查没有错误,就可以启动 nagios了。
#/etc/init.d/nagios start