mirror of
https://github.com/munin-monitoring/contrib.git
synced 2025-07-21 10:39:53 +00:00
Even though "licenced" is proper (British English) spelling, "spellcheck" complains about it (probably being focused on American English). The change should just clean up the output of the spelling linter and should not be interpreted as a language preference. Sorry, (British) folks!
153 lines
3.9 KiB
Bash
Executable file
153 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)
|
|
#
|
|
# Licensed 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 db"
|
|
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`"
|