UPDATE: 02.02.2014 – Anpassung an aktuellen Stand der Dinge.
In Teil 1 haben wir nun das Agent Plugin gebaut, in Teil 2 die Inventur geschrieben. Jetzt fehlt nur noch der Rest: die check Funktion.
def check_mysql_status(item, params, info): warn, crit = params for line in info: if item == line[0]: current_stat = saveint(line[1]) perf = [("count", current_stat, warn, crit )] output = "count " + current_stat levels = " Warn/Crit at %s/%s" % (warn, crit) if crit and current_stat >= crit: return 2, output+levels, perf elif warn and current_stat >= warn: return 1, output+levels ,perf else: return 0, output, perf return 3, "var %s missing" % item
Die check Funktion wird von check_mk nun für jedes Item einmal aufgerufen, übergeben wird eben dieses Item, Parameter und wieder die Agent Ausgabe als info. Hat man mal keine Parameter, kennzeichnet man dies mit _no_params als Variablenname.
Das Item ist nun jetzt hier jeweils den Variablenname der MySQL Status Variable, in params, dann jeweils unser Tuple mit den warn oder crit schwellen die für dieses Item gelten. D.h. wurde über check_parameters oder Wato nichts gegenteiliges festgelegt, sind es die Default levels.
for line in info: if item == line[0]: current_stat = saveint(line[1])
Jetzt erst mal wieder das selbe Spiel wie in der Inventur Funktion. In Info wird erst zeilenweise nach unserem Item gesucht. Wird es gefunden, legen wir der Lesbarkeit halber den aktuellen Status aus line[1] nach current_stat.
Nun haben wir auch alle Daten um die Tuple perf der Performancedaten vorzubereiten.
perf = [("count", current_stat, warn, crit )]
Es reicht uns eine Variable, somit auch nur eine Tuple in perf. Das Liste besteht aus
- Einem Variablen Name
- Dem Aktuellen Wert
- Dem Warning level des checks
- Dem Critical level
- Dem Maximal möglichen Wert
- Dem Minimal möglichen Wert
Alle nicht benötigen Werte werden durch “ “ übersprungen, oder können gleich (wenn man ende) weggelassen werden. Nur der Variablenname und der aktuelle Wert sind Pflicht. Einen Teil der Ausgabe können wir nun auch schon vorbereiten und in output speichern. Die Schwellwerte schreiben wir in einen levels String, damit wir diese nur im Fehlerfall als Information für den Benutzer zurückgeben müssen.
if crit and current_stat >= crit: return 2, output+levels, perf elif warn and current_stat >= warn: return 1, output+levels ,perf else: return 0, output, perf return (3, "var %s missing" % item)
Jetzt kommt das eigentliche Prüfen. Wie ihr seht werden jeweils nur der Statuscode, unser Ausgabe Text sowie die Performance Daten zurückgegeben. Der Status als Zahl orientiert sich hier an Nagios, 0 = OK, 1 = Warning, 2 = Critical, 3 = Unknown.
Wichtig ist auch der Return 3, der kommt nämlich immer dann, wenn das Item in der Agent Ausgabe nicht mehr gefunden wird. Dann stimmt was nicht.
So, das war auch schon die check Funktion.
Aber Achtung: damit allein passiert noch nichts, der Check muss nun noch registriert werden. In den aktuellen Check_MK Versionen passiert dieses über in Dictionary in check_info:
check_info['mysql_status'] = { "check_function" : check_mysql_status, "inventory_function : inventory_mysql_status, "service_description" : "MySQL Status %s", }
Interessant ist hier das %s in der service_description, dieses wird von Check_MK automatisch mit dem Namen des Items versehen.
Demnächst nun noch der Teil 4: Wie kann ich Schwellwerte über Wato festelgen.
Hi Bastian,
das hast Du super erklärt in deinem Blog! Daumen hoch!!!
Jetzt mach noch eine MKP daraus und lade es auf Check MK Exchange hoch.
Super Artikel gefällt mir *g*
gruß
Ben
Hi Ben,
danke. Das MKP kommt bald. Hab nur noch das Problem mit OMD 4.7 das es mit den Agent nicht dazu packt.
Grüße Basti
Hallo Bastian,
kann mich nur anschliesen – super erklärt.
Hab dein Beispiel bei mir umgesetzt.
Die beiden Services erscheinen mittlerweile auch bei mir im Multisite:
MySQL Status Aborted_clients
MySQL Status Created_tmp_files
Allerdings nicht von Anfang an….
check_mk -II tcp HOSTNAME
check_mk -R
dann kam aber noch nichts….irgendwann waren Sie dann da…
Jetzt hab ich die main.mk um andere mysql_status Services erweitert und hab wieder das gleiche Problem.
Was mach ich falsch?
Gruß Christoph
Hi Christoph,
Von Anfang an kommen sie nicht, sondern erst mit einer Inventur. Dabei reicht ein einfaches I, den bei II löscht er bereits vorhandene Daten aus autochecks und inventurisiert neu.
Dann natürlich, musst du mit -R Nagios neustarten (wichtig mit check_mk -R, damit auch check_mk seine Hausaufgaben vorm Reboot machen können).
Du machst jedoch nichts falsch,
das ist der Ablauf von check_mk. Neue Services erfordern Inventur, nach Inventur ist der Neustart nötig. Dann tauchen die Dienste erst auf. Völlig Normal.
Grüße Basti
Hab gerade
check_mk -I
gemacht
die neuen mysql_status-Services werden nochmal aufgelistet
nach
check_mk -R
sind sie jetzt da.
Kann es sein das es mit check_mk -II HOSTNAME nicht geht? Komisch…
Gruß Christoph
Hi Christoph,
wenn du das auch im nagios-portal bist, dann stimmt was mit deiner check_mk installation nicht so ganz.
Ich schreib noch ein paar Artikel, die dir helfen sollten.