nagios check_oracle plugin (add check temp tablespace)

#!/bin/sh
#
# [email protected]
# 01/06/2000
#
#  This Nagios plugin was created to check Oracle status
#

export ORACLE_SID=test
export ORACLE_BASE=/test/u01/app/oracle
export ORACLE_UNQNAME=$ORACLE_SID
export ORACLE_HOME=$ORACLE_BASE/product/11.2.4/db_1
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export LANG=en_US
#export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
#export NLS_LANG=American_America.AL32UTF
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
export PATH
PROGNAME=`basename $0`
PROGPATH=`echo $0 | sed -e ‘s,[\\/][^\\/][^\\/]*$,,‘`
REVISION="2.1.1"
PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"

. $PROGPATH/utils.sh

print_usage() {
  echo "Usage:"
  echo "  $PROGNAME --tns <Oracle Sid or Hostname/IP address>"
  echo "  $PROGNAME --db <ORACLE_SID>"
  echo "  $PROGNAME --login <ORACLE_SID>"
  echo "  $PROGNAME --connect <ORACLE_SID>"
  echo "  $PROGNAME --cache <ORACLE_SID> <USER> <PASS> <CRITICAL> <WARNING>"
  echo "  $PROGNAME --tablespace <ORACLE_SID> <USER> <PASS> <TABLESPACE> <CRITICAL> <WARNING>"
  echo "  $PROGNAME --tablespaceTEMP <ORACLE_SID> <USER> <PASS> <TABLESPACE> <CRITICAL> <WARNING>"
  echo "  $PROGNAME --oranames <Hostname>"
  echo "  $PROGNAME --help"
  echo "  $PROGNAME --version"
}

print_help() {
  print_revision $PROGNAME $REVISION
  echo ""
  print_usage
  echo ""
  echo "Check Oracle status"
  echo ""
  echo "--tns SID/IP Address"
  echo "   Check remote TNS server"
  echo "--db SID"
  echo "   Check local database (search /bin/ps for PMON process) and check"
  echo "   filesystem for sgadefORACLE_SID.dbf"
  echo "--login SID"
  echo "   Attempt a dummy login and alert if not ORA-01017: invalid username/password"
  echo "--connect SID"
  echo "   Attempt a login and alert if an ORA- error is returned"
  echo "--cache"
  echo "   Check local database for library and buffer cache hit ratios"
  echo "       --->  Requires Oracle user/password and SID specified."
  echo "               --->  Requires select on v_$sysstat and v_$librarycache"
  echo "--tablespace"
  echo "   Check local database for tablespace capacity in ORACLE_SID"
  echo "       --->  Requires Oracle user/password specified."
  echo "               --->  Requires select on dba_data_files and dba_free_space"
  echo "--tablespaceTEMP"
  echo "   Check local temporary database for tablespace capacity in ORACLE_SID"
  echo "       --->  Requires Oracle user/password specified."
  echo "                --->  Requires select on dba_temp_files and v_\$temp_extent_pool"
  echo "--oranames Hostname"
  echo "   Check remote Oracle Names server"
  echo "--help"
  echo "   Print this help screen"
  echo "--version"
  echo "   Print version and license information"
  echo ""
  echo "If the plugin doesn‘t work, check that the ORACLE_HOME environment"
  echo "variable is set, that ORACLE_HOME/bin is in your PATH, and the"
  echo "tnsnames.ora file is locatable and is properly configured."
  echo ""
  echo "When checking local database status your ORACLE_SID is case sensitive."
  echo ""
  echo "If you want to use a default Oracle home, add in your oratab file:"
  echo "*:/opt/app/oracle/product/7.3.4:N"
  echo ""
  support
}

case "$1" in
1)
    cmd=‘--tns‘
    ;;
2)
    cmd=‘--db‘
    ;;
*)
    cmd="$1"
    ;;
esac

# Information options
case "$cmd" in
--help)
        print_help
    exit $STATE_OK
    ;;
-h)
        print_help
    exit $STATE_OK
    ;;
--version)
        print_revision $PROGNAME $REVISION
    exit $STATE_OK
    ;;
-V)
        print_revision $PROGNAME $REVISION
    exit $STATE_OK
    ;;
esac

# Hunt down a reasonable ORACLE_HOME
if [ -z "$ORACLE_HOME" ] ; then
    # Adjust to taste
    for oratab in /var/opt/oracle/oratab /etc/oratab
    do
    [ ! -f $oratab ] && continue
    ORACLE_HOME=`IFS=:
        while read SID ORACLE_HOME junk;
        do
            if [ "$SID" = "$2" -o "$SID" = "*" ] ; then
                echo $ORACLE_HOME;
                exit;
            fi;
        done < $oratab`
    [ -n "$ORACLE_HOME" ] && break
    done
fi
# Last resort
[ -z "$ORACLE_HOME" -a -d $PROGPATH/oracle ] && ORACLE_HOME=$PROGPATH/oracle

if [ "$cmd" != "--db" ]; then
    if [ -z "$ORACLE_HOME" -o ! -d "$ORACLE_HOME" ] ; then
        echo "Cannot determine ORACLE_HOME for sid $2"
        exit $STATE_UNKNOWN
    fi
fi
PATH=$PATH:$ORACLE_HOME/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export ORACLE_HOME PATH LD_LIBRARY_PATH

case "$cmd" in
--tns)
    tnschk=` tnsping $2`
    tnschk2=` echo  $tnschk | grep -c OK`
    if [ ${tnschk2} -eq 1 ] ; then
    tnschk3=${tnschk##*(}; tnschk3=${tnschk3%)*}
    echo "OK - reply time ${tnschk3} from $2"
    exit $STATE_OK
    else
    echo "No TNS Listener on $2"
    exit $STATE_CRITICAL
    fi
    ;;
--oranames)
    namesctl status $2 | awk ‘
    /Server has been running for:/ {
    msg = "OK: Up"
    for (i = 6; i <= NF; i++) {
        msg = msg " " $i
    }
    status = ‘$STATE_OK‘
    }
    /error/ {
    msg = "CRITICAL: " $0
    status = ‘$STATE_CRITICAL‘
    }
    END {
    print msg
    exit status
    }‘
    ;;
--db)
    pmonchk=`ps -ef | grep -v grep | grep -E -c "(asm|ora)_pmon_${2}$"`
    if [ ${pmonchk} -ge 1 ] ; then
    echo "${2} OK - ${pmonchk} PMON process(es) running"
    exit $STATE_OK
    #if [ -f $ORACLE_HOME/dbs/sga*${2}* ] ; then
    #if [ ${pmonchk} -eq 1 ] ; then
    #utime=`ls -la $ORACLE_HOME/dbs/sga*$2* | cut -c 43-55`
        #echo "${2} OK - running since ${utime}"
        #exit $STATE_OK
    #fi
    else
    echo "${2} Database is DOWN"
    exit $STATE_CRITICAL
    fi
    ;;
--login)
    loginchk=`sqlplus dummy/[email protected]$2 < /dev/null`
    loginchk2=` echo  $loginchk | grep -c ORA-01017`
    if [ ${loginchk2} -eq 1 ] ; then
    echo "OK - dummy login connected"
    exit $STATE_OK
    else
    loginchk3=` echo "$loginchk" | grep "ORA-" | head -1`
    echo "CRITICAL - $loginchk3"
    exit $STATE_CRITICAL
    fi
    ;;
--connect)
    connectchk=`sqlplus $2 < /dev/null`
    connectchk2=` echo  $connectchk | grep -c ORA-`
    if [ ${connectchk2} -eq 0 ] ; then
    echo "OK - login successful"
    exit $STATE_OK
    else
    connectchk3=` echo "$connectchk" | grep "ORA-" | head -1`
    echo "CRITICAL - $connectchk3"
    exit $STATE_CRITICAL
    fi
    ;;
--cache)
    if [ ${5} -gt ${6} ] ; then
    echo "UNKNOWN - Warning level is less then Crit"
    exit $STATE_UNKNOWN
    fi
    result=`sqlplus -s ${3}/${4}@${2} << EOF
set pagesize 0
set numf ‘9999999.99‘
select (1-(pr.value/(dbg.value+cg.value)))*100
from v\\$sysstat pr, v\\$sysstat dbg, v\\$sysstat cg
where pr.name=‘physical reads‘
and dbg.name=‘db block gets‘
and cg.name=‘consistent gets‘;
EOF`

    if [ -n "`echo $result | grep ORA-`" ] ; then
      error=` echo "$result" | grep "ORA-" | head -1`
      echo "CRITICAL - $error"
      exit $STATE_CRITICAL
    fi

    buf_hr=`echo "$result" | awk ‘/^[0-9\. \t]+$/ {print int($1)}‘`
    buf_hrx=`echo "$result" | awk ‘/^[0-9\. \t]+$/ {print $1}‘`
    result=`sqlplus -s ${3}/${4}@${2} << EOF
set pagesize 0
set numf ‘9999999.99‘
select sum(lc.pins)/(sum(lc.pins)+sum(lc.reloads))*100
from v\\$librarycache lc;
EOF`

    if [ -n "`echo $result | grep ORA-`" ] ; then
      error=` echo "$result" | grep "ORA-" | head -1`
      echo "CRITICAL - $error"
      exit $STATE_CRITICAL
    fi

    lib_hr=`echo "$result" | awk ‘/^[0-9\. \t]+$/ {print int($1)}‘`
    lib_hrx=`echo "$result" | awk ‘/^[0-9\. \t]+$/ {print $1}‘`

    if [ $buf_hr -le ${5} -o $lib_hr -le ${5} ] ; then
      echo "${2} CRITICAL - Cache Hit Rates: $lib_hrx% Lib -- $buf_hrx% Buff|lib=$lib_hrx%;${6};${5};0;100 buffer=$buf_hrx%;${6};${5};0;100"
    exit $STATE_CRITICAL
    fi
    if [ $buf_hr -le ${6} -o $lib_hr -le ${6} ] ; then
      echo "${2} WARNING  - Cache Hit Rates: $lib_hrx% Lib -- $buf_hrx% Buff|lib=$lib_hrx%;${6};${5};0;100 buffer=$buf_hrx%;${6};${5};0;100"
    exit $STATE_WARNING
    fi
    echo "${2} OK - Cache Hit Rates: $lib_hrx% Lib -- $buf_hrx% Buff|lib=$lib_hrx%;${6};${5};0;100 buffer=$buf_hrx%;${6};${5};0;100"

    exit $STATE_OK
    ;;
--tablespace)
    if [ ${6} -lt ${7} ] ; then
    echo "UNKNOWN - Warning level is more then Crit"
    exit $STATE_UNKNOWN
    fi
    result=`sqlplus -s ${3}/${4}@${2} << EOF
set pagesize 0
set numf ‘9999999.99‘
select NVL(b.free,0.0),a.total,100 - trunc(NVL(b.free,0.0)/a.total * 1000) / 10 prc
from (
select tablespace_name,sum(bytes)/1024/1024 total
from dba_data_files group by tablespace_name) A
LEFT OUTER JOIN
( select tablespace_name,sum(bytes)/1024/1024 free
from dba_free_space group by tablespace_name) B
ON a.tablespace_name=b.tablespace_name WHERE a.tablespace_name=‘${5}‘;
EOF`

    if [ -n "`echo $result | grep ORA-`" ] ; then
      error=` echo "$result" | grep "ORA-" | head -1`
      echo "CRITICAL - $error"
      exit $STATE_CRITICAL
    fi

    ts_free=`echo "$result" | awk ‘/^[ 0-9\.\t ]+$/ {print int($1)}‘`
    ts_total=`echo "$result" | awk ‘/^[ 0-9\.\t ]+$/ {print int($2)}‘`
    ts_pct=`echo "$result" | awk ‘/^[ 0-9\.\t ]+$/ {print int($3)}‘`
    ts_pctx=`echo "$result" | awk ‘/^[ 0-9\.\t ]+$/ {print $3}‘`
    if [ "$ts_free" -eq 0 -a "$ts_total" -eq 0 -a "$ts_pct" -eq 0 ] ; then
        echo "No data returned by Oracle - tablespace $5 not found "
        exit $STATE_UNKNOWN
    fi
    if [ "$ts_pct" -ge ${6} ] ; then
      echo "${2} : ${5} CRITICAL - $ts_pctx% used [ $ts_free / $ts_total MB available ]|${5}=$ts_pctx%;${7};${6};0;100"
    exit $STATE_CRITICAL
    fi
    if [ "$ts_pct" -ge ${7} ] ; then
      echo "${2} : ${5} WARNING  - $ts_pctx% used [ $ts_free / $ts_total MB available ]|${5}=$ts_pctx%;${7};${6};0;100"
    exit $STATE_WARNING
    fi
    echo "${2} : ${5} OK - $ts_pctx% used [ $ts_free / $ts_total MB available ]|${5}=$ts_pctx%;${7};${6};0;100"
    exit $STATE_OK
    ;;
--tablespaceTEMP)
    if [ ${6} -lt ${7} ] ; then
    echo "UNKNOWN - Warning level is more then Crit"
    exit $STATE_UNKNOWN
    fi
    result=`sqlplus -s ${3}/${4}@${2} << EOF
set pagesize 0
set numf ‘9999999.99‘
SELECT   NVL(FREE_SPACE, 0) ,
       SPACE ,
       ROUND(NVL(USED_SPACE, 0) / SPACE * 100, 2)
  FROM (SELECT TABLESPACE_NAME,
               ROUND(SUM(BYTES) / (1024 * 1024), 2) SPACE,
               SUM(BLOCKS) BLOCKS
          FROM DBA_TEMP_FILES
         GROUP BY TABLESPACE_NAME) D,
       (SELECT TABLESPACE_NAME,
               ROUND(SUM(BYTES_USED) / (1024 * 1024), 2) USED_SPACE,
               ROUND(SUM(BYTES_FREE) / (1024 * 1024), 2) FREE_SPACE
          FROM V\\$TEMP_SPACE_HEADER
         GROUP BY TABLESPACE_NAME) F
 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) and d.tablespace_name=‘${5}‘
 ORDER BY 1;
EOF`

    if [ -n "`echo $result | grep ORA-`" ] ; then
      error=` echo "$result" | grep "ORA-" | head -1`
      echo "CRITICAL - $error"
      exit $STATE_CRITICAL
    fi

    ts_free=`echo "$result" | awk ‘/^[ 0-9\.\t ]+$/ {print int($1)}‘`
    ts_total=`echo "$result" | awk ‘/^[ 0-9\.\t ]+$/ {print int($2)}‘`
    ts_pct=`echo "$result" | awk ‘/^[ 0-9\.\t ]+$/ {print int($3)}‘`
    ts_pctx=`echo "$result" | awk ‘/^[ 0-9\.\t ]+$/ {print $3}‘`
    if [ "$ts_free" -eq 0 -a "$ts_total" -eq 0 -a "$ts_pct" -eq 0 ] ; then
        echo "No data returned by Oracle - tablespace $5 not found "
        exit $STATE_UNKNOWN
    fi
    if [ "$ts_pct" -ge ${6} ] ; then
      echo "${2} : ${5} CRITICAL - $ts_pctx% used [ $ts_free / $ts_total MB available ]|${5}=$ts_pctx%;${7};${6};0;100"
    exit $STATE_CRITICAL
    fi
    if [ "$ts_pct" -ge ${7} ] ; then
      echo "${2} : ${5} WARNING  - $ts_pctx% used [ $ts_free / $ts_total MB available ]|${5}=$ts_pctx%;${7};${6};0;100"
    exit $STATE_WARNING
    fi
    echo "${2} : ${5} OK - $ts_pctx% used [ $ts_free / $ts_total MB available ]|${5}=$ts_pctx%;${7};${6};0;100"
    exit $STATE_OK
    ;;
*)
    print_usage
        exit $STATE_UNKNOWN
esac
时间: 2024-08-24 07:21:50

nagios check_oracle plugin (add check temp tablespace)的相关文章

service nagios restart Running configuration check...done. Stopping nagios: .done. Starting nagios:T

service nagios restart Running configuration check...done. Stopping nagios: .done. Starting nagios:This account is currently not available. done. 解决方法 vi /etc/passwd 将:nagios:x:505:505::/home/nagios:/sbin/nologin 改为:nagios:x:505:505::/home/nagios:/bi

cordova plugin add出现CERT_UNTRUSTED错误解决方法

介绍 目前使用ionic+cordova完成hybmid app开发,在安装geolocation插件时爆出来一个莫名的错误: Fetching from npm failed: CERT_UNTRUSTED Error: CERT_UNTRUSTED     at SecurePair.<anonymous> (tls.js:1367:32)     at SecurePair.emit (events.js:92:17)     at SecurePair.maybeInitFinishe

Common SQL for Oracle---(2)Check TableSpace

-----Check TableSpace----- ---Check DataFile SELECT TABLESPACE_NAME "TABLESPACE", FILE_NAME "DATAFILE", ROUND(BYTES / (1024 )) "FILE_SIZE(KB)" FROM DBA_DATA_FILES WHERE TABLESPACE_NAME LIKE '&TABLESPACE' ORDER BY DATAFILE

How to Add Linux Host to Nagios Monitoring Server Using NRPE Plugin

In our first part of this article, we’ve explained in detail on how to install and configure latest Nagios Core 4.2.0on CentOS 7.2 server. In this article we will show you how to add Remote Linux machine and it’s services to Nagios Monitoring host us

CPU Utilization Plugin For Nagios v1.0

此脚本参考了Nagios的官方文档https://exchange.nagios.org/并其进行了代码精简和移值,原代码是运行在ksh下面的,定义数组的方式跟bash还是有区别的:另外,为了反映CPU的繁忙程度,特的抓取了vmstart命令中的平均值并将其打印出来.为了方便大家下载,特的将其收录进了我的github中. #!/bin/bash # CPU Utilization Statistics plugin for Nagios IOSTAT="/usr/bin/iostat"

Centos 6.7 安张nagios和cacti 并添加监控主机

wget http://mcshell.org/nrpe-2.8.tar.gz wget http://mcshell.org/nagios-plugins-1.4.13.tar.gz 一.环境Centos 6.7 ip:192.168.3.150 nagios 和cacti  监控主机 192.168.3.150/152   被检控主机 二.安装准备 mount yum  –y install httpd php php-mysql mysql mysql-server php  net-sn

监控之Nagios

NAGIOS Nagios是一款开源的免费网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知. 一.Nagios概述 1.简介 Nagios是插件式的结构,它本身没有任何监控功能,所有的监控都是通过插件进行的,因此其是高度模块化和富有弹性的.Nagios监控的对象可分为两类:主机和服务.主机通常指的是物理主机,如服务器.路由器.工作站和打印

Nagios 监控mysql服务器详细实现过程

1.NRPE介绍 NRPE是Nagios的一个功能扩展,它可在远程Linux/Unix主机上执行插件程序.通过在远程服务器上安装NRPE插件及Nagios插件程序来向Nagios监控平台提供该服务器的本地情况,如CPU负载,内存使用,磁盘使用等.这里将Nagios监控端称为Nagios服务器端,而将远程被监控的主机称为Nagios客户端. Nagios监控远程主机的方法有多种,其方式包括SNMP,NRPE,SSH,NCSA等.这里介绍其通过NRPE监控远程Linux主机的方式. NRPE(Nag

Nagios利用NRPE监控Linux主机(3)

一.利用NRPE监控远程Linux的"本地信息" 上面已经对远程Linux 主机是否存活做了监控,而判断远程机器是否存活,我们可以使用ping 工具对其监测.还有一些远程主机服务,例如ftp.ssh.http,都是对外开放的服务,即使不用Nagios,我们也可以试的出来,随便找一台机器看能不能访问这些服务就行了.但是对于像磁盘容量,cpu负载这样的"本地信息",Nagios只能监测自己所在的主机,而对其他的机器则显得有点无能为力.毕竟没得到被控主机的适当权限是不可能