Check_MK erwartet bei der Check Funktion ein Tuple mit 2 (ohne Performance Daten) bzw. 3 Werten (mit Performance Daten).
<STATUS>, <MESSAGE>, <PERFOMANCEDATA>
Wenn man in einem Service mehrere Werte aggregieren möchte z.B. man hat mehrere Lüfter im System möchte aber nicht für jeden einen eigenen Service sondern nur einen einzigen, so muss man die Werte von mehreren vergleichen und dann den entsprechenden Status zurückgeben. Da diese ganzen Vergleiche aufwändig sind und fehleranfällig löst Check_MK so eine Situation mit dem yield Generator. Diesem werden alle Werte einfach übergeben, er setzt nach einer Logik den Servicestatus und fügt alle einzelnen Status in den Output des Services.
Der Status des Checks wird in folgender Reihenfolge angezeigt, d.H. ist einer der Status UNKNOWN wird der komplette Service als UNKNOWN angezeigt:
- Unknown
- Critical
- Warn
- OK
Beispiel alte Lösung mit 1 return
def check_mycheck(item, params, info): warn = False crit = False unkn = False msg = "" for i in info: fan, status = i status = int(status) if status == 2: crit = True msg += " %s: CRIT -" % fan elif status == 1: warn = True msg += " %s: WARN -" % fan elif status == 3: unkn = True msg += " %s: UNKN -" % fan else: msg += " %s: OK -" % fan if unkn == True: return 3, msg elif crit == True: return 2, msg elif warn == True: return 1, msg else: return 0, msg
Ausgabe:
Beispiel neue Lösung mit yield
def check_mycheck(item, params, info): for i in info: fan, status = i status = int(status) yield status, "Status von: %s" % fan
Ausgabe: