Wie man den Status von Proxmox-Netzwerk-Knoten mit einem automatisierten Bash-Skript überwacht

Eine effiziente Verwaltung der IT-Infrastruktur ist für die Aufrechterhaltung der Stabilität und Leistung der digitalen Umgebung eines Unternehmens essenziell. Eine der wichtigsten Aufgaben für IT-Experten und Managed Service Provider (MSPs ) ist die Überwachung des Status von Netzwerk-Knoten innerhalb eines Proxmox Virtual Environment (PVE)-Clusters. Das mitgelieferte Skript bietet eine robuste Lösung zur Automatisierung der Proxmox-Netzwerk-Knoten-Überwachung und stellt sicher, dass die Informationen zum Status von Netzwerk-Knoten jederzeit verfügbar und aktuell sind.

Kontext

Proxmox VE ist eine Open-Source-Servervirtualisierungs-Umgebung, die von vielen IT-Experten zur Verwaltung von virtuellen Maschinen, Containern und Speichern verwendet wird. Die Überwachung des Zustands und Status der Netzwerk-Knoten innerhalb eines Proxmox-Clusters ist für die proaktive Wartung und Fehlerbehebung von entscheidender Bedeutung.

Dieses Skript vereinfacht den Prozess der Proxmox-Netzwerk-Knoten-Überwachung, indem es Informationen zum Status von Netzwerk-Knoten abruft und in benutzerdefinierten Feldern speichert, um den Zugriff und die Analyse zu erleichtern. Diese Automatisierung ist besonders wertvoll für MSPs, die mehrere Kunden-Umgebungen verwalten, da sie den manuellen Aufwand reduziert und das Risiko eines Versehens minimiert.

Das Skript

#!/usr/bin/env bash

# Description: Get the Proxmox Node Status and save it to a multiline and/or WYSIWYG custom field
#
# Release Notes: Fixed 10% width bug.
# By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
# Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
# Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
# Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
# Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
# Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
# Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
# EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).

# Command line arguments, swap the numbers if you want the multiline custom field to be the second argument
multiline_custom_field=$1 # First argument is the multiline custom field name
wysiwyg_custom_field=$2   # Second argument is the WYSIWYG custom field name

# Check if the custom fields are set to null
if [[ -n "${multilineCustomField}" && "${multilineCustomField}" != "null" ]]; then
    multiline_custom_field=$multilineCustomField
fi
if [[ -n "${wysiwygCustomField}" && "${wysiwygCustomField}" != "null" ]]; then
    wysiwyg_custom_field=$wysiwygCustomField
fi

# Check if the custom fields are the same
if [[ -n "${multiline_custom_field}" && "${multiline_custom_field}" == "${wysiwyg_custom_field}" ]]; then
    echo "[Error] multilineCustomField and wysiwygCustomField cannot be the same custom field."
    exit 1
fi

# Check if the custom fields are not set
if [[ -z "${multiline_custom_field}" ]]; then
    echo "[Info] multilineCustomField is not set."
fi
if [[ -z "${wysiwyg_custom_field}" ]]; then
    echo "[Info] wysiwygCustomField is not set."
fi

# Check that we have the required tools
if ! command -v pvesh &>/dev/null; then
    echo "[Error] The Proxmox VE API tool 'pvesh' is required."
    exit 1
fi

# Check that we are running as root
if [[ $EUID -ne 0 ]]; then
    echo "[Error] This script must be run as root."
    exit 1
fi

# Get the version of proxmox-ve
_version=$(pveversion --verbose | grep "proxmox-ve" | awk '{print $2}')

# Check if the version
if [[ "$(echo "${_version}" | awk -F. '{print $1}')" -eq 7 ]]; then
    echo "[Info] Proxmox VE $_version is greater than or equal to 8."
else
    echo "[Warn] Proxmox VE $_version is less than 8. Some data may not be formatted as expected. See: https://pve.proxmox.com/pve-docs/chapter-pve-faq.html#faq-support-table"
fi

# Check if ninjarmm-cli command exists
ninjarmm_cli="/opt/NinjaRMMAgent/programdata/ninjarmm-cli"
if [[ -z $ninjarmm_cli ]]; then
    echo "[Error] The ninjarmm-cli command does not exist in the default path. Please ensure the NinjaRMM agent is installed before running this script."
    exit 1
else
    # ninjarmm-cli command exists in the default path
    echo -n
fi

# Run the pvesh command to get the status information
if ! pvesh_status_output=$(pvesh get /cluster/status --noborder); then
    echo "[Error] Failed to get the Proxmox Node Status."
    echo "$pvesh_status_output"
    exit 1
fi
# Example Output from: pvesh get /cluster/status --noborder
# id        name     type    ip            level local nodeid nodes online quorate version
# cluster   cluster1 cluster                                      4        1       4
# node/pve1 pve1     node    192.168.1.10  c     0          1       1
# node/pve2 pve2     node    192.168.1.20  c     0          2       1
# node/pve3 pve3     node    192.168.1.30  c     0          3       1
# node/pve4 pve4     node    192.168.1.40  c     1          4       1

# Exclude the cluster information then skip the first line
node_status=$(echo "$pvesh_status_output" | grep -v "cluster" | tail -n +2)

# Create a table with the node status information with only the columns named id, name, ip, and online
if [[ "$(echo "${_version}" | awk -F. '{print $1}')" -ge 8 ]]; then
    data_table=$(echo "$node_status" | awk '{print $7, $2, $4, $8}' | column -t)
else
    data_table=$(echo "$node_status" | awk '{print $7, $2, $4, $7}' | column -t)
fi

# Convert the table to an HTML table with headers
result_table=$(echo "$data_table" | awk 'BEGIN {print "<table style=\"white-space:nowrap;\"><tr><th>Node ID</th><th>Node Name</th><th>IP Address</th><th>Online Status</th><th>Votes</th></tr>"} {print "<tr>"; for(i=1;i<=NF;i++) print "<td>" $i "</td>"; print "<td>1</td></tr>"} END {print "</table>"}')

# Save the result to the WYSIWYG custom field
if [[ -n "$wysiwyg_custom_field" ]]; then
    # Check if the NinjaRMM CLI exists and is executable
    if [[ -x "$ninjarmm_cli" ]]; then
        # Save the result to the custom field
        if hideOutput=$("$ninjarmm_cli" set "$wysiwyg_custom_field" "$result_table" 2>&1); then
            echo "[Info] Successfully set custom field: $wysiwyg_custom_field"
        else
            echo "[Error] Failed to set custom field: $wysiwyg_custom_field. Custom Field does not exit or does not have write permissions."
            _exit_code=1
        fi
    else
        echo "[Error] NinjaRMM CLI not found or not executable"
        _exit_code=1
    fi
fi

# Format the output for the multiline custom field
pvesh_status_output=$(
    # Exclude the cluster information then skip the first line
    echo "$data_table" | awk '{if (NR == 1) print "--------"; print "Node ID: " $1 "\nNode Name: " $2 "\nIP Address: " $3 "\nOnline Status: " $4 "\nVotes: 1\n"; if (NR != NF) print "--------"}'
)

# Save the result to the multiline custom field
_exit_code=0
if [[ -n "$multiline_custom_field" ]]; then
    if [[ -x "$ninjarmm_cli" ]]; then
        if hideOutput=$("$ninjarmm_cli" set "$multiline_custom_field" "$pvesh_status_output" 2>&1); then
            echo "[Info] Successfully set custom field: $multiline_custom_field"
        else
            echo "[Error] Failed to set custom field: $multiline_custom_field. Custom Field does not exit or does not have write permissions."
            _exit_code=1
        fi
    else
        echo "[Error] NinjaRMM CLI not found or not executable"
        _exit_code=1
    fi
fi

# Output the result
echo "${pvesh_status_output}"

exit $_exit_code

 

Greifen Sie auf über 300 Skripte im NinjaOne Dojo zu.

Zugang erhalten

Detailansicht

Das Skript dient dazu, den Status von Proxmox-Netzwerk-Knoten abzurufen und die Informationen entweder in einem mehrzeiligen benutzerdefinierten Feld oder einem benutzerdefinierten WYSIWYG-Feld zu speichern. Schauen wir uns die Funktionen Schritt für Schritt an:

1. Befehlszeilenargumente

  • Das Skript akzeptiert zwei Befehlszeilenargumente: die Namen des mehrzeiligen benutzerdefinierten Felds und des benutzerdefinierten WYSIWYG-Feldes.

2. Validierung des benutzerdefinierten Feldes

  • Sie prüft, ob die benutzerdefinierten Felder gesetzt sind und stellt sicher, dass sie nicht null oder gleich sind.

3. Tool- und Berechtigungsprüfung

  • Das Skript überprüft das Vorhandensein der erforderlichen Tools (pvesh und ninjarmm-cli) und prüft, ob es mit Root-Rechten ausgeführt wird.

4. Den Status von Netzwerk-Knoten abrufen

  • Er führt den Befehl pvesh get /cluster/status –noborder aus, um den Status der Netzwerk-Knoten im Proxmox-Cluster abzufragen.

5. Datenverarbeitung

  • Die Ausgabe wird verarbeitet, um relevante Informationen zu extrahieren, z. B. Netzwerk-Knoten-ID, Name, IP-Adresse und Online-Status. Diese Informationen werden in eine Tabelle formatiert.

6. In benutzerdefinierten Feldern speichern

  • Die formatierten Daten werden mit dem Befehl ninjarmm-cli in den angegebenen benutzerdefinierten Feldern gespeichert. Wenn das WYSIWYG-Feld angegeben ist, werden die Daten in eine HTML-Tabelle umgewandelt.

7. Ausgabe

  • Wenn keine benutzerdefinierten Felder angegeben sind, gibt das Skript den Status von Netzwerk-Knoten direkt auf der Konsole aus.

Potenzielle Anwendungsfälle

Fallstudie: Ein IT-Experte, der einen Proxmox-Cluster verwaltet

Stellen Sie sich einen IT-Experten namens Alex vor, der einen Proxmox-Cluster für ein mittelständisches Unternehmen verwaltet. Alex muss den Status der Netzwerk-Knoten regelmäßig überwachen, um sicherzustellen, dass sie online sind und ordnungsgemäß funktionieren. Mit diesem Skript kann Alex den Abruf und die Protokollierung von Netzwerk-Knoten-Status in benutzerdefinierten Feldern innerhalb seines Monitoring-Systems automatisieren. Dadurch spart Alex viel Zeit und stellt sicher, dass alle Probleme sofort erkannt und behoben werden.

Vergleiche

Manuelle Überwachung vs. automatisiertes Skript

Traditionell werden zur Proxmox-Netzwerk-Knoten-Überwachung Befehle manuell ausgeführt und die Ergebnisse aufgezeichnet – ein zeitaufwändiger und fehleranfälliger Prozess. Dieses Skript automatisiert den gesamten Arbeitsablauf und gewährleistet eine einheitliche und genaue Datenerfassung. Im Vergleich zu anderen Methoden, wie z.B. der Verwendung von Überwachungs-Tools von Drittanbietern, bietet dieses Skript eine kompakte und anpassbare Lösung, die auf Proxmox-Umgebungen zugeschnitten ist.

FAQs

  1. Was ist Proxmox VE? Proxmox VE ist eine Open-Source-Servervirtualisierungsumgebung, die zur Verwaltung von virtuellen Maschinen, Containern und Speichern verwendet wird.
  2. Warum muss ich das Skript mit Root-Rechten ausführen? Das Skript benötigt Root-Rechte, um auf die Statusinformationen des Proxmox-Netzwerk-Knotens zuzugreifen und die notwendigen Systemprüfungen durchzuführen.
  3. Was passiert, wenn der pvesh-Befehl fehlschlägt? Wenn der pvesh-Befehl fehlschlägt, gibt das Skript eine Fehlermeldung aus und bricht ab.
  4. Kann ich dieses Skript auch ohne das Tool ninjarmm-cli verwenden? Nein, das Skript verlässt sich auf ninjarmm-cli, um die informationen über den Status von Netzwerk-Knoten in benutzerdefinierten Feldern zu speichern.

Folgen

Mit diesem Skript wird sichergestellt, dass die Informationen zum Status von Promox-Netzwerk-Knoten konsistent erfasst und protokolliert werden, was für die Aufrechterhaltung des Zustands der IT-Infrastruktur von entscheidender Bedeutung ist. Durch die Automatisierung dieses Prozesses können sich IT-Experten auf strategischere Aufgaben konzentrieren, was die Gesamteffizienz verbessert und das Risiko unbemerkter Probleme verringert.

Empfehlungen

  • Lassen Sie es regelmäßig laufen: Planen Sie das Skript so, dass es in regelmäßigen Abständen ausgeführt wird, um aktuelle Informationen zum Status von Netzwerk-Knoten zu gewährleisten.
  • Überwachen Sie die Ausgaben: Überprüfen Sie die benutzerdefinierten Felder oder Ausgabeprotokolle regelmäßig auf Anomalien.
  • Vergewissern Sie sich, dass die Tools installiert sind: Prüfen Sie, dass sowohl pvesh als auch ninjarmm-cli auf dem System installiert und zugänglich sind.

Abschließende Überlegungen

Die Automatisierung der Überwachung des Status von Netzwerk-Knoten mit diesem Skript erhöht die Effizienz und Zuverlässigkeit der Verwaltung von Proxmox-Clustern. Durch die Integration dieses Skripts in Ihren Arbeitsablauf können Sie zeitnahe und genaue Statusaktualisierungen ermöglichen und so letztendlich die Stabilität und Leistung Ihrer IT-Umgebung verbessern.

Das Tools-Paket von NinjaOne, einschließlich NinjaOne RMM, bietet zusätzliche Möglichkeiten für optimales IT-Management und ergänzt die Funktionalität dieses Skripts.

Nächste Schritte

Der Aufbau eines effizienten und effektiven IT-Teams erfordert eine zentralisierte Lösung, die als einheitliches Tool zur Bereitstellung von IT-Dienstleistungen fungiert. NinjaOne ermöglicht es IT-Teams, alle Geräte zu überwachen, zu verwalten, zu sichern und zu unterstützen, unabhängig vom Standort, ohne dass eine komplexe Infrastruktur vor Ort erforderlich ist.

Erfahren Sie mehr über NinjaOne Remote Script Deployment, sehen Sie sich eine Live-Tour an oder starten Sie Ihre kostenlose Testversion unserer NinjaOne Plattform.

Kategorien:

Das könnte Sie auch interessieren

×

Sehen Sie NinjaOne in Aktion!

Mit dem Absenden dieses Formulars akzeptiere ich die Datenschutzerklärung von NinjaOne.

NinjaOne Allgemeine Geschäftsbedingungen für Skripte

Indem Sie unten auf die Schaltfläche “Ich akzeptiere” klicken, erklären Sie Ihr Einverständnis mit den folgenden rechtlichen Bedingungen sowie mit unseren Nutzungsbedingungen:

  • Eigentumsrechte: NinjaOne besitzt und wird weiterhin alle Rechte, Titel und Interessen an dem Skript (einschließlich des Urheberrechts) behalten. NinjaOne gewährt Ihnen eine eingeschränkte Lizenz zur Nutzung des Skripts in Übereinstimmung mit diesen rechtlichen Bedingungen.
  • Einschränkung der Nutzung: Sie dürfen das Skript nur für Ihre legitimen persönlichen oder internen Geschäftszwecke verwenden und es nicht an Dritte weitergeben.
  • Verbot der Wiederveröffentlichung: Sie sind unter keinen Umständen berechtigt, das Skript in einer Skriptbibliothek, die einem anderen Softwareanbieter gehört oder von diesem kontrolliert wird, erneut zu veröffentlichen.
  • Gewährleistungsausschluss: Das Skript wird “wie gesehen” und “wie verfügbar” bereitgestellt, ohne jegliche Garantie. NinjaOne gibt keine Versprechen oder Garantien, dass das Skript frei von Fehlern ist oder dass es Ihre speziellen Bedürfnisse oder Erwartungen erfüllt.
  • Risikoübernahme: Die Verwendung des Skripts erfolgt auf eigene Gefahr. Sie erkennen an, dass die Nutzung des Skripts mit bestimmten Risiken verbunden ist, und Sie verstehen und übernehmen jedes dieser Risiken.
  • Verzicht und Freigabe: Sie machen NinjaOne nicht für nachteilige oder unbeabsichtigte Folgen verantwortlich, die sich aus Ihrer Nutzung des Skripts ergeben, und Sie verzichten auf alle gesetzlichen oder billigkeitsrechtlichen Rechte oder Rechtsmittel, die Sie gegen NinjaOne im Zusammenhang mit Ihrer Nutzung des Skripts haben könnten.
  • EULA: Wenn Sie ein NinjaOne-Kunde sind, unterliegt Ihre Nutzung des Skripts dem für Sie geltenden Endbenutzer-Lizenzvertrag (EULA).