Dem Check_MK Agenten ist es egal mit welcher Sprache ein lokaler Check geschrieben ist, er muss vom Betriebsystem ausführbar sein. Somit kann jede Scriptsprache (Perl, PHP, Python, Powershell, VBS, etc.) verwendet werden. Der Agent erwartet folgendes Format:
<checkresult> <name> <perfdata> <status_text>
Checkresult
0 = OK – 1 = Warning – 2 = Crtitcal – 3 = Unknown
Name
Dies Repräsentiert den Namen des Checks, whitespaces sind durch Unterstriche zu ersetzen, z.B. DNS_Check
Perfdata
Wenn von dem Check keine Performancedaten erzeugt werden ist hier ein Minus – einzusetzen; Die Werte sind in folgendem Format zu übergeben:
varname=value;warn;crit;min;max
Min und Max sind nur für das alte PNP4Nagios bei der freien Check_MK Version, das neue Graphing System der Enterprise Version benötigt das nicht und können weggelassen werden.
Mehrere Performancewerte werden durch ein Pipe | getrennt. z.B.
varname=value;warn;crit|varname2=value;warn;crit|varname3=value;warn;crit
Checks z.B. nur alle 10 Minuten ausführen
Per default wird der lokale Check jedes mal ausgeführt wenn Check_MK den Agenten abfrägt, das Verhalten kann man manipulieren in dem man im local Ordner einen Ordner anlegt in Sekunden, z.B. 10 Minuten sind 600 Sekunden. Der Check mein_check.sh wird dann im Ordner local/600/mein_check.sh abgelegt. Das Checkergebnis wird für die Anzahl der Sekunden des Ordners gecached.
Die Local Checks liegen in einem Linux System unter /usr/lib/check_mk_agent/local, in Windows ist es abhänig vom Installationsort. Diesen kann man ermitteln indem man den Agenten per Telnet abfrägt:
telnet 1.2.3.4 6556 <<<check_mk>>> ... LocalDirectory: C:\program files\check_mk_agent\local ...
Bei Windows Maschinen muss noch in der check_mk.ini definiert werden welche Scriptendungen ausgeführt werden dürfen.
# Example configuration for Windows agent [global] # Restrict access to certain IP addresses # If ipv6 is enabled, all listed ipv4 adresses are also accepted as # source adresses in their ipv6-mapped form. I.e. if # 192.168.56.0/24 is listed, connections from ::ffff:c0a8:3800/120 # are also possible # only_from = 127.0.0.1 192.168.56.0/24 ::1 # Change port where the agent is listening ( default 6556 ) # port = 6556 # Disable ipv6 support. By default, ipv4 is always supported # and ipv6 is enabled additionally if supported by the system. # ipv6 = no # Do only execute programs and scripts with # the following suffixes (in local and plugins). # Per default all extensions except txt and dir # are being executed. execute = exe bat vbs ps1
Zu finden ist ein Beispiel INI File unter /omd/versions/default/share/check_mk/agents/windows/check_mk.example.ini
Einfacher lokaler Check als Python Script:
#!/usr/bin/env python import os warn = 100000 crit = 200000 def size(path = '.'): tsize = 0 for dp, dn, fn in os.walk(path): for f in fn: fp = os.path.join(dp, f) tsize += os.path.getsize(fp) return tsize tmp_size = size("/tmp") if tmp_size >= crit: print "2 tmp dir size size=%d;%d;%d TMP size is %d " % (tmp_size, tmp_size, warn, crit) elif tmp_size >= warn: print "1 tmp_dir_size size=%d;%d;%d TMP size is %d " % (tmp_size, tmp_size, warn, crit) else: print "0 tmp_dir_size size=%d;%d;%d TMP size is %d " % (tmp_size, tmp_size, warn, crit)
Ein weiteres tolles Feature der lokalen Checks ist das man sich theoretisch nicht um die Logik kümmern muss damit OK, WARN oder CRIT zurückgegeben wird. Dazu müssen bei dem Counter Warning und Critical Werte mitgegeben werden. Dazu gibt es ein schönes Beispiel in den „Treasures“ von Check_MK (siehe localchecks/zombies).
Die Treasures sind zu finden unter: /omd/versions/default/share/doc/check_mk/treasures
Hier ein Beispiel:
#!/bin/bash proc=$( ps aux | wc -l ) echo "P Processes processes=$proc;1000;5000"
Mit P am Anfang anstatt 0,1,2,3 wird der Status von Check_MK bestimmt.
Andere Beispiele, etc. bei Mathias Kettner direkt und weitere Infos: (siehe z.B. filecount) https://mathias-kettner.de/checkmk_localchecks.html
1 Gedanke zu „Check_MK: Einfacher lokaler Check (Agent)“