Una gestione efficiente dell’infrastruttura IT è fondamentale per mantenere la stabilità e le prestazioni dell’ambiente digitale di un’organizzazione. Uno dei compiti essenziali per i professionisti IT e i Managed Service Provider (MSP) è il monitoraggio dello stato dei nodi all’interno di un cluster Proxmox Virtual Environment (PVE). Lo script fornito offre una soluzione affidabile per automatizzare il processo per monitorare i nodi Proxmox, garantendo che le informazioni sullo stato dei nodi siano prontamente disponibili e aggiornate.
Background
Proxmox VE è un ambiente di virtualizzazione server open-source utilizzato da molti professionisti IT per gestire virtual machine, container e storage. Il monitoraggio dell’integrità e dello stato dei nodi all’interno di un cluster Proxmox è fondamentale per la manutenzione proattiva e la risoluzione dei problemi.
Questo script semplifica il processo per monitorare i nodi Proxmox recuperando le informazioni sullo stato dei nodi e salvandole in campi personalizzati per facilitarne l’accesso e l’analisi. Questa automazione è particolarmente preziosa per gli MSP che gestiscono più ambienti di clienti, in quanto riduce l’impegno manuale e il rischio di sviste.
Lo script per monitorare i nodi Proxmox
#!/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
Analisi dettagliata
Lo script è progettato per recuperare lo stato di un nodo Proxmox e salvare le informazioni in un campo personalizzato multilinea o in un campo personalizzato WYSIWYG. Analizziamo passo per passo le sue funzionalità:
1. Argomenti della riga di comando
- Lo script per monitorare i nodi Proxmox accetta due argomenti da riga di comando: i nomi del campo personalizzato multilinea e del campo personalizzato WYSIWYG.
2. Convalida dei campi personalizzati
- Controlla se i campi personalizzati sono impostati e si assicura che non siano nulli o uguali.
3. Controllo degli strumenti e dei permessi
- Lo script per monitorare i nodi Proxmox verifica la presenza degli strumenti necessari (pvesh e ninjarmm-cli) e controlla se è in esecuzione con i privilegi di root.
4. Recuperare lo stato del nodo
- Lo script per monitorare i nodi Proxmox esegue il comando pvesh get /cluster/status –noborder per recuperare lo stato dei nodi del cluster Proxmox.
5. Elaborazione dati
- L’output viene elaborato per estrarre le informazioni rilevanti, come l’ID del nodo, il nome, l’indirizzo IP e lo stato online. Queste informazioni sono formattate in una tabella.
6. Salva in campi personalizzati
- I dati formattati vengono salvati nei campi personalizzati specificati usando il comando ninjarmm-cli. Se viene specificato il campo WYSIWYG, i dati vengono convertiti in una tabella HTML.
7. Output
- Se non vengono specificati campi personalizzati, lo script visualizza lo stato del nodo direttamente nella console.
Casi d’uso potenziali
Caso di studio: Un professionista IT che gestisce un cluster Proxmox
Immagina un professionista IT di nome Alex, che gestisce un cluster Proxmox per un’azienda di medie dimensioni. Alex deve monitorare regolarmente lo stato dei nodi per assicurarsi che siano online e funzionino correttamente. Utilizzando questo script, Alex può automatizzare il recupero e la registrazione degli stati dei nodi in campi personalizzati del sistema di monitoraggio. Questa automazione fa risparmiare ad Alex molto tempo e garantisce che qualsiasi problema venga individuato e affrontato tempestivamente.
Confronti
Monitoraggio manuale e script automatizzato
Tradizionalmente, il monitoraggio degli stati dei nodi Proxmox comporta l’esecuzione manuale di comandi e la registrazione dei risultati, un processo che richiede molto tempo ed è soggetto a errori. Questo script automatizza l’intero flusso di lavoro, garantendo una raccolta dei dati coerente e accurata. Rispetto ad altri metodi, come l’utilizzo di strumenti di monitoraggio di terze parti, questo script offre una soluzione leggera e personalizzabile su misura per gli ambienti Proxmox.
Domande frequenti
- Che cos’è Proxmox VE? Proxmox VE è un ambiente di virtualizzazione server open-source utilizzato per gestire virtual machine, container e storage.
- Perché è necessario eseguire lo script come root? Lo script per monitorare i nodi Proxmox richiede i privilegi di root per accedere alle informazioni sullo stato dei nodi Proxmox ed eseguire i controlli di sistema necessari.
- Cosa succede se il comando pvesh fallisce? Se il comando pvesh fallisce, lo script per monitorare i nodi Proxmox visualizza un messaggio di errore e termina.
- Posso usare questo script senza lo strumento ninjarmm-cli? No, lo script per monitorare i nodi Proxmox si basa su ninjarmm-cli per salvare le informazioni sullo stato dei nodi nei campi personalizzati.
Implicazioni
L’uso di questo script per monitorare i nodi Proxmox assicura che le informazioni sullo stato dei nodi siano raccolte e registrate in modo coerente, il che è fondamentale per mantenere l’integrità dell’infrastruttura IT. Automatizzando questo processo, i professionisti IT possono concentrarsi su attività più strategiche, migliorando l’efficienza complessiva e riducendo il rischio di problemi passati inosservati.
Raccomandazioni
- Esegui lo script regolarmente: Pianifica l’esecuzione dello script per monitorare i nodi Proxmox a intervalli regolari per garantire informazioni aggiornate sullo stato dei nodi.
- Monitora gli output: Controlla regolarmente i campi personalizzati o i log di output per rilevare eventuali anomalie.
- Assicurati che gli strumenti siano installati: Verifica che sia pvesh che ninjarmm-cli siano installati e accessibili sul sistema.
Considerazioni finali
L’automazione del monitoraggio dello stato dei nodi con questo script migliora l’efficienza e l’affidabilità della gestione dei cluster Proxmox. Integrando questo script per monitorare i nodi Proxmox nel tuo flusso di lavoro, potrai garantire aggiornamenti di stato tempestivi e accurati, migliorando in ultima analisi la stabilità e le prestazioni del tuo ambiente IT.
La suite di strumenti NinjaOne, che include NinjaRMM, fornisce ulteriori capacità per una gestione IT completa, integrando le funzionalità di questo script.