Une gestion efficace de l’infrastructure informatique est essentielle pour maintenir la stabilité et la performance de l’environnement numérique d’une entreprise. L’une des tâches essentielles des professionnels de l’informatique et des fournisseurs de services gérés (MSP) consiste à surveiller l’état des nœuds au sein d’un cluster Proxmox Virtual Environment (PVE). Le script fourni offre une solution performante pour automatiser ce processus, garantissant que les informations sur l’état des nœuds sont facilement disponibles et à jour.
Contexte
Proxmox VE est un environnement de virtualisation de serveurs open-source utilisé par de nombreux professionnels de l’informatique pour gérer les machines virtuelles, les conteneurs et le stockage. La surveillance de l’intégrité et de l’état des nœuds au sein d’un cluster Proxmox est essentielle pour la maintenance proactive et le dépannage.
Ce script simplifie le processus en récupérant les informations sur l’état des nœuds et en les enregistrant dans des champs personnalisés pour faciliter l’accès et l’analyse. Cette automatisation est particulièrement précieuse pour les entreprises MSP qui gèrent plusieurs environnements clients, car elle réduit les efforts manuels et minimise le risque de négligence.
Le script
#!/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
Description détaillée
Le script est conçu pour récupérer le statut d’un nœud Proxmox et enregistrer les informations dans un champ personnalisé multiligne ou un champ personnalisé WYSIWYG. Découvrons ses fonctionnalités étape par étape :
1. Arguments de la ligne de commande
- Le script accepte deux arguments de ligne de commande : les noms du champ personnalisé multiligne et du champ personnalisé WYSIWYG.
2. Validation des champs personnalisés
- Il vérifie si les champs personnalisés sont définis et s’assure qu’ils ne sont pas nuls ou identiques.
3. Vérification des outils et des autorisations
- Le script vérifie la présence des outils nécessaires (pvesh et ninjarmm-cli) et vérifie s’il s’exécute avec un accès root.
4. Récupérer l’état du nœud
- Il exécute la commande pvesh get /cluster/status –noborder pour récupérer l’état des nœuds du cluster Proxmox.
5. Traitement des données
- La sortie est traitée pour extraire les informations pertinentes, telles que l’ID du nœud, le nom, l’adresse IP et l’état en ligne. Ces informations sont présentées sous forme de tableau.
6. Enregistrer dans les champs personnalisés
- Les données formatées sont enregistrées dans les champs personnalisés spécifiés à l’aide de la commande ninjarmm-cli. Si le champ WYSIWYG est spécifié, les données sont converties en tableau HTML.
7. Sortie
- Si aucun champ personnalisé n’est spécifié, le script affiche l’état du nœud directement sur la console.
Cas d’utilisation potentiels
Étude de cas : Un professionnel de l’informatique qui gère un cluster Proxmox
Imaginez un professionnel de l’informatique nommé Alex, qui gère un cluster Proxmox pour une entreprise de taille moyenne. Alex doit contrôler régulièrement l’état des nœuds pour s’assurer qu’ils sont en ligne et qu’ils fonctionnent correctement. En utilisant ce script, Alex peut automatiser la récupération et l’enregistrement des états des nœuds dans des champs personnalisés au sein de son système de surveillance. Cette automatisation permet à Alex de gagner beaucoup de temps et de s’assurer que tout problème est rapidement détecté et traité.
Comparaisons
Comparaison entre la surveillance manuelle et un script automatisé
Traditionnellement, le contrôle de l’état des nœuds implique l’exécution manuelle de commandes et l’enregistrement des résultats, un processus qui prend du temps et qui est sujet aux erreurs. Ce script automatise l’ensemble du flux de travail, garantissant ainsi une collecte de données cohérente et précise. Par rapport à d’autres méthodes, telles que l’utilisation d’outils de surveillance tiers, ce script offre une solution légère et personnalisable adaptée aux environnements Proxmox.
FAQ
- Qu’est-ce que Proxmox VE ? Proxmox VE est un environnement de virtualisation de serveurs open-source utilisé pour gérer les machines virtuelles, les conteneurs et le stockage.
- Pourquoi dois-je exécuter le script en tant que root ? Le script requiert les privilèges d’administrateur pour accéder aux informations sur l’état des nœuds Proxmox et effectuer les vérifications nécessaires sur le système.
- Que se passe-t-il si la commande pvesh échoue ? Si la commande pvesh échoue, le script affiche un message d’erreur et se termine.
- Puis-je utiliser ce script sans l’outil ninjarmm-cli ? Non, le script s’appuie sur ninjarmm-cli pour enregistrer les informations sur l’état des nœuds dans des champs personnalisés.
Implications
L’utilisation de ce script garantit que les informations relatives à l’état des nœuds sont collectées et enregistrées de manière cohérente, ce qui est essentiel pour maintenir l’intégrité de l’infrastructure informatique. En automatisant ce processus, les professionnels de l’informatique peuvent se concentrer sur des tâches plus stratégiques, ce qui améliore l’efficacité globale et réduit le risque de problèmes passant inaperçus.
Recommandations
- Exécuter régulièrement: Planifiez l’exécution du script à intervalles réguliers afin de garantir la mise à jour des informations relatives à l’état des nœuds.
- Surveiller les résultats: Vérifiez régulièrement les champs personnalisés ou les journaux de sortie pour détecter toute anomalie.
- S’assurer que les outils sont installés: Vérifiez que pvesh et ninjarmm-cli sont installés et accessibles sur le système.
Conclusion
L’automatisation de la surveillance de l’état des nœuds à l’aide de ce script améliore l’efficacité et la fiabilité de la gestion des clusters Proxmox. En intégrant ce script dans votre flux de travail, vous pouvez garantir des mises à jour d’état précises et opportunes, ce qui améliore la stabilité et les performances de votre environnement informatique.
La suite d’outils de NinjaOne, y compris NinjaRMM, fournit des capacités supplémentaires pour une gestion informatique complète, complétant la fonctionnalité de ce script.