Needrestart in Checkmk einbinden

02. Juli 2024 · Anwendungen · andreas · Kein Kommentar

Mit needrestart gibt es für Lunix-basierte Hosts eine Anwendung, die sich in den dpkg,- rpm- oder pacman-Mechanismus einklinkt und nach einer Aktualisierung des Systems mitteilt, ob und welche Systemkomponenten einen Neustart benötigen.

Needrestart: Critical

Neben zahlreichen Konfigurationsmöglichkeiten bietet needrestart auch einen Nagios-kompatiblen Ausgabemodus zur Einbindung in das Monitoring-System:

# needrestart -p
OK - Kernel: 6.1.0-22-amd64, Services: none, Containers: none, Sessions: none|Kernel=0;0;;0;2 Services=0;;0;0 Containers=0;;0;0 Sessions=0;0;;0

Checkmk ist in der Lage, über MRPE auch Nagios-kompatible Skripte zu verwenden, allerdings geht es auch einfacher mit Hilfe eines Local Checks:

A local check can be written in any programming language supported by the target host. The script must be constructed so that each check produces a status line consisting of four parts. Here is an example:

0 “My service” myvalue=73 My output text which may contain spaces

Die Skripte werden im Verzeichnis „/usr/lib/check_mk_agent/local/“ abgelegt und automatisch vom Agenten mitverarbeitet.

Needrestart: OK

Für needrestart reicht ein kleiner Wrapper, der das Ergebnis des Checks in einen numerischen Status wandelt und die Meldung selbst als Statusdetail ausgibt. Der Dienstname wird auf “needrestart” gesetzt und auf die Übermittlung von Metriken verzichtet.

#!/usr/bin/bash
NEEDRESTART="$(/usr/sbin/needrestart -p)"
if [[ "$NEEDRESTART" =~ ^OK ]]; then
        STATE=0
elif [[ "$NEEDRESTART" =~ ^WARN ]]; then
        STATE=1
elif [[ "$NEEDRESTART" =~ ^CRIT ]]; then
        STATE=2
else
        STATE=3
fi
echo "$STATE \"needrestart\" - $NEEDRESTART"

Nachdem das Skript angelegt und ausführbar gemacht wurde, muß auf dem Host nur noch ein Service-Discovery durchgeführt werden damit der neue Service übernommen werden kann.