Check_MK: yield statt return in der Check Funktion

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:

  1. Unknown
  2. Critical
  3. Warn
  4. 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:

Schreibe einen Kommentar

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