Come monitorare i nodi Proxmox e il loro stato con uno script Bash automatico

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

  1. Che cos’è Proxmox VE? Proxmox VE è un ambiente di virtualizzazione server open-source utilizzato per gestire virtual machine, container e storage.
  2. 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.
  3. 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.
  4. 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.

Passi successivi

La creazione di un team IT efficiente ed efficace richiede una soluzione centralizzata che funga da principale strumento per la fornitura di servizi. NinjaOne consente ai team IT di monitorare, gestire, proteggere e supportare tutti i dispositivi, ovunque essi si trovino, senza la necessità di una complessa infrastruttura locale.

Per saperne di più sulla distribuzione remota di script con NinjaOne, fai un tour dal vivo, o inizia la tua prova gratuita della piattaforma NinjaOne.

Categorie:

Ti potrebbe interessare anche

×

Guarda NinjaOne in azione!

Inviando questo modulo, accetto La politica sulla privacy di NinjaOne.

Termini e condizioni NinjaOne

Cliccando sul pulsante “Accetto” qui sotto, dichiari di accettare i seguenti termini legali e le nostre condizioni d’uso:

  • Diritti di proprietà: NinjaOne possiede e continuerà a possedere tutti i diritti, i titoli e gli interessi relativi allo script (compreso il copyright). NinjaOne ti concede una licenza limitata per l’utilizzo dello script in conformità con i presenti termini legali.
  • Limitazione d’uso: Puoi utilizzare lo script solo per legittimi scopi personali o aziendali interni e non puoi condividere lo script con altri soggetti.
  • Divieto di ripubblicazione: In nessun caso ti è consentito ripubblicare lo script in una libreria di script appartenente o sotto il controllo di un altro fornitore di software.
  • Esclusione di garanzia: Lo script viene fornito “così com’è” e “come disponibile”, senza garanzie di alcun tipo. NinjaOne non promette né garantisce che lo script sia privo di difetti o che soddisfi le tue esigenze o aspettative specifiche.
  • Assunzione del rischio: L’uso che farai dello script è da intendersi a tuo rischio. Riconosci che l’utilizzo dello script comporta alcuni rischi intrinseci, che comprendi e sei pronto ad assumerti.
  • Rinuncia e liberatoria: Non riterrai NinjaOne responsabile di eventuali conseguenze negative o indesiderate derivanti dall’uso dello script e rinuncerai a qualsiasi diritto legale o di equità e a qualsiasi rivalsa nei confronti di NinjaOne in relazione all’uso dello script.
  • EULA: Se sei un cliente NinjaOne, l’uso dello script è soggetto al Contratto di licenza con l’utente finale (EULA) applicabile.