Nell’attuale panorama IT, gestione e monitoraggio efficienti degli ambienti virtuali sono fondamentali per gli amministratori di sistema e i Managed Service Provider (MSP). Gli ambienti virtuali, come quelli gestiti da Proxmox, richiedono una supervisione regolare per garantire un funzionamento normale e prestazioni ottimali.
L’automazione della raccolta delle informazioni sullo stato delle virtual machine (VM) e di quelle di base non solo fa risparmiare tempo, ma riduce anche il rischio di errori umani. In questo articolo analizzeremo uno script bash progettato per recuperare e visualizzare lo stato e i dettagli delle VM guest Proxmox, per evidenziare la sua utilità e il modo in cui può semplificare le operazioni IT.
Background
Proxmox è una popolare soluzione open-source per la gestione della virtualizzazione, che combina KVM e la virtualizzazione basata su container in un’unica piattaforma. Per i professionisti IT e gli MSP, il monitoraggio dello stato delle VM Proxmox e dei container è un’attività di routine ma vitale. Questo script risponde alla necessità di un metodo automatizzato e coerente per raccogliere e visualizzare le informazioni sulla VM, presentandole in un formato di facile accesso e interpretazione.
Lo script per visualizzare le informazioni sulle VM Proxmox
#!/usr/bin/env bash # Description: This script gets the status and basic info of all Proxmox guests on a host and saves it to a WYSIWYG custom field. # # Release Notes: Initial Release # 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). # # Below are all the (case sensitive) valid parameters for this script. # Only the custom field name is required! # Preset Parameter: "Custom_Field_Name" # Custom_Field_Name: The name of the WYSIWYG custom field to save the VM info to. Custom_Field_Name=$1 if [[ -n "${customFieldName}" ]]; then Custom_Field_Name="${customFieldName}" fi if [[ -z "${Custom_Field_Name}" || "${Custom_Field_Name}" == "null" ]]; then echo "The custom field name is required." echo " Example: guests" exit 1 fi # Check that we have the required tools if ! command -v pvesh &> /dev/null; then echo "The Proxmox VE API tool 'pvesh' is required." exit 1 fi if ! command -v python3 &> /dev/null; then echo "The python3 is required. Should already be installed." exit 1 fi # Check that we are running as root if [[ $EUID -ne 0 ]]; then echo "This script must be run as root." exit 1 fi function SetCustomField() { /opt/NinjaRMMAgent/programdata/ninjarmm-cli "$@" } # Get the status and basic info of all Proxmox VMs on a host qemu_guests=$(pvesh get /nodes/localhost/qemu --output-format=json) # Create a table to store the VM info with the headers: Name, Status, Memory, CPUs, Disk Sizes vm_table="<table><tr><th>Status</th><th>ID</th><th>Name</th><th>Memory</th><th>CPUs</th><th>Disk Sizes Combined</th></tr>" # Loop through each VM and add the info to the table qemu_table=$(echo "$qemu_guests" | python3 -c ' import sys, json # Function to convert bytes to human readable format def human_readable_size(size): for unit in ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB"]: if size < 1024: return f"{size:.2f} {unit}" size /= 1024 qemu_guests = json.load(sys.stdin) vm_table = "" for qemu in qemu_guests: qemu_id = qemu["vmid"] qemu_name = qemu["name"] qemu_status = qemu["status"] # Convert the memory from bytes to GB qemu_mem = human_readable_size(qemu["maxmem"]) qemu_cpus = qemu["cpus"] # Convert the disk size from bytes to GB qemu_disk = human_readable_size(qemu["maxdisk"]) # Add HTML blank space if values are empty qemu_id = qemu_id if qemu_id else " " qemu_name = qemu_name if qemu_name else " " qemu_mem = qemu_mem if qemu_mem else " " qemu_cpus = qemu_cpus if qemu_cpus else " " qemu_disk = qemu_disk if qemu_disk else " " if "running" in qemu_status: status_text = "<tr class='"'success'"'><td>Running</td>" elif "stopped" in qemu_status: status_text = "<tr class='"'danger'"'><td>Stopped</td>" else: status_text = "<tr class='"'other'"'><td>{}</td>".format(qemu_status) vm_table += "{}<td>{}</td><td>{}</td><td>{}</td><td>{}</td><td>{}</td></tr>".format( status_text, qemu_id, qemu_name, qemu_mem, qemu_cpus, qemu_disk ) print(vm_table) ') vm_table="$vm_table$qemu_table" # Loop through each lxc and add the info to the table lxc_guests=$(pvesh get /nodes/localhost/lxc --output-format=json) # Loop through each lxc and add the info to the table lxc_table=$(echo "$lxc_guests" | python3 -c ' import sys, json # Function to convert bytes to human readable format def human_readable_size(size): for unit in ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB"]: if size < 1024: return f"{size:.2f} {unit}" size /= 1024 lxc_guests = json.load(sys.stdin) vm_table = "" for lxc in lxc_guests: lxc_id = lxc["vmid"] lxc_name = lxc["name"] lxc_status = lxc["status"] # Convert the memory from bytes to GB lxc_mem = human_readable_size(lxc["maxmem"]) lxc_cpus = lxc["cpus"] # Convert the disk size from bytes to GB lxc_disk = human_readable_size(lxc["maxdisk"]) # Add HTML blank space if values are empty lxc_id = lxc_id if lxc_id else " " lxc_name = lxc_name if lxc_name else " " lxc_mem = lxc_mem if lxc_mem else " " lxc_cpus = lxc_cpus if lxc_cpus else " " lxc_disk = lxc_disk if lxc_disk else " " if "running" in lxc_status: status_text = "<tr class='"'success'"'><td>Running</td>" elif "stopped" in lxc_status: status_text = "<tr class='"'danger'"'><td>Stopped</td>" else: status_text = "<tr class='"'other'"'><td>{}</td>".format(lxc_status) vm_table += "{}<td>{}</td><td>{}</td><td>{}</td><td>{}</td><td>{}</td></tr>".format( status_text, lxc_id, lxc_name, lxc_mem, lxc_cpus, lxc_disk ) print(vm_table) ') vm_table="$vm_table$lxc_table" # Close the table vm_table="$vm_table</table>" # Highlight the running and stopped VMs vm_table=$(echo "$vm_table" | sed 's/<tr><td>running<\/td>/<tr class="success"><td>Running<\/td>/') vm_table=$(echo "$vm_table" | sed 's/<tr><td>stopped<\/td>/<tr class="danger"><td>Stopped<\/td>/') # Save the table to the custom field if ! SetCustomField set "$Custom_Field_Name" "$vm_table"; then echo "Failed to save the Proxmox VM info to the custom field: $Custom_Field_Name" exit 1 fi echo "The Proxmox VM info has been saved to the custom field: $Custom_Field_Name"
Analisi dettagliata
Lo script bash fornito recupera lo stato e le informazioni essenziali di tutte le VM guest di Proxmox su un host e salva questi dati in un campo personalizzato. Ciò è particolarmente utile per gli ambienti con numerose virtual machine, dove i controlli manuali possono richiedere molto tempo e sono soggetti a errori.
Spiegazione passo per passo
1. Inizializzazione dello script e gestione dei parametri:
- Lo script per visualizzare le informazioni sulle VM Proxmox inizia definendo il nome del campo personalizzato, che è un parametro obbligatorio. In questo campo personalizzato verranno memorizzate le informazioni sulla virtual machine.
- Se il nome del campo personalizzato non viene fornito o non è valido, lo script per visualizzare le informazioni sulle VM Proxmox mostra un messaggio di errore.
2. Verifica della disponibilità degli strumenti:
- Lo script per visualizzare le informazioni sulle VM Proxmox verifica la disponibilità degli strumenti necessari: pvesh (Proxmox VE API tool) e python3. Se questi strumenti non vengono trovati, lo script mostra un messaggio di errore appropriato.
3. Verifica dei privilegi di root:
- Lo script per visualizzare le informazioni sulle VM Proxmox controlla se è in esecuzione con i privilegi di root. In caso contrario, mostra un messaggio di errore.
4. Recupero delle informazioni sulla VM Proxmox:
- Utilizzando pvesh, lo script per visualizzare le informazioni sulle VM Proxmox recupera informazioni sulle virtual machine QEMU e sui container LXC dall’host Proxmox.
- Queste informazioni vengono elaborate con Python per generare una tabella HTML con dettagli quali lo stato, l’ID, il nome, la memoria, le CPU e le dimensioni combinate delle unità.
5. Generazione della tabella HTML:
- Lo script Python incorporato nello script bash formatta i dati JSON recuperati in una tabella HTML. Questa tabella è strutturata in modo da evidenziare in modo diverso le virtual machine in esecuzione e quelle interrotte.
6. Salvataggio della tabella in un campo personalizzato:
- La tabella HTML generata viene salvata nel campo personalizzato specificato utilizzando lo strumento NinjaRMM CLI.
Casi d’uso potenziali
Immagina un MSP che gestisce più ambienti Proxmox per diversi clienti. Controllare manualmente lo stato e l’allocazione delle risorse di ogni virtual machine su diversi host può essere complicato. Distribuendo questo script, l’MSP può automatizzare la raccolta di questi dati e averli a disposizione in un campo personalizzato, accessibile dalla propria interfaccia di gestione. Questo non solo aumenta l’efficienza, ma garantisce anche la possibilità di rispondere rapidamente a qualsiasi problema si presenti.
Confronti
Altri metodi per raccogliere informazioni sulle virtual machine potrebbero comportare l’esecuzione manuale di comandi e la compilazione dei risultati, che richiedono molto tempo e sono soggetti a errori. Strumenti come l’interfaccia web di Proxmox forniscono le informazioni necessarie, ma richiedono una navigazione e un controllo manuali. Questo script, invece, automatizza l’intero processo per visualizzare le informazioni sulle VM Proxmox, garantendo coerenza e facendo risparmiare tempo prezioso.
Domande frequenti
D: Cosa succede se lo script per visualizzare le informazioni sulle VM Proxmox non riesce a trovare pvesh o python3?
R: Lo script per visualizzare le informazioni sulle VM Proxmox verifica la presenza di queste dipendenze all’inizio e mostra un chiaro messaggio di errore se non vengono trovate, guidando l’utente a installare gli strumenti mancanti.
D: Lo script può essere eseguito senza i privilegi di root?
R: No, lo script per visualizzare le informazioni sulle VM Proxmox deve essere eseguito come root per accedere alle informazioni di sistema necessarie.
D: Cosa succede se il nome del campo personalizzato non viene fornito?
R: Lo script per visualizzare le informazioni sulle VM Proxmox richiede il nome del campo personalizzato come parametro. Se non viene fornito, lo script uscirà con un messaggio di errore.
Implicazioni
L’automazione della raccolta di informazioni sulle VM Proxmox non solo migliora l’efficienza operativa, ma aumenta anche la sicurezza informatica. Controlli regolari e automatizzati assicurano che tutte le virtual machine siano registrate e funzionino come previsto, riducendo il rischio di downtime passati inosservati o di errata allocazione delle risorse.
Raccomandazioni
Quando utilizzi questo script, assicurati che:
- Lo script per visualizzare le informazioni sulle VM Proxmox venga eseguito regolarmente per mantenere aggiornate le informazioni sulle VM.
- I permessi siano impostati in modo che lo script venga eseguito come root.
- Le dipendenze (pvesh, python3, NinjaRMM CLI) siano installate e configurate correttamente.
Considerazioni finali
Questo script per visualizzare le informazioni sulle VM Proxmox è uno strumento prezioso per i professionisti IT che gestiscono ambienti Proxmox, in quanto semplifica il processo di raccolta e visualizzazione delle informazioni sulle VM Proxmox. Per coloro che utilizzano NinjaOne, questo script si integra ulteriormente nel loro flusso di lavoro, rendendo più facile mantenere una visione chiara e aggiornata della loro infrastruttura virtuale. Automatizzando le attività di routine, i professionisti IT possono concentrarsi su attività più strategiche, migliorando la produttività complessiva e l’affidabilità del sistema.