# Lokaler Check

### Skript erstellen

Sie können einen lokalen Check in jeder beliebigen Programmiersprache schreiben, die der Zielhost unterstützt. Das Skript muss so konstruiert sein, dass es pro Check eine Statuszeile ausgibt, die aus vier Teilen besteht. Hier ist ein Beispiel:

```
0 "My service" myvalue=73 My output text which may contain spaces
```

Die vier Teile sind durch Leerzeichen getrennt und haben folgende Bedeutung:

<table class="table-responsive table-bordered table tableblock frame-all grid-all spread" id="bkmrk-beispielwert-bedeutu"><thead><tr><th class="tableblock halign-left valign-top">Beispielwert</th><th class="tableblock halign-left valign-top">Bedeutung</th><th class="tableblock halign-left valign-top">Beschreibung</th></tr></thead><tbody><tr><td class="tableblock halign-left valign-top">`0`

</td><td class="tableblock halign-left valign-top">Status

</td><td class="tableblock halign-left valign-top">Der Zustand des Services wird als Ziffer angegeben: `0` für <span class="state0">OK</span>, `1` für <span class="state1">WARN</span>, `2` für <span class="state2">CRIT</span> und `3` für <span class="state3">UNKNOWN</span>. Alternativ ist es möglich, den [Status dynamisch berechnen](https://docs.checkmk.com/latest/de/localchecks.html#dynamic_state) zu lassen: dann wird die Ziffer durch ein `P` ersetzt.

</td></tr><tr><td class="tableblock halign-left valign-top">`My service`

</td><td class="tableblock halign-left valign-top">Service-Name

</td><td class="tableblock halign-left valign-top">Der Name des Services, wie er in Checkmk angezeigt wird, in der Ausgabe des Checks in doppelten Anführungszeichen. Falls der Service-Name keine Leerzeichen enthält, können Sie sich die Anführungszeichen sparen.

</td></tr><tr><td class="tableblock halign-left valign-top">`myvalue=73;65;75`

</td><td class="tableblock halign-left valign-top">Wert und Metriken

</td><td class="tableblock halign-left valign-top">Metrikwerte zu den Daten. Sie finden im Kapitel zu den [Metriken](https://docs.checkmk.com/latest/de/localchecks.html#metrics) näheres zum Aufbau. Alternativ können Sie ein Minuszeichen setzen, wenn der Check keine Metriken ausgibt.

</td></tr><tr><td class="tableblock halign-left valign-top">`My output text which may contain spaces`

</td><td class="tableblock halign-left valign-top">Statusdetail

</td><td class="tableblock halign-left valign-top">Details zum Status, wie sie in Checkmk angezeigt werden. Dieser Teil kann auch Leerzeichen enthalten.

</td></tr></tbody></table>

Zwischen den einzelnen Teilen der Ausgabe und dem ersten Text des Statusdetails muss immer ein Leerzeichen stehen. Alles danach wird zum Statusdetail gezählt, weswegen dann auch Leerzeichen erlaubt sind.

Wenn Sie wegen einer möglichen Ausgabe unsicher sind, können Sie diese einfach testen, indem Sie ein kleines Skript mit dem Kommando `echo` schreiben. Fügen Sie in das `echo`-Kommando Ihre Ausgabe ein, die Sie testen möchten. Achten Sie darauf, die Anführungszeichen für den Service-Namen mit `\` zu maskieren, damit diese Zeichen nicht vom `echo`-Kommando interpretiert werden:  
Linux:

```
#!/bin/bash
echo "0 \"My 1st service\" - This static service is always OK"
```

Windows:

```
@echo off
echo 0 "My 1st service" - This static service is always OK
```

Beide Skripte führen in der Ausgabe zum gleichen Ergebnis:

```
0 "My 1st service" - This static service is always OK
```

Für Checkmk ist nur diese Ausgabe relevant, nicht wie Sie diese Ausgabe erzeugt haben.

Sie können übrigens beliebig viele Ausgaben in einem Skript erzeugen. Für jede ausgegebene Zeile wird dann ein eigener Service in Checkmk erstellt. Daher sind in der Ausgabe auch keine Zeilenumbruchzeichen erlaubt — es sei denn, sie sind maskiert, zum Beispiel für eine [mehrzeilige Ausgabe](https://docs.checkmk.com/latest/de/localchecks.html#multi-line) in Checkmk.

Wie Sie prüfen, ob das lokale Skript vom Agenten richtig aufgerufen wird, sehen Sie in der [Fehleranalyse](https://docs.checkmk.com/latest/de/localchecks.html#diagnose).

### Skript verteilen

Nachdem das Skript geschrieben ist, können Sie es an die entsprechenden Hosts verteilen. Der Pfad unterscheidet sich je nach Betriebssystem. Eine Liste der Pfade finden Sie in [Dateien und Verzeichnisse](https://docs.checkmk.com/latest/de/localchecks.html#folders_script) weiter unten.

Vergessen Sie nicht, das Skript auf unixoiden Systemen ausführbar zu machen. Der Pfad in dem Beispiel bezieht sich auf Linux:

```
root@linux# chmod +x /usr/lib/check_mk_agent/local/mylocalcheck
```

Wenn Sie die [Agentenbäckerei](https://docs.checkmk.com/latest/de/wato_monitoringagents.html#bakery) nutzen, können Sie das Skript auch regelbasiert verteilen. Mehr zur Regelerstellung erfahren Sie im Kapitel [Verteilung über die Agentenbäckerei](https://docs.checkmk.com/latest/de/localchecks.html#bakery).

### Den Service ins Monitoring aufnehmen

Bei jedem Aufruf des Checkmk-Agenten wird auch der im Skript enthaltene lokale Check ausgeführt und an die Ausgabe des Agenten angehängt. Die [Service-Erkennung](https://docs.checkmk.com/latest/de/wato_services.html#discovery) funktioniert also wie bei anderen Services auch automatisch: