Ich bin gerade dabei, check_mysql_health umzuschreiben und aufzuräumen. Welchen Algorithmus für –mode querycache-hitrate soll ich künftig verwenden? Da ich persönlich hier völlig neutral bin, gibt es keine Diskussion, sondern es zählen ausschließlich die abgegebenen Stimmen. Die Umfrage geht bis 17.7.<iframe width="250" height="370" src="http://files.quizsnack.com/iframe/embed.html?hash=q7n82kud&width=250&height=370&wmode=transparent&t=1468480848&width=250&height=370" frameborder="0" scrolling="no" allowtransparency="true" seamless="seamless"></iframe>

Beschreibung

check_mysql_health ist ein Plugin, mit dem unterschiedliche Parameter einer MySQL-Datenbank überprüft werden können.

Dokumentation

Kommandozeilenparameter

  • --hostname
    Der Datenbankserver, der überwacht werden soll. Im Falle von “localhost” kann dieser Parameter weggelassen werden.
  • --username
    Der Datenbankuser.
  • --password
    Dessen Passwort.
  • --database
    Die Datenbank, mit der sich das Plugin verbinden soll. Default: information_schema.
  • --mode
    Mit dem mode-Parameter teilt man dem Plugin mit, was es tun soll. Siehe Liste der möglichen Werte weiter unten.
  • --name
    Hier kann die Prüfung auf ein einziges Objekt begrenzt werden. (Momentan wird dieser Parameter nur für mode=sql verwendet)
  • --name2
    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
    Ermittelte Werte außerhalb dieses Bereichs lösen ein WARNING aus.
  • --critical
    Ermittelte Werte außerhalb dieses Bereichs lösen ein CRITICAL aus.
  • --environment =
    Damit kann man dem Script Environmentvariablen mitgeben. Mehrfachnennungen sind möglich.
  • --method
    Mit diesem Parameter teilt man dem Plugin mit, wie es sich zur Datenbank verbinden soll. (dbi für Verbindung per DBD::mysql (default), mysql für Verbindung per mysql-Aufruf).
  • --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.

Schlüsselwort Beschreibung Schwellwerte
connection-time Misst, wie lange Verbindungsaufbau und Login dauern 0..n Sekunden (1, 5)
uptime Die Zeit seit dem DB-Start (erkennt DB-Crash+Restart) 0..n Sekunden (10:, 5: Minuten)
threads-connected Anzahl der offenen Verbindungen 1..n (10, 20)
threadcache-hitrate Hitrate im Thread-Cache 0%..100% (90:, 80:)
q[uery]cache-hitrate Hitrate im Query Cache 0%..100% (90:, 80:)
q[uery]cache-lowmem-prunes Verdrängungen aus dem Query Cache wegen Speicherknappheit n/sec (1, 10)
[myisam-]keycache-hitrate Hitrate im Myisam Key Cache 0%..100% (99:, 95:)
[innodb-]bufferpool-hitrate Hitrate im InnoDB Buffer Pool 0%..100% (99:, 95:)
[innodb-]bufferpool-wait-free Rate der InnoDB Buffer Pool Waits 0..n/sec (1, 10)
[innodb-]log-waits Rate der InnoDB Log Waits 0..n/sec (1, 10)
tablecache-hitrate Hitrate im Table-Cache 0%..100% (99:, 95:)
table-lock-contention Rate fehlgeschlagener Tabellensperren 0%..100% (1, 2)
index-usage Anteil der Index-Nutzung (im Ggs. zu Full Table Scans) 0%..100% (90:, 80:)
tmp-disk-tables Prozent der temporären Tabellen, die auf Platte anstatt im Speicher angelegt wurden 0%..100% (25, 50)
slow-queries Rate von Queries, die als “slow” erkannt wurden 0..n/sec (0.1, 1)
long-running-procs Anzahl der Prozesse, die schon länger als 1 Minute laufen 0..n (10, 20)
slave-lag Verzögerung zwischen Master und Slave 0..n Sekunden
slave-io-running Prüft, ob der IO-Thread der Slave-DB läuft  
slave-sql-running Prüft, ob der SQL-Thread der Slave-DB läuft  
sql Ergebnis eines beliebigen SQL-Befehls, der eine Zahl zurückliefert. Der Befehl selbst wird mit dem Parameter –name übergeben. Ein Label für die Performancedaten 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
open-files Anzahl der geöffneten Dateien (Als Prozent der Obergrenze) 0%..100% (80, 95)
encode Liest die Standardeingabe und gibt einen encodierten String aus.  
cluster-ndb-running Prüft, ob alle Knoten im Cluster laufen.  

Manche Metriken, wie z.b. query-cache-hitrate werden aus kontinuierlich wachsenden Zählerständen errechnet. Dabei wird der jeweilige Zuwachs seit dem letzten Lauf des Plugins genommen. Damit die entstehenden graphen etwas geglättet werden bzw. kurzzeitige Peaks nicht zu einem WARNING/CRITICAL-Zustand führen, empfiehlt es sich, den Parameter --lookback zu verwenden. Dieser nimmt ein Argument, welches die Anzahl der Sekunden ist und angibt, wie weit in der Vergangenheit der Referenzwert für die Differenzbildung liegen soll. Schreibt man beispielsweise --mode qcache-hitrate --lookback 1800, so fliessen nicht die Zählererhöhungen des letzten Check-Intervals in die Berechnung ein, sondern die der letzten halben Stunde.
Die Verwendung von --lookback wird empfohlen, jedoch sollte man mindestens eine halbe Stunde (--lookback 1800) angeben, da der kurzfristige Wert einer starken Schwankung unterliegen kann und damit häufige gelb/rot-Zustände auslösen würde.

Da steht jetzt dann, welche lookback-Werte für welche Modes relevant bzw. vorbelegt sind, aber jetzt ist Freitag 20:30 und kaltes Bier wartet, also mach ich die Tabelle nicht mehr fertig. (betrifft eh nur die 3.x-Tests)

Schlüsselwort Default-Lookback
connection-time -
uptime -
threads-connected -
threadcache-hitrate 3600
q[uery]cache-hitrate 3600
q[uery]cache-lowmem-prunes  
[myisam-]keycache-hitrate  
[innodb-]bufferpool-hitrate 3600
[innodb-]bufferpool-wait-free  
[innodb-]log-waits  
tablecache-hitrate gauges
table-lock-contention  
index-usage  
tmp-disk-tables  
slow-queries  
long-running-procs  
slave-lag  
slave-io-running  
slave-sql-running  
sql  
open-files  
encode  
cluster-ndb-running  

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”

Verbindung zur Datenbank

Anlegen eines Datenbankbenutzers

Damit sich das Plugin die benötigten Informationen aus der Datenbank holen kann, muss ein Benutzer angelegt werden, der über folgende Berechtigungen verfügt:

grant usage on *.* to 'nagios'@'nagiosserver' identified by 'nagiospassword'

Connectionstring

Zur Anmeldung an der Datenbank benutzt man die Parameter --username und --password. Die zu kontaktierende Datenbank kann noch weiter spezifiziert werden durch Verwendung von --hostname und --socket oder --port.

Verwendung von Environmentvariablen

Man kann die Parameter --hostname, --username und --password sowie --socket 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__SERVICEMYSQL_HOST (_mysql_host in der Servicedefinition)
  • NAGIOS__SERVICEMYSQL_USER (_mysql_user in der Servicedefinition)
  • NAGIOS__SERVICEMYSQL_PASS (_mysql_pass in der Servicedefinition)
  • NAGIOS__SERVICEMYSQL_PORT (_mysql_port in der Servicedefinition)
  • NAGIOS__SERVICEMYSQL_SOCK (_mysql_sock in der Servicedefinition)

Beispiele

nagios$ check_mysql_health --hostname mydb3 --username nagios --password nagios --mode connection-time OK - 0.03 seconds to connect as nagios | connection_time=0.0337s;1;5
nagios$ check_oracle_health --mode=connection-time OK - 0.17 seconds to connect | connection_time=0.1740;1;5
nagios$ check_mysql_health --mode querycache-hitrate CRITICAL - query cache hitrate 70.97% | qcache_hitrate=70.97%;90:;80: qcache_hitrate_now=72.25% selects_per_sec=270.00
nagios$ check_mysql_health --mode querycache-hitrate --warning 80: --critical 70: WARNING - query cache hitrate 70.82% | qcache_hitrate=70.82%;80:;70: qcache_hitrate_now=62.82% selects_per_sec=420.17
nagios$ check_mysql_health --mode sql --name 'select 111 from dual' CRITICAL - select 111 from dual: 111 | 'select 111 from dual'=111;1;5
nagios$ echo 'select 111 from dual' | check_mysql_health --mode encode select%20111%20from%20dual
nagios$ check_mysql_health --mode sql --name select%20111%20from%20dual CRITICAL - select 111 from dual: 111 | 'select 111 from dual'=111;1;5
nagios$ check_mysql_health --mode sql --name select%20111%20from%20dual --name2 myval CRITICAL - myval: 111 | 'myval'=111;1;5
nagios$ check_mysql_health --mode sql --name select%20111%20from%20dual --name2 myval --units GB CRITICAL - myval: 111GB | 'myval'=111GB;1;5
nagios$ check_mysql_health --mode sql --name select%20111%20from%20dual --name2 myval --units GB --warning 100 --critical 110 CRITICAL - myval: 111GB | 'myval'=111GB;100;110

Installation

Dieses Plugin setzt die Installation eines MySQL-Client-Pakets voraus. Die Installation der Perl-Module DBI und DBD::mysql ist wünschenswert, aber nicht zwingend.

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_mysql_health liegen soll. (default: /usr/local/nagios)

  • --with-nagios-user=SOMEUSER
    Dieser User wird der Eigentümer der Datei check_mysql_health sein. (default: nagios)

  • --with-nagios-group=SOMEGROUP
    Die Gruppe des check_mysql_health Plugins. (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_mysql_health-2.2.2.tar.gz

/Beta, Preview, Test/
check_mysql_health-3.0.0.5.tar.gz

Changelog

  • 2.2.2 2016-05-13
    handle permission/syntax problems for mode sql
  • 2.2.1 2015-08-18
    fix the autoconf m4, so the debian-builds don’t fail (thanks Jan Wagner)
  • 2.2 2015-04-23
    add rfc3986-encoded passwords
  • 2.1.9.2 2014-12-22
    bugfix in InnoDB initialization & versions > 5.6.1 (Thanks Jorg Veit)
  • 2.1.9.1 2014-06-12
    add connections_aborted, open_files to the pnp template (Thanks Simon Meggle)
  • 2.1.9 2014-06-12
    bugfix in pnp template (Thanks Simon Meggle)
    bugfix in qcache calculation (Thanks lermit)
  • 2.1.8.4 2014-04-01
    implement –negate old_level=new_level
    allow floating point numbers in thresholds
  • 2.1.8.3 2012-10-15
    output also ok-messages for my-modes
  • 2.1.8.2 2012-08-08
    bugfix in querycache-hitrate (div by 0 after db restart). (Thanks Gianluca Varisco)
  • 2.1.8.1 2012-01-21
    bugfix in timeout-alarm handling under windows
    fix warnings for newest perl versions
  • 2.1.8 2011-09-29
    new parameters –mycnf and –mycnfgroup
    single ticks around the –name argument under Windows CMD will be removed auto
    matically
  • 2.1.7 2011-08-23
    innodb modes now detect problems with the innodb engine
  • 2.1.6 2011-08-12
    fix a bug with statefilesdir and capital letters
    add –labelformat so that groundwork no longer complains (max label length is 19 characters)
  • 2.1.5.2 2011-06-03
    sites in an OMD (http://omdistro.org) environment have now private statefile directories
  • 2.1.5.1 2011-01-03
    bugfix in –mode sql (numeric vs. regexp result)
  • 2.1.5 2010-12-20
    fixed a division by zero bug in index-usage (Thanks Wiltmut Gerdes)
    fixed a severe bug when loading dynamic extensions (Thanks Ralph Schneider)
    added mode table-fragmentation
    fixed a bug in table-lock-contention (thanks mayukmok00)
    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)
  • 2.1.4 2010-10-02
    added modes threads-created, threads-running, threads-cached
    added connects-aborted, clients-aborted
  • 2.1.3 2010-09-29
    added mode open-files
    fix a bug in the pnp template
    add extra-opts
  • 2.1.2 2010-06-10
    changed statements for 4.x compatibility (show variables like) (Thanks Florian)
  • 2.1.1 2010-03-30
    added more tracing (touch /tmp/check_mysql_health.trace to watch)
    fixed a bug in master-slave modes, so it outputs a more meaningful error message (Thanks Will Oberman)
    fixed a typo (Thanks Larsen)
  • 2.1
    parameter –lookback uses custom intervals for _now-values
  • 2.0.5 2009-09-21
    fixed another bug in master-slave modes. (Thanks Thomas Mueller)
    fixed a bug in bufferpool-wait-free. (Thanks Matthias Flacke)
    fixed a bug in the PNP template. (Thanks Matthias Flacke)
    slave-lag now handles failed io threads. (Thanks Greg)
    fixed a bug in connections with non-standard sockets (Thanks Stephan Huiser)
  • 2.0.4
    fixed a bug in –mode cluster-ndbd-running where dead api nodes were overseen
    fixed a bug in master-slave modes. (Thanks Arkadiusz Miskiewicz)
  • 2.0.3
    fixed a bug with 0 warning/critical
    fixed a bug in long-running-procs (affects only mysql 5.0 and below). (Thanks Bodo Schulz)
  • 2.0.2
    $NAGIOS__HOSTMYSQL_HOST etc. is now possible
  • 2.0.1 2009-03-09
    fixed a (harmless) bug which caused uninitialized-messages. (Thanks John Alberts & Thomas Borger)
    enabled password-less login to localhost.
  • 2.0 2009-03-06
    This is the first release of the new plugin check_mysql_health
    It replaces check_mysql_perf which is a nightmare to install
    It is written in Perl
    It can use either DBD::mysql, the mysql command or DBD::SQLrelay
    It can monitor mysql clusters (the ndb stuff)
    It can execute custom sql statements

Gerhard Laußer

Check_mysql_health wird unter der GNU General Public License zur Verfügung gestellt. GPL

Autor

Gerhard Laußer (gerhard.lausser@consol.de) beantwortet gerne Fragen zu diesem Plugin. Zwei Minuten sind gratis. Danach wird’s schweineteuer. Das ist wie im Supermarkt. Ein, zwei Probierhäppchen gibts umsonst. Leute, die meinen, das ganze Tablett leerfressen zu müssen, machen mich grantig.

Übersetzung

Tausend Dank an Christian Lauf, der die englische Übersetzung dieser Seite erstellt hat.