通过nagios网关oracle数据库的相关参数,以简单的查看当前session值为例。
shell如下,
#!/bin/sh
export ORACLE_ADMIN=oracle
export ORACLE_BASE=/app/oracle
export ORACLE_HOME=/app/oracle/product/112
export ORACLE_SID=$(ps -ef|grep ora_ |awk '{print $8}'|cut -d "_" -f3|head -1)
sessionNum=$(su $ORACLE_ADMIN -c "/bin/sh" <<EOF
export ORACLE_HOME=${ORACLE_HOME}
export ORACLE_SID=${ORACLE_SID}
export ORACLE_BASE=${ORACLE_BASE}
(${ORACLE_HOME}/bin/sqlplus -S '/as sysdba' <<!
set pagesize 0;
set line 100;
select count(*) from v_\\\$session;
!
)
EOF
)
processNum=$(su $ORACLE_ADMIN -c "/bin/sh" <<EOF
export ORACLE_HOME=${ORACLE_HOME}
export ORACLE_SID=${ORACLE_SID}
export ORACLE_BASE=${ORACLE_BASE}
(${ORACLE_HOME}/bin/sqlplus -S '/as sysdba' <<!
set pagesize 0;
set line 100;
select count(*) from v_\\\$process;
!
)
EOF
)
if [ $sessionNum -le 100 ];then
echo "OK,current session number is $sessionNum"
exit $STATE_OK
elif [ $sessionNum -gt 200 ];then
echo "CRITICAL,current session number is $sessionNum"
exit $STATE_CRITICAL
else
echo "WARNING,current session number is $sessionNum"
exit $STATE_WARNING
fi
//////////////////////////
改脚本是通过root用户下直接查询oracle 的session和processOK,current session number is
配置好nrpe本地的nrpe.cfg,且将脚本放入/usr/loacl/nagios/libexec/中,远程nagios server端也配置好localhost 和comman的,发现本地执行结果是OK,current session number is 48
,而在远程server执行结果是waring,current session number is
故障分析,nagios server的check_nrpe 和client的nrpe通信传参机制是通过nagios用户实现的,故server端通过nrpe pipe远程到client也是用的nagios用户。
更改脚本,将nagios用户加入oracle的dba组,然后配置环境变量.bash_profile。并在client本地用nagios用户执行脚本验证,成功。但是此时在远程通过check_nrpe -H -c结果还是不一致,再次故障分析,想到除了用户权限问题,还有就是远程到client端的nagios用户无法自动读取环境变量,故将环境变量也增加到shell脚本中,此时在验证,ok!,问题解决。
最终shell如下。
#!/bin/sh
export PATH
ORACLE_BASE=/app/oracle; export ORACLE_BASE
ORACLE_HOME=/app/oracle/product/112; export ORACLE_HOME
ORACLE_UNQNAME=cdasdb; export ORACLE_UNQNAME
ORACLE_TERM=xterm; export ORACLE_TERM
NLS_DATE_FORMAT="DD-MON-YYYY HH24:MI:SS"; export NLS_DATE_FORMAT
TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN
ORA_NLS11=$ORACLE_HOME/nls/data; export ORA_NLS11
PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin
PATH=${PATH}:$ORACLE_HOME/OPatch:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export CLASSPATH
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
export ORACLE_ADMIN=oracle
export ORACLE_BASE=/app/oracle
export ORACLE_HOME=/app/oracle/product/112
export ORACLE_HOME=/app/oracle/product/112
export ORACLE_SID=$(ps -ef|grep ora_ |awk '{print $8}'|cut -d "_" -f3|head -1)
sessionNum=$(
sqlplus -S '/as sysdba' <<!
set pagesize 0;
set line 100;
select count(*) from v\$session;
!
)
if [ $sessionNum -le 100 ];then
echo "OK,current session number is $sessionNum"
exit $STATE_OK
elif [ $sessionNum -gt 200 ];then
echo "CRITICAL,current session number is $sessionNum"
exit $STATE_CRITICAL
else
echo "WARNING,current session number is $sessionNum"
exit $STATE_WARNING
fi
本文档描述了在Nagios监控Oracle数据库时,通过Nagios客户端执行Oracle检查脚本与远程服务器执行结果不一致的故障分析及解决方案。问题在于Nagios用户的权限和环境变量设置。通过将Nagios用户加入Oracle的dba组,配置环境变量,并在脚本中直接包含环境变量,最终解决了问题。

2409

被折叠的 条评论
为什么被折叠?



