Beschreibung

check_db2_health ist ein Plugin, mit dem unterschiedliche Parameter eines IBM DB2-Servers überprüft werden können.

Dokumentation

Kommandozeilenparameter

  • –database <DB-Name> Der Name der Datenbank. (Falls diese lokal katalogisiert ist, reicht dieser Parameter. Ansonsten muss man database, hostname und port angeben)
  • –hostname <hostname> Der Datenbankserver
  • –port <port> Der Port, auf dem der Server lauscht
  • –username <username> Der Datenbankuser
  • –password <password> Dessen Passwort
  • –mode <modus> Mit dem mode-Parameter teilt man dem Plugin mit, was es tun soll. Siehe Liste der möglichen Werte weiter unten.
  • –name <objektname> Hier kann die Prüfung auf ein einziges Objekt begrenzt werden. (Momentan wird dieser Parameter nur für mode=sql verwendet)
  • –name2 <string> Verwendet man –mode=sql, dann erscheint das SQL-Statement in der Ausgabe und den Performancedaten. Mit dem Parameter name2 kann man dafür einen eigenen String vergeben.
  • –warning <range> Ermittelte Werte außerhalb dieses Bereichs lösen ein WARNING aus.
  • –critical <range> Ermittelte Werte außerhalb dieses Bereichs lösen ein CRITICAL aus.
  • –environment <variable>=<wert> Damit kann man dem Script Environmentvariablen mitgeben. Mehrfachnennungen sind möglich.
  • –method <connectmethode> Mit diesem Parameter teilt man dem Plugin mit, wie es sich zur Datenbank verbinden soll. (dbi für Verbindung per DBD::DB2 (default), derzeit keine Alternativen).
  • *–units <% KB MB GB>* Die Angabe von Einheiten dient der “Verschönerung” von Ausgaben des mode=sql

Um dem Plugin mitzuteilen, welche Werte es ermitteln und prüfen soll, benutzt man die Option –mode mit verschiedenen Schlüsselwörtern.

Modi

Schlüsselwort Bedeutung Schwellwerte
connection-time Misst, wie lange Verbindungsaufbau und Login dauern 0..n Sekunden (1, 5)
connected-users Anzahl der verbundenen Benutzer 0..n (50, 100)
synchronous-read-percentage Anteil der synchronous reads (SRP) 0%..100% (90:, 80:)
asynchronous-write-percentage Anteil der asynchronous writes (AWP) 0%..100% (90:, 80:)
bufferpool-hitratio Hitratio in Buffer Pools (kann mit –name auf bestimmte Pools eingegrenzt werden) 0%..100% (98:, 90:)
bufferpool-data-hitratio dto., berücksichtigt aber nur Data Pages 0%..100% (98:, 90:)
bufferpool-index-hitratio dto., berücksichtigt aber nur Index Pages 0%..100% (98:, 90:)
index-usage Anteil der SELECTs, die einen Index benutzen 0%..100% (98:, 90:)
sort-overflows Anzahl der Sort-Overflows pro Sekunde 0..n (0.01, 0.1)
sort-overflow-percentage Anteil der Sorts, die in einem Overflow resultieren 0%..100% (5%, 10%)
deadlocks Anzahl der Deadlocks pro Sekunde 0..n (0, 1)
lock-waits Anzahl der Lock-Anforderungen pro Sekunde, die nicht befriedigt werden konnten 0..n (10, 100)
lock-waiting Zeit, die auf Locks gewartet werden muss 0%..100% (2%, 5%)
database-usage Belegter Speicherplatz in einer Datenbank 0%..100% (80%, 90%)
tablespace-usage Belegter Speicherplatz in einem Tablespace 0%..100% (90%, 98%)
tablespace-free Freier Speicherplatz in einem Tablespace. Im Gegensatz zum vorhergehenden Modus kann man hier Schwellwerte mit Hilfe der Option –units in MB und GB angeben. 0%..100% (5:, 2:)
log-utilization Belegter Speicherplatz in einem Datenbank-Log 0%..100% (80, 90)
last-backup Anzahl der Tage seit dem letzten Backup 0..n (1,2)
stale-table-runstats Tabellen, deren Statistiken seit n Tagen nicht aktualisiert wurden 0..n (7, -)
invalid-objects Anzahl fehlerhafter Objekte in der Datenbank (Trigger, Package, View, Routine, Table) 0..n (7, 99999)
duplicate-packages Packages mit gleichlautendem Namen  
capture-latency Latency der vom Capture-Prozesse verarbeiteten Daten (wertet auch –maxinactivity aus) 0..n (10, 60)
subscription-set-latency Latency der Subscription Sets (wertet auch –maxinactivity aus) 0..n (600, 1200)
sql Ergebnis eines beliebigen SQL-Befehls, der eine Zahl zurückliefert. Der Befehl selbst wird mit dem Parameter –name übergeben. Ein Label für Performncedaten kann mit dem Parameter –name2 übergeben werden. Mit dem Parameter –units kann die Ausgabe um Einheiten ergänzt werden (%, c, s, MB, GB,.. Wenn der SQL-Befehl Sonder- und Leerzeichen enthält, kann er mit dem mode encode zuerst encodiert werden. 0..n
sql-runtime Laufzeit eines beliebigen SQL-Befehls in Sekunden. Der Befehl selbst wird mit dem Parameter –name übergeben. 0..n (1, 5)
list-databases Gibt eine Liste aller Datenbanken aus  
list-tablespaces Gibt eine Liste aller Tablespaces aus  
list-bufferpools Gibt eine Liste aller Bufferpools aus  
list-subscription-sets Gibt eine Liste aller Subscription Sets aus  

Es ist zu beachten, daß Schwellwerte entsprechend den Nagios Developer Guidelines anzugeben sind. +
“10” bedeutet demzufolge “Alarm, wenn > 10” und +
“90:” bedeutet “Alarm, wenn < 90”

Vorbereitung der Datenbank

Damit sich das Plugin die benötigten Informationen aus der Datenbank holen kann, legt man einen (Betriebssystem-)Benutzer nagios (mit gleichnamiger Gruppe) an. Eventuell gibt es diesen bereits, weil der Datenbankserver mit check_nrpe oder check_by_ssh überwacht wird.

Danach schaltet man die Monitoring Switches ein:

db2inst1$ db2 update dbm cfg using dft_mon_bufpool on
db2inst1$ db2 update dbm cfg using dft_mon_lock on
db2inst1$ db2 update dbm cfg using dft_mon_timestamp on

Der nagios-Benutzer (bzw. die nagios-Gruppe. Achtung, das nagios im folgenden Select-Statement bezieht sich auf die Gruppe, nicht den User. Bei manchen Distributionen wird ein User beim Anlegen gleich in die gleichnamige Gruppe aufgenommen, bei anderen muß man dies mit usermod -G nagios nagios selber erledigen) bekommt noch die nötigen Privilegien und nach einem Neustart der Datenbank kanns dann losgehen.

db2inst1$ db2 update dbm cfg using sysmon_group nagios
db2inst1$ db2stop; db2start
db2inst1$ db2 connect to <database>
db2inst1$ db2 "call GET_DBSIZE_INFO(?,?,?,0)"
db2inst1$ db2 grant select,update on table SYSTOOLS.STMG_DBSIZE_INFO to user nagios

(GET_DBSIZE_INFO legt unter der Haube SYSTOOLS.STMG_DBSIZE_INFO an. Bei einer neuen Datenbank würde man ansonsten beim grant eine Fehlermeldung bekommen)

Bei Version 10.1 habe ich beobachtet:
Der Fehler
SQL0443N Routine “GET_DBSIZE_INFO” (specific name “”) has returned an error
SQLSTATE with diagnostic text “SQL0001
Token:/home/db2inst1/sqllib/bnd/st_admin.bnd”. SQLSTATE=38553
besagt (höchstwahrscheinlich), daß noch nie GET_DBSIZE_INFO aufgerufen wurde, daß also STMG_DBSIZE_INFO nicht existiert.

Der Fehler
error [IBM][CLI Driver][DB2/LINUXX8664] SQL0493N Routine “SYSPROC.GET_DBSIZE_INFO” (specific name “GET_DBSIZE_INFO”) has returned a date, time or timestamp value which is syntactically or numerically invalid. SQLSTATE=22007
besagt (höchstwahrscheinlich), daß STMG_DBSIZE_INFO existiert, der nagios-User aber keine Rechte hat.

Für die Version 10.5 (Achtung, 10.x wird nicht offiziell unterstützt. Betteln hilft nichts, zahlen schon. Ich bin kein DBA, ich muss mir eine Test-DB aufsetzen, rumtüfteln etc…, alles während der Arbeitszeit, denn Freizeit habe ich keine und wenn, dann beschäftige ich mich sicher nicht mit DB2) ist noch folgendes Kommando nötig:

db2inst1$ db2 grant execute on function sysproc.MON_GET_DATABASE to user nagios

Beispiele

nagsrv$ check_db2_health --mode connection-time
WARNING - 1.61 seconds to connect as DB2INST1 |  connection_time=1.6084;1;5

nagsrv$ check_db2_health --mode connected-users
OK - 3 connected users |  connected_users=3;50;100

nagsrv$ check_db2_health --mode list-databases
TOOLSDB
OK - have fun

nagsrv$ check_db2_health --mode database-usage
OK - database usage is 31.29% |  'db_toolsdb_usage'=31.29%;80;90

nagsrv$ check_db2_health --mode tablespace-usage
CRITICAL - tbs TEMPSPACE1 usage is 100.00%, tbs TBSP32KTMP0000 usage is 100.00%, tbs TBSP32K0000 usage is 100.00%, tbs USERSPACE1 usage is 5.08%, tbs SYSTOOLSPACE usage is 1.86%, tbs SYSCATSPACE usage is 80.37% |  'tbs_userspace1_usage_pct'=5.08%;90;98 'tbs_userspace1_usage'=16MB;288;313;0;320 'tbs_tempspace1_usage_pct'=100.00%;90;98 'tbs_tempspace1_usage'=0MB;0;0;0;0 'tbs_tbsp32ktmp0000_usage_pct'=100.00%;90;98 'tbs_tbsp32ktmp0000_usage'=0MB;0;0;0;0 'tbs_tbsp32k0000_usage_pct'=100.00%;90;98 'tbs_tbsp32k0000_usage'=61MB;55;60;0;61 'tbs_systoolspace_usage_pct'=1.86%;90;98 'tbs_systoolspace_usage'=0MB;28;31;0;32 'tbs_syscatspace_usage_pct'=80.37%;90;98 'tbs_syscatspace_usage'=51MB;57;62;0;64

nagsrv$ check_db2_health --mode list-tablespaces
SYSCATSPACE
SYSTOOLSPACE
TBSP32K0000
TBSP32KTMP0000
TEMPSPACE1
USERSPACE1
OK - have fun

nagsrv$ check_db2_health --mode tablespace-usage --name SYSCATSPACE
OK - tbs SYSCATSPACE usage is 80.37% |  'tbs_syscatspace_usage_pct'=80.37%;90;98 'tbs_syscatspace_usage'=51MB;57;62;0;64

nagsrv$ check_db2_health --mode tablespace-free --name SYSCATSPACE
OK - tbs SYSCATSPACE has 19.63% free space left |  'tbs_syscatspace_free_pct'=19.63%;5:;2: 'tbs_syscatspace_free'=12MB;3.20:;1.28:;0;64.00

nagsrv$ check_db2_health --mode tablespace-free --name SYSCATSPACE --units MB
OK - tbs SYSCATSPACE has 12.55MB free space left |  'tbs_syscatspace_free_pct'=19.63%;7.81:;3.12: 'tbs_syscatspace_free'=12.55MB;5.00:;2.00:;0;64.00

nagsrv$ check_db2_health --mode tablespace-free --name SYSCATSPACE --units MB --warning 15: --critical 10:
WARNING - tbs SYSCATSPACE has 12.55MB free space left |  'tbs_syscatspace_free_pct'=19.63%;23.44:;15.62: 'tbs_syscatspace_free'=12.55MB;15.00:;10.00:;0;64.00

nagsrv$ check_db2_health --mode bufferpool-hitratio
CRITICAL - bufferpool IBMDEFAULTBP hitratio is 53.60%, bufferpool BP32K0000 hitratio is 100.00% |  'bp_ibmdefaultbp_hitratio'=53.60%;98:;90: 'bp_ibmdefaultbp_hitratio_now'=100.00% 'bp_bp32k0000_hitratio'=100.00%;98:;90: 'bp_bp32k0000_hitratio_now'=100.00%

nagsrv$ check_db2_health --mode list-bufferpools
BP32K0000
IBMDEFAULTBP
OK - have fun

nagsrv$ check_db2_health --mode bufferpool-hitratio --name IBMDEFAULTBP
CRITICAL - bufferpool IBMDEFAULTBP hitratio is 53.60% |  'bp_ibmdefaultbp_hitratio'=53.60%;98:;90: 'bp_ibmdefaultbp_hitratio_now'=100.00%

nagsrv$ check_db2_health --mode bufferpool-data-hitratio --name IBMDEFAULTBP
CRITICAL - bufferpool IBMDEFAULTBP data page hitratio is 64.35% |  'bp_ibmdefaultbp_hitratio'=64.35%;98:;90: 'bp_ibmdefaultbp_hitratio_now'=100.00%

nagsrv$ check_db2_health --mode bufferpool-index-hitratio --name IBMDEFAULTBP
CRITICAL - bufferpool IBMDEFAULTBP index hitratio is 38.89% |  'bp_ibmdefaultbp_hitratio'=38.89%;98:;90: 'bp_ibmdefaultbp_hitratio_now'=100.00%

nagsrv$ check_db2_health --mode index-usage
CRITICAL - index usage is 0.71% |  index_usage=0.71%;98:;90:

nagsrv$ check_db2_health --mode synchronous-read-percentage
OK - synchronous read percentage is 100.00% |  srp=100.00%;90:;80:

nagsrv$ check_db2_health --mode asynchronous-write-percentage
CRITICAL - asynchronous write percentage is 0.00% |  awp=0.00%;90:;80:
nagsrv$ check_db2_health --mode deadlocks
OK - 0.000000 deadlocs / sec |  deadlocks_per_sec=0.000000;0;1

nagsrv$ check_db2_health --mode lock-waits
OK - 0.000000 lock waits / sec |  lock_waits_per_sec=0.000000;10;100

nagsrv$ check_db2_health --mode lock-waiting
OK - 0.000000% of the time was spent waiting for locks |  lock_percent_waiting=0.000000%;2;5

Verwendung von Environmentvariablen

Man kann die Parameter –hostname, –username, –password und –port ganz weglassen, wenn man die entsprechenden Daten in Environmentvariablen bereitstellt. Seit der Version 3.x kann man Servicedefinitionen in Nagios um eigene Attribute (custom object variables) erweitern. Diese tauchen dann bei der Ausführung des Checkcommands im Environment auf.

Die Environmentvariablen heissen:

  • NAGIOS__SERVICEDB2_HOST (_db2_host in der Servicedefinition)
  • NAGIOS__SERVICEDB2_USER (_db2_user in der Servicedefinition)
  • NAGIOS__SERVICEDB2_PASS (_db2_pass in der Servicedefinition)
  • NAGIOS__SERVICEDB2_PORT (_db2_port in der Servicedefinition)
  • NAGIOS__SERVICEDB2_DATABASE (_db2_database in der Servicedefinition)

Installation

Dieses Plugin setzt die Installation des Perl-Moduls DBD::DB2 voraus.

Nach dem Auspacken des Archivs wird ./configure aufgerufen. Mit ./configure –help können Optionen angezeigt werden, die für den Bau des Plugins einige Defaulteinstellungen liefern.

  • –prefix=BASEDIRECTORY Geben Sie hier das Verzeichnis an, in dem check_db2_health liegen soll. (default: /usr/local/nagios)
  • –with-nagios-user=SOMEUSER Dieser User wird der Eigentümer der Datei check_db2_health sein. (default: nagios)
  • –with-nagios-group=SOMEGROUP Die Gruppe des check_db2_health Binaries. (default: nagios)
  • –with-perl=PATHTOPERL Geben sie hier den Pfad zum Perl-Interpreter an, den sie benutzen möchten. (default: perl im PATH)

Download

check_db2_health-1.1.3.tar.gz

Changelog

  • 1.1.3 - 2021-07-09
    add –nosms
  • 1.1.2.2 - 2018-03-29
    fix a bug in database-usage where sysdummy1 returns an empty result
  • 1.1.2.1 - 2018-03-26
    add
    –nutzediedrecksalteversionwegengroberunfaehigkeitderadministratorenaffen
    and
    –nddavwgudaa
  • 1.1.2 - 2018-03-11
    enhance database-usage, don’t use SYSTOOLS.STMG_DBSIZE_INFO
  • 1.1.1.4 - 2017-10-25
    use sysibmadm.applications for connected-users also for newer db2 versions
  • 1.1.1.3 - 2017-10-14
    catch sql errors and return them as unknown
  • 1.1.1.2 - 2016-08-19
    bugfix in last-backup (Thanks Volker Maibaum)
  • 1.1.1.1 - 2015-09-09
    bugfix in bufferpool (perl-error)
  • 1.1.1 -2015-08-10
    fix bufferpool-modes for 10.x (Thanks Phlippe)
  • 1.1 - 2015-04-23
    add rfc3986-encoded passwords
  • 1.0.9.2 - 2014-08-21
    fix mode last-backup again
    report sql/permission-errors
  • 1.0.9.1 - 2014-08-19
    fix mode last-backup
  • 1.0.9 - 2014-08-18
    fix mode last-backup for 10.x
  • 1.0.8 - 2014-07-07
    fix mode dms-tablespace-settings
    add mode application-usage
  • 1.0.7 - 2014-04-14
    add mode dms-tablespace-usage/free which checks only non-automatic dms
    tablespaces
    add mode dms-tablespace-settings which checks automatic dms tablespaces’
    auto/increase settings
    bugfix in connected-users, db2-internal users are not counted any more
  • 1.0.6.3 - 2014-04-01
    implement –negate old_level=new_level
    output also ok-messages for my-modes
  • 1.0.6.2 - 2014-03-26
    fix perfdata in bufferpool-usage&lookback
    thresholds can now be floating point numbers
  • 1.0.6.1 - 2013-01-01
    fix for newer perl versions
  • 1.0.6 - 2012-11-29
    implemented all sorts of thresholds
    add mode sql-runtime
  • 1.0.5.3 - 2012-11-29
    fixed a bug in tablespace-usage/free (null-values in fs_total_size_kb/fs_used_size_kb of sms tbsp_type mean: unused)
  • 1.0.5.2 - 2012-05-16
    connected-users no longer counts internal db2 processes (appl_name like db2fw%)
  • 1.0.5.1 - 2012-02-28
    exceptions in mode duplicate-packages are possible (–name=’^(?!(DUPPATTERN$)|(DUPPATTERN2$))’ –regexp)
  • 1.0.5 - 2012-02-23
    add capture-latency, subscription-set-latency
    add invalid-objects
    add duplicate-packages
    bugfix in timeout-alarm handling under windows
  • 1.0.4 - 2011-09-29
    fix a bug in save_state with capital letters in statefilesdir
    single ticks around the –name argument under Windows CMD will be removed automatically
    1.0.3.3 - 2011-07-01
    change stale-table-runstats so there are less unnecessary alerts (Thanks Niko v. Koeckritz)
  • 1.0.3.2 - 2011-06-03
    sites in an OMD (http://omdistro.org) environment have now private statefile directories
  • 1.0.3.1 - 2011-01-03
    bugfix in –mode sql (numeric vs. regexp result)
  • 1.0.3 - 2010-12-20
    fixed a bug in connected-users. Thanks Alexander Titze
    mode sql can now have a non-numerical output which is compared to a string/regexp
    new parameter –dbthresholds
    new mode report can be used to output only the bad news (short,long,html)
  • 1.0.2 - 2010-09-29
    bufferpool-hitratio now uses hitratio_now to calculate the exitcode when –lookback is used.
    add mode last-backup
    add mode sort-overflows
    add mode sort-overflow-percentage (Thanks Birger Schmidt, Niko v. Koeckritz)
    index-usage takes delete- and insert-statements into account
  • 1.0.1 - 2010-06-10
    bugfix for connected-users (only status CONNECTED was counted, but there are more). Thanks Niko
    update in the README file. You need to grant select/update on SYSTOOLS.STMG_DBSIZE_INFO. Thanks Niko
  • 1.0 - 2009-04-20

Gerhard Laußer
Check_db2_health wird unter der GNU General Public License zur Verfügung gestellt. GPL

Autor

Gerhard Laußer (mailto:gerhard.lausser@consol.de[gerhard.lausser@consol.de]) beantwortet gerne Fragen zu diesem Plugin. Genauso gerne stellt er die Antworten in Rechnung.