Output of “cmk --debug -vvn hostname”: (If it is a problem with checks or plugins)
Ich muss prüfen, ob auf einem Windows Server eine Anwendung unter einem bestimmten Benutzer läuft.
Wir haben eine SPS Steuerung einer Fertigungsanlage, die sich leider nicht als Service einrichten lässt, weil sie ein grafisches GUI hat. Die Anwendung muss auf dem Server jeweils gestartet sein. Wie kann ich das mit CheckMK überwachen?
# =============================================================================
# Checkmk Local Check: SPS-Steuerung User Validation
# =============================================================================
$ProcessName = "SPS_Steuerung" # Ohne .exe (Get-Process erwartet den Basisnamen)
$RequiredUser = "SPS_SERVICE" # Der Ziel-User
# Versuche Prozesse zu finden
try {
$processes = Get-Process -Name $ProcessName -IncludeUserName -ErrorAction SilentlyContinue |
Where-Object { $_.UserName -match $RequiredUser }
if ($processes) {
$count = $processes.Count
$userList = ($processes.UserName | Select-Object -Unique) -join ", "
Write-Output "0 `"SPS_Steuerung`" - OK: $count Instanz(en) läuft unter $userList"
} else {
# Prüfen, ob der Prozess unter ANDEREM User läuft oder gar nicht
$anyProcess = Get-Process -Name $ProcessName -ErrorAction SilentlyContinue
if ($anyProcess) {
Write-Output "2 `"SPS_Steuerung`" - CRITICAL: Prozess läuft, aber UNTER FALSCHEM USER"
} else {
Write-Output "2 `"SPS_Steuerung`" - CRITICAL: Prozess '$ProcessName' läuft gar nicht"
}
}
} catch {
Write-Output "3 `"SPS_Steuerung`" - UNKNOWN: Fehler beim Auslesen der Prozessdaten (Rechte?)"
}
hat nur einen Haken:
Der Checkmk-Agent läuft standardmäßig als LocalSystem. Wenn du den Parameter -IncludeUserName in PowerShell verwendest, benötigt das Skript Administrator-Rechte.
Problem: Der Standard-Agent führt Skripte im User-Kontext aus, was dazu führen kann, dass $_.UserName leer bleibt.
Lösung: In der Checkmk-Konfiguration (oder lokal in der check_mk.user.yml) muss sichergestellt sein, dass das Plugin mit den nötigen Rechten läuft.
Mit einem enforced Service Check kannst Du vorschreiben, dass bestimmte Dinge auf dem überwachten Host vorhanden sein sollen. Der Prozess-Check kann dann auch den Account prüfen, unter dem der Prozess läuft.
Für Windows-Prozesse möchtest Du in der Agentenkonfiguration die Nutzung von WMI und den vollen Pfad einstellen:
ps:
enabled: yes
use_wmi: yes
full_path: yes
(oder per Bakery: Finetune Windows process monitoring)