Überwachen ob ein VM lebt.

TErxleben

Famous Member
Oct 20, 2008
813
207
113
Hamburg
kennt jemand vielleicht ein clientloses tool/script, mit dem ich schlank und komfortabel z.B. per traceroute die Route zu einer VM intern prüfen kann? Selbstredend ohne Monster ala Nagios und Konsorten. Mir schwebt vor, eine Standardroute zu hinterlegen und jeden Prüflauf damit abzugleichen oder muss ich das womöglich selbst (doppelt?) scripten? Ob eine VM intern funktioniert bleibt so natürlich verborgen.
 
Last edited:
An und für dich eine gute Empfehlung, aber der Op will ja Monitoring ohne Monitoring-Software. Diesen Wunsch nach einer Quadratur des Kreises wird auch uptimekarma nicht erfüllen können
Klar wirkt das ein wenig wie die genannte Quadratur.
Mir schwebt aber nur vor, die Ereichbarkeit jeder Netzwerkkomponente in der Infrastruktur anzeigen zu können. Ohne fancy Onlinevisualisierung und Dauermonitoring. Wer setzt denn noch Geräte ohne Layer3 ein. Anderenfalls ist das technisch doch machbar.
Am schönsten wäre ein standardisierter Dienst auf jeder Netzwerkkarte ähnlich wie SNMP, der lediglich aktiv ein simples keepalive mit hops an eine Zentralinstanz schickt, die man dann auswerten kann. Im Gegensatz der zu den pullenden Monitoringlösungen.

Ist auch eher ein Gedankenspiel.
 
Last edited:
schlank und komfortabel z.B. per traceroute
Willst du die Route auf Veränderungen überwachen, oder willst du wissen, ob der Server erreichbar ist? Das ist ein Einzeiler:

Code:
~$ export SERVER=irgendeinserver;  while true; do echo -n "$(date)  "; ping -c 1 -q  -W 2 "$SERVER" &>/dev/null  && echo "Ir
gendeinserver ist erreichbar" || echo "FEHLER"; sleep 5; done
Mi 17. Jun 18:30:50 CEST 2026  Irgendeinserver ist erreichbar
Mi 17. Jun 18:30:55 CEST 2026  Irgendeinserver ist erreichbar
Mi 17. Jun 18:31:00 CEST 2026  Irgendeinserver ist erreichbar
Mi 17. Jun 18:31:05 CEST 2026  FEHLER
Mi 17. Jun 18:31:10 CEST 2026  FEHLER
Mi 17. Jun 18:31:15 CEST 2026  FEHLER
Mi 17. Jun 18:31:20 CEST 2026  Irgendeinserver ist erreichbar
Mi 17. Jun 18:31:25 CEST 2026  Irgendeinserver ist erreichbar
 
  • Like
Reactions: IsThisThingOn
Wer setzt denn noch Geräte ohne Layer3 ein.
Ich in Form von managed und unmanaged Switches ohne Layer3. :D Das reicht mir nämlich hier in meinem Heim-Netzwerk. :)

Wenn es dann eher um ein größeres Netzwerk und nicht um "Spielerei" zu Hause gehen sollte, dann könnte man auch sagen/fragen: Welcher Admin setzt dort in so einem Netzwerk dann keine "fancy Onlinevisualisierung und Dauermonitoring" Software ein. ;)

Am schönsten wäre ein standardisierter Dienst auf jeder Netzwerkkarte ähnlich wie SNMP, der lediglich aktiv ein simples keepalive mit hops an eine Zentralinstanz schickt, die man dann auswerten kann.
Gibt es halt nicht, weil eine Netzwerkkarte von Haus aus nun mal eher ein einfaches, dummes Gerät ist, das nicht auch noch von sich aus so etwas in der Art zur Verfügung stellt. Daher werden irgendwelche Statusabfagen nun mal bereits seit Jahrzehnten von irgendwelchen pullenden Geräten aus dem Netzwerk heraus erledigt. Im einfachsten Fall halt per anpingen und für so etwas gibt es natürlich alle möglichen kleineren und größeren Lösungen, für ganz verschiedene Einsatzzwecke. Selbst unter Home Assistant gibt es eine Ping Integration die so etwas kann. :D

Ein einfaches Ping Script hat @UdoB ja gerade - als ich dieses Posting hier erstellt habe - als Beispiel auch schon gepostet.

VG Jim
 
Last edited:
  • Like
Reactions: IsThisThingOn
Willst du die Route auf Veränderungen überwachen, oder willst du wissen, ob der Server erreichbar ist? Das ist ein Einzeiler:

Code:
~$ export SERVER=irgendeinserver;  while true; do echo -n "$(date)  "; ping -c 1 -q  -W 2 "$SERVER" &>/dev/null  && echo "Ir
gendeinserver ist erreichbar" || echo "FEHLER"; sleep 5; done
Mi 17. Jun 18:30:50 CEST 2026  Irgendeinserver ist erreichbar
Mi 17. Jun 18:30:55 CEST 2026  Irgendeinserver ist erreichbar
Mi 17. Jun 18:31:00 CEST 2026  Irgendeinserver ist erreichbar
Mi 17. Jun 18:31:05 CEST 2026  FEHLER
Mi 17. Jun 18:31:10 CEST 2026  FEHLER
Mi 17. Jun 18:31:15 CEST 2026  FEHLER
Mi 17. Jun 18:31:20 CEST 2026  Irgendeinserver ist erreichbar
Mi 17. Jun 18:31:25 CEST 2026  Irgendeinserver ist erreichbar
Das ist natürlich die simple Lösung, die ich ähnlich nutze und ein wenig pimpen wollte. Habe mich da womöglich ein wenig verrannt.
 
Ich in Form von managed und unmanaged Switches ohne Layer3. :D Das reicht mir nämlich hier in meinem Heim-Netzwerk. :)

Wenn es dann eher um ein größeres Netzwerk und nicht um "Spielerei" zu Hause gehen sollte, dann könnte man auch sagen/fragen: Welcher Admin setzt dort in so einem Netzwerk dann keine "fancy Onlinevisualisierung und Dauermonitoring" Software ein. ;)


Gibt es halt nicht, weil eine Netzwerkkarte von Haus aus nun mal eher ein einfaches, dummes Gerät ist, das nicht auch noch von sich aus so etwas in der Art zur Verfügung stellt. Daher werden irgendwelche Statusabfagen nun mal bereits seit Jahrzehnten von irgendwelchen pullenden Geräten aus dem Netzwerk heraus erledigt. Im einfachsten Fall halt per anpingen und für so etwas gibt es natürlich alle möglichen kleineren und größeren Lösungen, für ganz verschiedene Einsatzzwecke. Selbst unter Home Assistant gibt es eine Ping Integration die so etwas kann. :D

Ein einfaches Ping Script hat @UdoB ja gerade - als ich dieses Posting hier erstellt habe - als Beispiel auch schon gepostet.

VG Jim
So doof sind Netzwerkkarten nun auch nicht. Warum ist es nicht möglich, in jeder hinterlegen zu können, wo sie ein keepalive einzutragen haben? Die Dinger achten ja sogar auf WOL.
 
Last edited:
Mir schwebt aber nur vor, die Ereichbarkeit jeder Netzwerkkomponente in der Infrastruktur anzeigen zu können. Ohne fancy Onlinevisualisierung und Dauermonitoring. Wer setzt denn noch Geräte ohne Layer3 ein. Anderenfalls ist das technisch doch machbar.
Am schönsten wäre ein standardisierter Dienst auf jeder Netzwerkkarte ähnlich wie SNMP, der lediglich aktiv ein simples keepalive mit hops an eine Zentralinstanz schickt, die man dann auswerten kann. Im Gegensatz der zu den pullenden Monitoringlösungen.
Diese standardisierten Dienste gibt es doch schon? Zum einen ist ja für Linux (und somit auch Proxmox) der snmpd verfügbar. Und zum anderen unterstützt so ziemlich jede mir bekannte klassische Monitoringsoftware auch ohne Installation eines agenten, Einrichten von ssh o.ä. die Einrichtung eines simplen ping-Checks, der bei Nichterreichbarkeit des Hosts dann eine Notification auslöst. Ausnahme wäre prometheus (ist aber halt auch kein klassisches Monitoring ala nagios mehr), das sammelt ja von den Diensten Metriken ein und wenn es das nicht kann geht es im Umkehrschluß davon aus, dass der entsprechende Dienst/Host nicht erreichbar ist und kann damit dann wieder einen Alert triggern:
https://www.linux-magazin.de/ausgaben/2017/11/prometheus-sensu/ (Lustig, dass da noch sensu als nagios-Alternative auftaucht, das habe ich noch nirgends in freier Wildbahn gesehen, wird das überhaupt noch groß verwendet?=
https://www.linux-magazin.de/ausgaben/2017/06/prometheus/
 
Moin
So doof sind Netzwerkkarten nun auch nicht. Warum ist es nicht möglich, in jeder hinterlegen zu können, wo sie ein keepalive einzutragen haben?
Meine Aussage
weil eine Netzwerkkarte von Haus aus nun mal eher ein einfaches, dummes Gerät ist,
bezog sich ja auch nicht darauf was technisch vielleicht möglich wäre, sondern was bereits seit Jahrzehnten die Realität ist. :) Weil Du suchst oder fragst ja nach einer Lösung in dem hier und jetzt und nicht nach einer theoretischen Möglichkeit. Wobei:
Ist auch eher ein Gedankenspiel.
Über/Zu theoretische Möglichkeiten und Gedankenspielen könnte man natürlich noch Vieles schreiben. :)

VG Jim
 
kennt jemand vielleicht ein clientloses tool/script, mit dem ich schlank und komfortabel z.B. per traceroute die Route zu einer VM intern prüfen kann? Selbstredend ohne Monster ala Nagios und Konsorten. Mir schwebt vor, eine Standardroute zu hinterlegen und jeden Prüflauf damit abzugleichen oder muss ich das womöglich selbst (doppelt?) scripten? Ob eine VM intern funktioniert bleibt so natürlich verborgen.

Ich habe die Erfahrung gemacht, dass es (zumindest im enterprise Umfeld) genau mit so einer Aufgabenstellung anfängt.

"Kann man die VM/den Dienst/Swítch etc. überwachen?"

Meist (nicht in Deinem Fall, Du weißt ja schon, dass es Dir um ICMP geht) muss man per Frage-Antwortspielchen herausfinden, was denn genau überwacht werden soll (Netzwerkdienst "überwachbar" von außen oder irgendwas Internes, nur überwachbar über einen Agenten o.ä.).

Dann will man üblicherweise ja auch mindestens informiert werden, wenn irgendeine Zustandsänderung oder Schwellwertüberschreitung auftritt.

Was ich damit sagen will: Es gibt ja mehr als ein Tool, das schnell aufgesetzt ist und all das zumindest im Bauch hat. Im Vergleich zu einem Skript, das bei der ersten Unzulänglichkeit erweitert werden muss.

Ich selbst verwende Zabbix. Ist open source und kann clientlos eingesetzt werden, aber auch bei Bedarf als Agent in VMs installiert werden. Ganz, wie es die Aufgabe erfordert.

VG DV
 
Last edited:
kennt jemand vielleicht ein clientloses tool/script,
Vielleicht übersehe ich ja etwas, aber „clientlos“ wird es eher nicht gehen, „agentlos“ aber schon. ;-)

Warum nicht einfach ein Tool wie Uptime Kuma nutzen? Das Tool kann ICMP-, HTTP- und noch einige andere Checks durchführen und funktioniert somit komplett ohne Agenten in den VMs. Es kann dich auch über verschiedene Kanäle benachrichtigen, wenn etwas nicht mehr erreichbar ist.

Ich verstehe, dass du eine möglichst leichtgewichtige Lösung suchst, und irgendwie am liebsten alles mit Boardmitteln machen würdest. Andererseits benötigt Uptime Kuma nicht sooo viele Ressourcen und macht genau das: Uptime überwachen und benachrichtigen. Als Bonus gibt es noch ein schickes Dashboard. ;-)

Es kommt aber auch darauf an, was das eigentliche Ziel dieser Übung ist bzw. welche Informationen du mit deiner Monitoring-Lösung gewinnen möchtest. Mit einer Netzwerk-/ICMP basierten Lösung weißt du ja grundsätzlich nur, dass die VM netzwerkseitig nicht mehr erreichbar ist. Bei Uptime Kuma ist es ähnlich, allerdings bietet es noch etwas mehr Checks an. Wenn du z.B. noch den den HTTP-Check nutzt, weißt du beispielsweise, dass der Webserver in der VM nicht mehr erreichbar ist, und wenn zusätzlich auch der Ping fehlschlägt, weißt du, dass vermutlich ein Netzwerkproblem vorliegt. Die VM selbst kann aber theoretisch immer noch laufen.

Wenn es dir primär darum geht zu wissen, ob die VM selbst noch läuft, wäre das vermutlich besser über den QEMU Guest Agent oder vielleicht über irgendwelche PVE Tools zu lösen..?

Wenn du möglichst viele Eventualitäten im Blick behalten möchte, landest du allerdings schnell bei „echten“ Monitoring-Lösungen, und ja die sind häufig agentenbasiert.
 
Last edited:
Ohne Script oder irgendwas wirds nicht gehen. Die Frage ist auch: was soll denn ausgelöst werden, wenn sich die Route ändert? Einfach nur ein Log schreiben, in welchem das vermerkt wird? Benachrichtigungen per Mail, Messenger, Webhook?

Wenn es direkt auf Linux laufen soll, wäre mtr als Paket die einfachste Wahl.

Ein Script könnte so aussehen:

Code:
#!/usr/bin/env bash

declare -A TARGETS

TARGETS["vm01"]="192.168.1.100"
TARGETS["vm02"]="192.168.1.101"
TARGETS["vm03"]="192.168.1.102"

BASELINE_DIR="/opt/routecheck/baseline"
CURRENT_DIR="/tmp/routecheck"

mkdir -p "$BASELINE_DIR" "$CURRENT_DIR"

for VM in "${!TARGETS[@]}"; do
    IP="${TARGETS[$VM]}"

    echo "== Prüfe $VM ($IP) =="

    mtr -r -c 5 -n "$IP" \
        | awk 'NR > 1 {print $2}' \
        | grep -E '^[0-9]+\.' \
        > "$CURRENT_DIR/$VM.route"

    if [[ ! -f "$BASELINE_DIR/$VM.route" ]]; then
        echo "Keine Baseline vorhanden, lege an."
        cp "$CURRENT_DIR/$VM.route" "$BASELINE_DIR/$VM.route"
        continue
    fi

    if diff -u "$BASELINE_DIR/$VM.route" "$CURRENT_DIR/$VM.route" >/dev/null; then
        echo "OK: Route unverändert"
    else
        echo "WARNUNG: Route geändert!"
        diff -u "$BASELINE_DIR/$VM.route" "$CURRENT_DIR/$VM.route"
    fi

    echo
done

Erweitert mit Log und State:

Code:
#!/usr/bin/env bash

declare -A TARGETS

TARGETS["vm01"]="192.168.1.100"
TARGETS["vm02"]="192.168.1.101"
TARGETS["vm03"]="192.168.1.102"

BASELINE_DIR="/opt/routecheck/baseline"
CURRENT_DIR="/tmp/routecheck"
STATE_DIR="/opt/routecheck/state"

LOGFILE="/var/log/routecheck.log"

mkdir -p "$BASELINE_DIR"
mkdir -p "$CURRENT_DIR"
mkdir -p "$STATE_DIR"

log_msg() {
    echo "$(date '+%F %T') $1" >> "$LOGFILE"
}

for VM in "${!TARGETS[@]}"
do
    IP="${TARGETS[$VM]}"

    CURRENT="$CURRENT_DIR/$VM.route"
    BASELINE="$BASELINE_DIR/$VM.route"
    STATE="$STATE_DIR/$VM.changed"

    # Route ermitteln
    mtr -r -c 5 -n "$IP" 2>/dev/null \
        | awk 'NR > 1 {print $2}' \
        | grep -E '^[0-9]+\.' \
        > "$CURRENT"

    # Ziel nicht erreichbar
    if [[ ! -s "$CURRENT" ]]; then

        if [[ ! -f "$STATE.unreachable" ]]; then
            touch "$STATE.unreachable"

            log_msg "[ERROR] $VM ($IP): Ziel nicht erreichbar"
        fi

        continue
    fi

    rm -f "$STATE.unreachable"

    # Baseline anlegen
    if [[ ! -f "$BASELINE" ]]; then

        cp "$CURRENT" "$BASELINE"

        log_msg "[INFO ] $VM ($IP): Baseline angelegt"

        continue
    fi

    # Vergleich
    if diff -u "$BASELINE" "$CURRENT" >/tmp/${VM}.diff
    then

        log_msg "[ OK  ] $VM ($IP): Route unverändert"

        if [[ -f "$STATE" ]]; then

            rm -f "$STATE"

            log_msg "[INFO ] $VM ($IP): Route wieder im Sollzustand"
        fi

    else

        if [[ ! -f "$STATE" ]]; then

            touch "$STATE"

            log_msg "[WARN ] $VM ($IP): Route geändert"

            while IFS= read -r line
            do
                log_msg "[DIFF ] $line"
            done < /tmp/${VM}.diff

        fi

    fi

done

Beim ersten Start wird die Routingtabelle für jede VM unterhalb von /opt/routecheck/baseline automatisch angelegt und bei weiteren Läufen dann abgeglichen. Bei einer Variante mit Log würde ich noch logrotate setzen, bspw. via:

Code:
/etc/logrotate.d/routecheck

Mit 14 Tagen Vorhaltezeit:

Code:
/var/log/routecheck.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    create 0640 root adm
}

Die Bingofrage ist halt: was willst Du damit erreichen oder ggf. bei Änderungen auslösen?