Agent Daten werden mit Piggyback nicht übertragen

Hallo Community,

seit einem Update auf die Version 2.1 habe ich ein Problem mit einem Skript, welches Piggyback Daten erzeugt.

Genau geht es um das Skript mk_sap.py

Die notwendigen Module wurden installiert und das Skript erzeugt auch die Ausgaben bei einem Test mittels check_mk_agent.

Allerdings sind die Ausgaben nicht im Piggyback übermittelt.
Eine Kontrolle der Dateien unter tmp/check_mk/piggyback/ zeigt lediglich die Ausgaben von Local-Checks.

Unter der Version 2.0 mit dem Skript (damals allerdings mit einer älteren Version ohne pyrfc und unter Python2) kamen die Daten an.

Weiß jemand wo der Fehler liegt oder welche relevanten Änderungen zur Version 2.1 sich vielleicht geändert haben?

Ein Test von check_mk_agent entspricht nicht unbedingt dem wie der Agent automatisch ausgeführt wird. Ab 2.1 würde ich hier eher mit dem Agent Controller testen. Dieser bietet auch die Möglichkeit den Agent Output auszugeben und ruft den Agent so auf wie er in normalen Betrieb erfolgt.
Würde hier darauf tippen, dass irgendwelche Pfade nicht stimmen oder das environment anders ist wie beim manuellen Test.

1 Like

Danke für den Hinweis.
Das Skript liegt unter dem richtigen Pfad /usr/lib/check_mk_agent/plugins mit den Rechten rwx r-x r-x.

Der Befehl cmk-agent-ctl dump beinhaltet allerdings nicht die Ausgabe vom Skript. Inzwischen habe ich den Grund wohl auch gefunden.
In einem kleinen Testskript habe ich mir beispielhafte Ausgaben für ein Piggyback erzeugen lassen, welche auch im Agent Controller ausgegeben wurden. Sobald ich jedoch ein import pyrfc hinzugefügt habe, verschwanden die Ausgaben aus dem Agent Controller.

Pyrfc ist aktuell installiert unter /usr/local/lib64/python3.9/site-packages. Dieser Pfad ist auch in einer globalen Umgebungsvariable hinterlegt, sodass jeder Benutzer darauf Zugriff hat.

Mit welchem Benutzer wird der Agent Controller denn ausgeführt, dass dieser anscheinend dennoch keinen Zugriff auf das Modul hat?

Beim Versuch eine Lösung zu finden bin ich auch auf folgenden Punkt gestoßen:

Der Checkmk-Agent verwendet bei der Ausführung des Skriptes immer die Python Version 3.6 - das Skript benötigt jedoch mindestens die Version 3.8.

Für das Skript wurde daher auch eine aktueller Version von Python (3.10) installiert und der Anfang des Skriptes von #! /usr/bin/env python3 auf #! /usr/bin/env python3.10 geändert.
Dennoch für der Agent das Skript mit einer älteren Python-Version aus.

Ist es möglich dieses Verhalten anzupassen?

Dafür wirst die folgende Funktion aus dem Agent Script anpassen müssen.

detect_python() {
    PYTHON3=$(read_python_version python3 3 4 || read_python_version python 3 4)
    PYTHON2=$(read_python_version python2 2 6 || read_python_version python 2 6)
    if [ -f "${MK_CONFDIR}/python_path.cfg" ]; then
        # shellcheck source=/dev/null
        . "${MK_CONFDIR}/python_path.cfg"
    fi
    export PYTHON2 PYTHON3

    if [ -z "${PYTHON2}" ] && [ -z "${PYTHON3}" ]; then
        NO_PYTHON=true
    elif [ -n "${PYTHON3}" ] && [ "$(
        ${PYTHON3} -c 'pass' >/dev/null 2>&1
        echo $?
    )" -eq 127 ]; then
        WRONG_PYTHON_COMMAND=true
    elif [ -z "${PYTHON3}" ] && [ "$(
        ${PYTHON2} -c 'pass' >/dev/null 2>&1
        echo $?
    )" -eq 127 ]; then
        WRONG_PYTHON_COMMAND=true
    fi
}

Der Agent schaut halt nur nach Python3 oder Python2 und nimmt das was er als erstes findet.

Hier noch die umgesetzte Lösung.

Die Funktion habe ich nicht angepasst, sondern die darin abgefragte Datei python_path.cfg erstellt.

In dieser wurde dann angegeben, dass bei Ausführung des Agent mit PYTHON3 die Version 3.9 verwendet werden soll.

Die Datei muss dafür mit folgenden Inhalt unter /etc/checkmk/ abgelegt werden.
PYTHON3=python3.9

1 Like