check_mk Nagios

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.

 

6 thoughts on “Check Plugin Entwicklung für check_mk Teil 3

  1. 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

    1. 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

      1. 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

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.