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>
check_mysql_health ist ein Plugin, mit dem unterschiedliche Parameter einer MySQL-Datenbank überprüft werden können.
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.
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'
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.
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$ 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
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)
check_mysql_health-2.2.2.tar.gz
/Beta, Preview, Test/
check_mysql_health-3.0.0.5.tar.gz
Gerhard Laußer
Check_mysql_health wird unter der GNU General Public License zur Verfügung gestellt. GPL
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.
Tausend Dank an Christian Lauf, der die englische Übersetzung dieser Seite erstellt hat.