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.
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
- Was ist Proxmox VE? Proxmox VE ist eine Open-Source-Servervirtualisierungsumgebung, die zur Verwaltung von virtuellen Maschinen, Containern und Speichern verwendet wird.
- 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.
- Was passiert, wenn der pvesh-Befehl fehlschlägt? Wenn der pvesh-Befehl fehlschlägt, gibt das Skript eine Fehlermeldung aus und bricht ab.
- 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.