La gestión eficiente de la infraestructura informática es crucial para mantener la estabilidad y el rendimiento del entorno digital de una organización. Una de las tareas esenciales para los profesionales de TI y los proveedores de servicios gestionados (MSP) es monitorizar el estado del nodo Proxmox Virtual Environment (PVE). El script proporcionado ofrece una solución sólida para automatizar este proceso, garantizando que la información sobre el estado de los nodos esté disponible y actualizada.
Background
Proxmox VE es un entorno de virtualización de servidores de código abierto utilizado por muchos profesionales de TI para gestionar máquinas virtuales, contenedores y almacenamiento. La supervisión del estado de los nodos dentro de un clúster Proxmox es fundamental para el mantenimiento proactivo y la solución de problemas.
Este script para monitorizar el estado del nodo Proxmox simplifica el proceso recuperando información sobre el estado de los nodos y guardándola en campos personalizados para facilitar el acceso y el análisis. Esta automatización es especialmente valiosa para los MSP que gestionan entornos de múltiples clientes, ya que reduce el esfuerzo manual y minimiza el riesgo de supervisión.
El script para monitorizar el estado del nodo 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
Análisis detallado
El script está diseñado para monitorizar el estado del nodo Proxmox y guardar la información en un campo personalizado multilínea o en un campo personalizado WYSIWYG. Desglosemos su funcionalidad paso a paso:
1. Argumentos de la línea de comandos
- El script acepta dos argumentos de línea de comandos: los nombres del campo personalizado multilínea y del campo personalizado WYSIWYG.
2. Validación de campos personalizados
- Comprueba si los campos personalizados están configurados y se asegura de que no sean nulos o iguales.
3. Comprobación de herramientas y permisos
- El script para monitorizar el estado del nodo Proxmox verifica la presencia de las herramientas necesarias (pvesh y ninjarmm-cli) y comprueba si se está ejecutando con privilegios de root.
4. Recuperar estado del nodo
- Ejecuta el comando pvesh get /cluster/status –noborder para recuperar el estado de los nodos del clúster Proxmox.
5. Tratamiento de datos
- La salida se procesa para extraer información relevante, como el ID del nodo, el nombre, la dirección IP y el estado en línea. Esta información se formatea en una tabla.
6. Guardar en campos personalizados
- Los datos formateados se guardan en los campos personalizados especificados mediante el comando ninjarmm-cli. Si se especifica el campo WYSIWYG, los datos se convierten en una tabla HTML.
7. Salida
- Si no se especifica ningún campo personalizado, el script para monitorizar el estado del nodo Proxmox muestra el estado del nodo directamente en la consola.
Posibles casos de uso
Estudio de caso: un profesional de TI gestiona un clúster Proxmox
Imaginemos a un profesional de TI llamado Alex, que gestiona un clúster Proxmox para una empresa mediana. Alex debe supervisar periódicamente el estado de los nodos para asegurarse de que están en línea y funcionan correctamente. Utilizando este script para monitorizar el estado del nodo Proxmox, Alex puede automatizar la recuperación y el registro de los estados de los nodos en campos personalizados dentro de su sistema de monitorización. Esta automatización ahorra a Alex un tiempo considerable y garantiza la rápida detección y resolución de cualquier problema.
Comparaciones
Supervisión manual vs. scripts automatizados
Tradicionalmente, la supervisión del estado de los nodos implica la ejecución manual de comandos y el registro de los resultados, un proceso que requiere mucho tiempo y es propenso a errores. Este script para monitorizar el estado del nodo Proxmox automatiza todo el flujo de trabajo, garantizando una recogida de datos coherente y precisa. En comparación con otros métodos, como el uso de herramientas de monitorización de terceros, este script para monitorizar el estado del nodo Proxmox ofrece una solución ligera y personalizable adaptada a los entornos Proxmox.
FAQ
- ¿Qué es Proxmox VE? Proxmox VE es un entorno de virtualización de servidores de código abierto utilizado para gestionar máquinas virtuales, contenedores y almacenamiento.
- ¿Por qué tengo que ejecutar el script como root? El script para monitorizar el estado del nodo Proxmox requiere privilegios de root para acceder a la información de estado del nodo Proxmox y realizar las comprobaciones necesarias del sistema.
- ¿Qué ocurre si falla el comando pvesh? Si el comando pvesh falla, el script mostrará un mensaje de error y terminará.
- ¿Puedo utilizar este script sin la herramienta ninjarmm-cli? No, el script para monitorizar el estado del nodo Proxmox depende de ninjarmm-cli para guardar la información del estado del nodo en campos personalizados.
Implicaciones
El uso de este script para monitorizar el estado del nodo Proxmox garantiza que la información sobre el estado de los nodos se recopile y registre de forma coherente, lo que resulta crucial para mantener el correcto estado de la infraestructura de TI. Al automatizar este proceso, los profesionales de TI pueden centrarse en tareas más estratégicas, mejorando la eficacia general y reduciendo el riesgo de que surjan problemas inadvertidos.
Recomendaciones
- Ejecuta el script con regularidad: programa la ejecución del script para monitorizar el estado del nodo Proxomox a intervalos regulares para garantizar la actualización de la información sobre el estado de los nodos.
- Monitoriza las salidas: comprueba regularmente los campos personalizados o los registros de salida para detectar cualquier anomalía.
- Asegúrate de que las herramientas están instaladas: comprueba que tanto pvesh como ninjarmm-cli están instalados y accesibles en el sistema.
Reflexiones finales
Este script para monitorizar el estado del nodo Proxomox con emejora la eficiencia y fiabilidad de la gestión de clusters Proxmox. Al integrar este script para monitorizar el estado del nodo Proxmox en tu flujo de trabajo, puedes garantizar actualizaciones de estado puntuales y precisas, mejorando en última instancia la estabilidad y el rendimiento de tu entorno de TI.
El conjunto de herramientas de NinjaOne, incluyendo NinjaOne RMM, proporciona capacidades adicionales para la gestión integral de TI, complementando la funcionalidad de este script.