2
0
mirror of https://github.com/munin-monitoring/contrib.git synced 2018-11-08 00:59:34 +01:00
contrib-munin/plugins/oracle/oracle_connections
2014-10-04 22:21:35 +02:00

154 lines
3.9 KiB
Bash
Executable File

#!/bin/bash
#
# Munin plugin to monitor oracle connections w/o DBD::Oracle, or perl for that
# matter ;-)
#
# Author: Kevin Kunkel (kunkel.kevin@gmail.com) on December 11, 2007
# (Based off the perl munin plugin by Joan Carles Soler)
#
# Licenced under GPL v2.
#
# Usage:
#
# If required, give username, password and/or oracle server
# host through environment variables.
#
# Parameters:
# autoconf
# config (required)
#
# Config variables:
#
# ORACLE_SID - Which database to use. Defaults to orcl
# oracle_user - A oracle user account with read permission to
# the v$session view. Defaults to
# 'oracle'. Anyway, Munin must be told which user
# this plugin should be run as.
# oracle_pass - The corresponding password, if
# applicable. Default to undef.
#
# SHOW_ORACLE_USERS - If set to 1 show usernames and num. of connections.
# Default is not show users (0).
# Magic markers
#%# family=auto
#%# capabilities=autoconf
# Hard-code environment variables here
#oracle_user=
#oracle_pass=
#ORACLE_SID=
#ORACLE_HOME=
#SHOW_ORACLE_USERS=
# End variable hard-code
if [ -z "$ORACLE_HOME" ] ; then
# Adjust to your oratab locations
for oratab in /var/opt/oracle/oratab /etc/oratab
do
[ ! -f $oratab ] && continue
IFS=:
while read SID HOME STARTUP;
do
if [ "$SID" = "*" ]
then
ORACLE_HOME=$HOME
break
fi
done < $oratab
[ -n "$ORACLE_HOME" ] && break
break
done
fi
if [ -z "$ORACLE_SID" ]
then
ORACLE_SID="orcl"
fi
if [ -z "$oracle_user" ]
then
oracle_user="oracle"
fi
if [ -z "$SHOW_ORACLE_USERS" ]
then
SHOW_ORACLE_USERS=0
else
if [ $SHOW_ORACLE_USERS -ne 1 ]
then
SHOW_ORACLE_USERS=0
fi
fi
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_HOME PATH ORACLE_SID
if [ "$1" = "autoconf" ]
then
echo yes
exit 0
fi
if [ "$1" = "config" ]
then
WARN_CRIT=`sqlplus -s ${oracle_user}/${oracle_pass}@$ORACLE_SID << EOF | \
grep -v '^$' | awk '{print $1 * 0.7 " " $1 * 0.8 }'
set pagesize 0
select value from v\\$parameter where name = 'sessions';
EOF`
echo "graph_title Oracle active connections to $ORACLE_SID"
echo "graph_args -l 0 --base 1000"
echo "graph_vlabel Connections"
echo "graph_category Oracle"
echo "graph_info Shows active oracle connections to $ORACLE_SID"
echo "graph_scale no"
if [ $SHOW_ORACLE_USERS -eq 1 ]
then
sqlplus -s ${oracle_user}/${oracle_pass}@$ORACLE_SID << EOF | \
grep -v '^$' | awk '{ print $1 ".label " $1 " active connections"
print $1 ".info " $1 " active connections"
print $1 ".type GAUGE" }; END {
print "total.label active connections"
print "total.info active connections"
print "total.type GAUGE"
}'
set pagesize 0
select username, count(username) from v\$session where username is not null group by username;
EOF
echo $WARN_CRIT| awk '{ print "total.warning " $1 "\ntotal.critical " $2 }'
else
echo "connections.label active connections"
echo "connections.info active connections"
echo "connections.type GAUGE"
echo $WARN_CRIT| awk '{ print "connections.warning " $1 "\nconnections.critical " $2 }'
fi
fi
if [ $SHOW_ORACLE_USERS -eq 1 ]
then
sqlplus -s ${oracle_user}/${oracle_pass}@$ORACLE_SID << EOF | \
grep -v '^$'|awk 'BEGIN { total=0 } {
print $1 ".value " $2
total=total+$2 } END { print "total.value " total }'
set pagesize 0
select username, count(username) from v\$session where username is not null group by username;
EOF
else
sqlplus -s ${oracle_user}/${oracle_pass}@$ORACLE_SID << EOF | grep -v '^$'|\
awk '{ print "connections.value " $1 }'
set pagesize 0
select count(username) from v\$session where username is not null;
EOF
fi
echo "max_connections.value" "`sqlplus -s ${oracle_user}/${oracle_pass}@$ORACLE_SID << EOF | \
grep -v '^$' | awk '{print $1 }'
set pagesize 0
select value from v\\$parameter where name = 'sessions';
EOF`"