Check Plugin Entwicklung für check_mk Teil 3

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.

 

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahren Sie mehr darüber, wie Ihre Kommentardaten verarbeitet werden .

6 Gedanken zu “Check Plugin Entwicklung für check_mk Teil 3”