Module: check_mk
Branch: master
Commit: 9db80eb331300317174fa8b5fb38e083b33d0d0d
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=9db80eb3313003…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Thu Jan 27 12:44:12 2011 +0100
mk_oracle: new oracle agent plugin and first check
---
ChangeLog | 5 +++-
agents/plugins/mk_oracle | 64 +++++++++++++++++++++++++++++++++++++++++++++
agents/plugins/sqlplus.sh | 22 +++++++++++++++
checkman/oracle_sessions | 42 +++++++++++++++++++++++++++++
checks/oracle_sessions | 52 ++++++++++++++++++++++++++++++++++++
5 files changed, 184 insertions(+), 1 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 73bcea5..e6dd36f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -19,7 +19,10 @@
* hpux_serviceguard: new check for monitoring HP-UX Serviceguard
* drbd: Fixed var typo which prevented inventory of drbd general check
(Thanks to Andreas Behler)
-
+ * mk_oracle: new agent plugin for monitoring ORACLE (currently only
+ on Linux, but easily portable to other Unices)
+ * oracle_sessions: new check for monitoring the current number of active
+ database sessions.
1.1.9i5:
Multisite:
diff --git a/agents/plugins/mk_oracle b/agents/plugins/mk_oracle
new file mode 100644
index 0000000..3f080b0
--- /dev/null
+++ b/agents/plugins/mk_oracle
@@ -0,0 +1,64 @@
+#!/bin/sh
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2010 mk(a)mathias-kettner.de |
+# +------------------------------------------------------------------+
+#
+# This file is part of Check_MK.
+# The official homepage is at http://mathias-kettner.de/check_mk.
+#
+# check_mk is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation in version 2. check_mk is distributed
+# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
+# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more de-
+# ails. You should have received a copy of the GNU General Public
+# License along with GNU Make; see the file COPYING. If not, write
+# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301 USA.
+
+# Check_MK agent plugin for monitoring ORACLE databases
+
+# Get list of all running databases
+SIDS=$(UNIX95=true ps ax -o args | sed -n '/^ora_pmon_\([^ ]*\)/s//\1/p')
+if [ -z "$SIDS" ] ; then exit 0 ; fi
+
+# Make an sqlplus query, clean up the result and add an artificial
+# column with the SID at the front of each line. If the query fails,
+# no output at all is made.
+function sqlplus ()
+{
+ OUTPUT=$({ echo 'set pages 0' ; echo 'set lines 8000' ; cat ; } | $MK_CONFDIR/sqlplus.sh $1) || return 1
+ echo "${OUTPUT}" | sed -e 's/[[:space:]]\+/ /g' -e '/^[[:space:]]*$/d' -e "s/^/$1 /"
+}
+
+# Sessions
+echo '<<<oracle_sessions>>>'
+for SID in $SIDS
+do
+ echo "select count(*) from v"'$'"session where status = 'ACTIVE';" | sqlplus "$SID"
+done
+
+echo '<<<oracle_logswitches>>>'
+for SID in $SIDS
+do
+ sqlplus "$SID" <<EOF
+select count(*) from v\$loghist where first_time > sysdate - 1/24;
+EOF
+done
+
+# Tablespaces
+echo '<<<oracle_tablespaces>>>'
+for SID in $SIDS
+do
+ sqlplus "$SID" <<EOF
+select f.file_name, f.tablespace_name, f.status, f.AUTOEXTENSIBLE, f.blocks, f.maxblocks, f.USER_BLOCKS, f.INCREMENT_BY, f.ONLINE_STATUS, t.BLOCK_SIZE, t.status from dba_data_files f, dba_tablespaces t where f.tablespace_name = t.tablespace_name;
+EOF
+done
+
diff --git a/agents/plugins/sqlplus.sh b/agents/plugins/sqlplus.sh
new file mode 100755
index 0000000..929eab6
--- /dev/null
+++ b/agents/plugins/sqlplus.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# This script is called by the Check_MK ORACLE plugin in order to
+# execute an SQL query.
+
+# It is your task to adapt this script so that the ORACLE environment
+# is setup and the correct user chosen to execute sqlplus.
+
+# The script we get the query on stdin and shall output the
+# result on stdout. Error messages goes to stderr.
+
+ORACLE_SID=$1
+if [ -z "$ORACLE_SID" ] ; then
+ echo "Usage: $0 ORACLE_SID" >&2
+ exit 1
+fi
+
+su - nagios -c "
+ORACLE_SID=$ORACLE_SID
+ORAENV_ASK=NO
+. /usr/local/bin/oraenv
+sqlplus -s /"
diff --git a/checkman/oracle_sessions b/checkman/oracle_sessions
new file mode 100644
index 0000000..5f2571d
--- /dev/null
+++ b/checkman/oracle_sessions
@@ -0,0 +1,42 @@
+title: Check number of active sessions in ORACLE database
+agents: linux
+author: Mathias Kettner <mk(a)mathias-kettner.de>
+license: GPL
+distribution: check_mk
+description:
+ This check monitors the number of active sessions in an
+ ORACLE database. You can set warn/crit levels.
+
+ This check needs the Check_MK {mk_oracle}-plugin installed in
+ the agent. Please refer to the online documentation
+ for how to install that plugin.
+
+item:
+ The SID of the database (as appearing in the process
+ name of the pmon_... process).
+
+examples:
+ # Set global default values to 20 sessions for
+ # warning and 100 sessions for critical
+ oracle_sessions_default_levels = (20, 100)
+
+ # Set higher levels for productive systems
+ # (having the host tag 'prod')
+ check_parameters += [
+ ( (80, 160), [ 'prod' ], ALL_HOSTS, [ "ORA .* sessions" ])
+ ]
+
+perfdata:
+ One value: the current number of active sessions.
+
+inventory:
+ One separate check for each database found running will
+ be created.
+
+[parameters]
+warning(int): The number of active sessions triggering a warning
+critical(int): The number of active sessions making the check critical
+
+[configuration]
+oracle_sessions_default_levels(int, int): Global default levels used for all checks which have no specific configuration. This is preset to {(50, 100)}.
+
diff --git a/checks/oracle_sessions b/checks/oracle_sessions
new file mode 100644
index 0000000..706f211
--- /dev/null
+++ b/checks/oracle_sessions
@@ -0,0 +1,52 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2010 mk(a)mathias-kettner.de |
+# +------------------------------------------------------------------+
+#
+# This file is part of Check_MK.
+# The official homepage is at http://mathias-kettner.de/check_mk.
+#
+# check_mk is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation in version 2. check_mk is distributed
+# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
+# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more de-
+# ails. You should have received a copy of the GNU General Public
+# License along with GNU Make; see the file COPYING. If not, write
+# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301 USA.
+
+# <<<oracle_sessions>>>
+# pengt 15
+# hirni 22
+
+oracle_sessions_default_levels = (50, 100)
+
+def inventory_oracle_sessions(checkname, info):
+ return [ (line[0], "oracle_sessions_default_levels") for line in info if len(line) >= 2 ]
+
+def check_oracle_sessions(item, params, info):
+ for line in info:
+ if line[0] == item:
+ warn, crit = params
+ sessions = int(line[1])
+ infotext = " - %d active sessions" % sessions
+ perfdata = [("sessions", sessions, warn, crit)]
+ if sessions >= crit:
+ return (2, "CRIT" + infotext, perfdata)
+ elif sessions >= warn:
+ return (1, "WARN" + infotext, perfdata)
+ else:
+ return (0, "OK" + infotext, perfdata)
+ return (2, "UNKNOWN - Database not existant or not running")
+
+check_info['oracle_sessions'] = (check_oracle_sessions, "ORA %s Sessions", 1, inventory_oracle_sessions )
+
Module: check_mk
Branch: master
Commit: 915acbcd887807cab7467a34c97ce1aa90ea1f77
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=915acbcd887807…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Thu Jan 27 17:03:54 2011 +0100
Updated bug entries
---
.bugs/111 | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/.bugs/111 b/.bugs/111
new file mode 100644
index 0000000..117e19c
--- /dev/null
+++ b/.bugs/111
@@ -0,0 +1,11 @@
+Title: View editor does not save tool tips (in group header)
+Component: multisite
+Benefit: 2
+State: open
+Cost: 1
+Date: 2011-01-27 17:02:58
+Class: bug
+
+When you add tooltips to a group column in the view editor,
+the tooltip is not saved. This might appear at normal columns
+also, but is not tested.
Module: check_mk
Branch: master
Commit: 202144b4532742aae36ef6551e5d4892ccff076c
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=202144b4532742…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Thu Jan 27 14:21:09 2011 +0100
oracle_logswitches: new check for oracle logswitches
---
ChangeLog | 2 +
checkman/oracle_logswitches | 41 +++++++++++++++++++++++++++++++++
checks/oracle_logswitches | 53 +++++++++++++++++++++++++++++++++++++++++++
checks/oracle_sessions | 4 +-
4 files changed, 98 insertions(+), 2 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index e6dd36f..2f81b6b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -23,6 +23,8 @@
on Linux, but easily portable to other Unices)
* oracle_sessions: new check for monitoring the current number of active
database sessions.
+ * oracle_logswitches: new check for monitoring the number of logswitches
+ of an ORACLE instances in the last 60 minutes.
1.1.9i5:
Multisite:
diff --git a/checkman/oracle_logswitches b/checkman/oracle_logswitches
new file mode 100644
index 0000000..77623db
--- /dev/null
+++ b/checkman/oracle_logswitches
@@ -0,0 +1,41 @@
+title: Check log switch activity of ORACLE database
+agents: linux
+author: Mathias Kettner <mk(a)mathias-kettner.de>
+license: GPL
+distribution: check_mk
+description:
+ This check monitors the number of log switches of an ORACLE
+ database instance in the last 60 minutes. You can set levels
+ for upper and lower bounds.
+
+ This check needs the Check_MK {mk_oracle}-plugin installed in
+ the agent. Please refer to the online documentation
+ for how to install that plugin.
+
+item:
+ The SID of the database (as appearing in the process
+ name of the pmon_... process).
+
+examples:
+ # Set global default values. Make it critical if there
+ # is only 1 or 0 logswitches or 100 or more in the last
+ # hour.
+ oracle_logswitches_default_levels = (1, 3, 30 100)
+
+perfdata:
+ One value: the number of log switches in the last 60 minutes.
+
+inventory:
+ One separate check for each database found running will
+ be created.
+
+[parameters]
+lo_crit(int): The check will get critical if only that many (or fewer) log switches appeared in the
+ last 60 minutes. Set this to {-1} in order to disable this bound.
+lo_warn(int): Lower warning level.
+hi_warn(int): Make the check warn if there were at least that many log switches in the last 60 minutes.
+hi_crit(int): Upper critical level.
+
+[configuration]
+oracle_logswitches_default_levels(int, int, int, int): Global default levels used for all checks which have no specific configuration. This is preset to {(-1, -1, 50, 100)}.
+
diff --git a/checks/oracle_logswitches b/checks/oracle_logswitches
new file mode 100644
index 0000000..a1d524d
--- /dev/null
+++ b/checks/oracle_logswitches
@@ -0,0 +1,53 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2010 mk(a)mathias-kettner.de |
+# +------------------------------------------------------------------+
+#
+# This file is part of Check_MK.
+# The official homepage is at http://mathias-kettner.de/check_mk.
+#
+# check_mk is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation in version 2. check_mk is distributed
+# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
+# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more de-
+# ails. You should have received a copy of the GNU General Public
+# License along with GNU Make; see the file COPYING. If not, write
+# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301 USA.
+
+# <<<oracle_logswitches>>>
+# pengt 15
+# hirni 22
+
+oracle_logswitches_default_levels = (-1, -1, 50, 100)
+
+def inventory_oracle_logswitches(checkname, info):
+ return [ (line[0], "oracle_logswitches_default_levels") for line in info if len(line) >= 2 ]
+
+def check_oracle_logswitches(item, params, info):
+ for line in info:
+ if line[0] == item:
+ locrit, lowarn, warn, crit = params
+ logswitches = int(line[1])
+ infotext = " - %d log switches in the last 60 minutes (levels at %d/%d .. %d/%d)" \
+ % (logswitches, locrit, lowarn, warn, crit)
+ perfdata = [("logswitches", logswitches, warn, crit)]
+ if logswitches >= crit or logswitches <= locrit:
+ return (2, "CRIT" + infotext, perfdata)
+ elif logswitches >= warn or logswitches <= lowarn:
+ return (1, "WARN" + infotext, perfdata)
+ else:
+ return (0, "OK" + infotext, perfdata)
+ return (2, "UNKNOWN - Database not existing or not running")
+
+check_info['oracle_logswitches'] = (check_oracle_logswitches, "ORA %s Logswitches", 1, inventory_oracle_logswitches )
+
diff --git a/checks/oracle_sessions b/checks/oracle_sessions
index 706f211..d71a67d 100644
--- a/checks/oracle_sessions
+++ b/checks/oracle_sessions
@@ -38,7 +38,7 @@ def check_oracle_sessions(item, params, info):
if line[0] == item:
warn, crit = params
sessions = int(line[1])
- infotext = " - %d active sessions" % sessions
+ infotext = " - %d active sessions (levels at %d/%d)" % (sessions, warn, crit)
perfdata = [("sessions", sessions, warn, crit)]
if sessions >= crit:
return (2, "CRIT" + infotext, perfdata)
@@ -46,7 +46,7 @@ def check_oracle_sessions(item, params, info):
return (1, "WARN" + infotext, perfdata)
else:
return (0, "OK" + infotext, perfdata)
- return (2, "UNKNOWN - Database not existant or not running")
+ return (2, "UNKNOWN - Database not existing or not running")
check_info['oracle_sessions'] = (check_oracle_sessions, "ORA %s Sessions", 1, inventory_oracle_sessions )
Module: check_mk
Branch: master
Commit: 833a92f16783182df8653d6bb800eec6062aa29a
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=833a92f1678318…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Fri Jan 28 09:23:21 2011 +0100
new PNP template for oracle_sessions
---
pnp-templates/check_mk-oracle_sessions.php | 37 ++++++++++++++++++++++++++++
1 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/pnp-templates/check_mk-oracle_sessions.php b/pnp-templates/check_mk-oracle_sessions.php
new file mode 100644
index 0000000..112b3c7
--- /dev/null
+++ b/pnp-templates/check_mk-oracle_sessions.php
@@ -0,0 +1,37 @@
+<?php
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2010 mk(a)mathias-kettner.de |
+# +------------------------------------------------------------------+
+#
+# This file is part of Check_MK.
+# The official homepage is at http://mathias-kettner.de/check_mk.
+#
+# check_mk is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation in version 2. check_mk is distributed
+# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
+# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more de-
+# ails. You should have received a copy of the GNU General Public
+# License along with GNU Make; see the file COPYING. If not, write
+# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301 USA.
+
+$title = str_replace("_", " ", $servicedesc);
+$opt[1] = "--vertical-label 'active sessions' -l0 -u $CRIT[1] --title \"$title\" ";
+
+$def[1] = "DEF:sessions=$RRDFILE[1]:$DS[1]:MAX ";
+$def[1] .= "AREA:sessions#00ff48: ";
+$def[1] .= "LINE:sessions#008f38: ";
+$def[1] .= "GPRINT:sessions:LAST:\"last\: %3.0lf\" ";
+$def[1] .= "GPRINT:sessions:AVERAGE:\"avg\: %3.0lf\" ";
+$def[1] .= "GPRINT:sessions:MAX:\"max\: %3.0lf\" ";
+$def[1] .= "HRULE:$WARN[1]#ffcf00:\"Warning at $WARN[1]\" ";
+$def[1] .= "HRULE:$CRIT[1]#ff0000:\"Critical at $CRIT[1]\" ";
+?>