Ir al contenido
  1. Posts/

Monitoreando tu cluster de Proxmox con Prometheus y Grafana

·9 mins
Home Lab Proxmox

Monitoreando tu cluster Proxmox con Prometheus y Grafana
#

Este post te guiará a través de la configuración del monitoreo de Proxmox utilizando Prometheus y Grafana. Al implementar esta solución, obtendrás información valiosa sobre el estado y el rendimiento de tu entorno Proxmox, lo que te permitirá identificar posibles problemas antes de que se intensifiquen y optimizar la asignación de recursos para tus máquinas virtuales y contenedores.

¿Quién debería seguir esta guía?

Esta guía es ideal para aquellos que ya están familiarizados con Proxmox y desean agregar una capa de monitoreo a su configuración. Será útil tener una comprensión básica de los conceptos de Linux y familiaridad con la línea de comandos.

La configuración
#

Configuraré mi monitoreo de manera que no tenga que instalar nada en mis nodos Proxmox. En su lugar, instalaré la pila de monitoreo completa en una de las máquinas virtuales que se ejecutan en mi cluster.

Al igual que en el siguiente diagrama, tendré un servidor AlmaLinux ejecutándose en mi cluster que alojará lo siguiente:

  1. Servidor Prometheus
  2. Grafana
  3. Exportador Prometheus VE
flowchart LR; PV1[PVE1]-->PE[PVE Exporter]; subgraph ide1 [AlmaLinux VM] PE[PVE Exporter]-->PS[Prometheus Server] --> G[Grafana] end PV2[PVE2]-->PE PV3[PVE3]-->PE; PV4[PVE4]-->PE; style ide1 fill:#888 stroke:#000,stroke-width:4px,stroke-dasharray: 5 5

Consideraciones de seguridad:

Si bien la guía muestra el proceso de configuración, es importante tener en cuenta que el ejemplo utiliza una contraseña débil para Prometheus.

En un entorno real, siempre elige una contraseña segura y única para proteger tu configuración de monitoreo.

Introducción a las herramientas:
#

Prometheus:
#

Un sistema de monitoreo de código abierto que actúa como un recolector central, extrayendo métricas de diversas fuentes como Proxmox VE a intervalos regulares y almacenándolas en una base de datos de series temporales.

Grafana:
#

Una plataforma de código abierto para visualizar datos. Te permite crear paneles interactivos que muestran las métricas recopiladas por Prometheus, lo que facilita la comprensión del uso de recursos, identificar tendencias y solucionar problemas.

Con una combinación de estas dos herramientas en tu cluster Proxmox puedes obtener los siguientes beneficios:

  • Visibilidad mejorada: Obtén información en tiempo real sobre el rendimiento de Proxmox VE, incluido el uso de CPU, memoria, almacenamiento y red.
  • Detección proactiva de problemas: identifica posibles problemas antes de que se intensifiquen, lo que te permite tomar medidas preventivas.
  • Gestión de recursos mejorada: optimiza la asignación de recursos para tus máquinas virtuales y contenedores en función de los datos de uso real.
  • Toma de decisiones informada: obtén información basada en datos para tomar decisiones informadas sobre cómo escalar tu infraestructura Proxmox VE.

Configuración del monitoreo
#

Prometheus
#

Instalación
#

Hay muchas opciones para instalar, usaré uno de los binarios precompilados oficiales que se proporcionan en su página de descargas: https://prometheus.io/download/.

Así que descargaré su archivo tar y lo extraeré con el siguiente comando.

tar xfvz prometheus.tar.gz -C prometheus

Primero, agrega un nuevo usuario específico para el uso de Prometheus

sudo useradd --no-create-home --shell /bin/false prometheus

Crea los directorios necesarios para Prometheus y cambia la propiedad de ellos.

sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
sudo chown prometheus:prometheus /etc/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus

Comienza copiando las herramientas esenciales de Prometheus (prometheus y promtool) a sus ubicaciones designadas:

cp prometheus/prometheus /usr/local/bin/
cp prometheus/promtool /usr/local/bin/

Asegúrate de que el usuario de Prometheus sea el propietario de estos binarios para una ejecución adecuada:

chown prometheus:prometheus /usr/local/bin/prometheus
chown prometheus:prometheus /usr/local/bin/promtool

Configuración
#

Utiliza un editor de texto (en el caso de AlmaLinux, vi viene preinstalado) para crear el archivo de configuración de Prometheus:

vi /etc/prometheus/prometheus.yml

Agrega la configuración:

global:
 scrape_interval: 10s

scrape_configs:
 - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
     - targets: ['localhost:9090']
 - job_name: 'pve'
    static_configs:
     - targets:
      - <IP of node 1> # pve1
      - <IP of node 2> # pve2
    metrics_path: /pve
    params:
     module: [default]
     cluster: ['1']
     node: ['1']
    relabel_configs:
     - source_labels: [__address__]
      target_label: __param_target
     - source_labels: [__param_target]
      target_label: instance
     - target_label: __address__
      replacement: <IP from the VM where the exporter is installed>:9221

En este archivo, definimos:

  • El intervalo de raspado: la frecuencia con la que Prometheus recopila datos.
  • Un trabajo llamado ‘prometheus’ para raspar las propias métricas de Prometheus.
  • Un trabajo llamado ‘pve’ para raspar las métricas de nuestros nodos Proxmox VE.
  • La ruta a la ruta de la API del exportador PVE.
  • Parámetros para especificar el clúster y el nodo a los que se hace referencia en las métricas.
  • Etiquetas de re-etiquetado para transformar las etiquetas de origen en las etiquetas deseadas.

Guarda y ajusta la propiedad: Una vez que hayas agregado la configuración, guarda el archivo y asegúrate de que el usuario de Prometheus sea el propietario:

sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml

Configurar Prometheus como servicio de Linux
#

Dado que quiero monitorear mi cluster en cualquier momento, configuraré el servidor Prometheus como un servicio de Linux usando Systemd:

Agrega esto al archivo /etc/systemd/system/prometheus.service:

[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
  --config.file /etc/prometheus/prometheus.yml \
  --storage.tsdb.path /var/lib/prometheus/ \
  --web.console.templates=/etc/prometheus/consoles \
  --web.console.libraries=/etc/prometheus/console_libraries

[Install]
WantedBy=multi-user.target

Aplicar cambios y verificar el estado:

Recarga systemd: Después de guardar la configuración de Prometheus, informa a systemd sobre los cambios usando:

sudo systemctl daemon-reload

Inicia Prometheus: Finalmente, inicia el servicio Prometheus:

sudo systemctl start prometheus
sudo systemctl enable prometheus

Verificar estado: Para confirmar si Prometheus se está ejecutando correctamente, verifica su estado con:

sudo systemctl status prometheus

Para ahora, deberías tener Prometheus ejecutándose en tu máquina virtual y accesible desde la interfaz web en el puerto 9090.

Grafana
#

Instalación
#

En el caso de la instalación de Grafana, usaré el administrador de paquetes predeterminado para instalar la versión OSS de Grafana:

sudo dnf install grafana

Una vez finalizada la instalación, inicia y habilita el servidor Grafana con estos comandos:

sudo systemctl start grafana-server
sudo systemctl enable grafana-server

Acceso a la interfaz web: Con Grafana en ejecución, puedes acceder a su interfaz web en http://<IP de la Máquina virtual>:3000 en tu navegador web.

Inicio de sesión inicial: Las credenciales predeterminadas son nombre de usuario: ‘admin’ y contraseña: ‘admin’. Se te pedirá que cambies la contraseña al iniciar sesión por primera vez por razones de seguridad.

Configuración avanzada (opcional): Para obtener más configuración (por ejemplo, alertas por correo electrónico o cambios de puerto), edita el archivo /etc/grafana/grafana.ini utilizando cualquier editor de texto:

sudo vi /etc/grafana/grafana.ini

Realiza los ajustes necesarios dentro del archivo y guarda los cambios.

Usaremos Prometheus-pve-exporter: https://github.com/prometheus-pve/prometheus-pve-exporter para enviar las métricas de nuestros clusters a nuestro servidor Prometheus y desde allí a Grafana.

Instalación
#

Asegúrate de que venv esté instalado (es decir, apt install python3-venv), luego prepara un nuevo entorno para el Exportador PVE:

python3 -m venv /opt/prometheus-pve-exporter

Instala el Exportador PVE en el nuevo entorno:

/opt/prometheus-pve-exporter/bin/pip install prometheus-pve-exporter

Configuración
#

Antes de ejecutar el exportador, debemos crear un usuario Proxmox que el exportador utilizará para raspar las métricas. Crea un nuevo usuario en la sección Datacenter -> Usuarios. Completa el nombre de usuario, establece el dominio en Autenticación Proxmox VE y dale tu contraseña.

Creación del usuario promexporter:
Crea el usuario promexporter en tu cluster Proxmox
Regresa a los Permisos. Establece la ruta a ‘/’. Selecciona tu usuario. Dale el rol Auditor PVE.
Creación de permisos de usuario promexporter:
Agrega el rol Auditor PVE al nuevo usuario

A continuación, crea un archivo de configuración para el exportador: /etc/prometheus/pve.yml En este archivo, debes especificar los detalles del usuario del usuario promexporter que acabamos de crear y agregaremos una bandera para omitir la verificación del cluster Proxmox:

default:
  user: promexporter@pve
  password: supersecretpassword
  verify_ssl: false

Exportador PVE como servicio de Linux
#

Dado que quiero monitorear mi cluster en cualquier momento, configuraré el Exportador PVE como un servicio de Linux usando Systemd:

Agrega esto al archivo /etc/systemd/system/prometheus-pve-exporter.service:

[Unit]
Description=Prometheus exporter for Proxmox VE
Documentation=https://github.com/znerol/prometheus-pve-exporter

[Service]
Restart=always
User=prometheus
ExecStart=/opt/prometheus-pve-exporter/bin/pve_exporter /etc/prometheus/pve.yml

[Install]
WantedBy=multi-user.target

Aplicar cambios y verificar el estado:

Recarga systemd: Después de guardar la configuración del exportador, informa a systemd sobre los cambios usando:

sudo systemctl daemon-reload

Inicia el servicio: Finalmente, inicia el servicio de exportador PVE:

sudo systemctl start prometheus-pve-exporter
sudo systemctl enable prometheus-pve-exporter

Verificar estado: Para confirmar si el Exportador se está ejecutando correctamente, verifica su estado con:

sudo systemctl status prometheus-pve-exporter

Para ahora, deberías tener el exportador ejecutándose en tu máquina virtual y sus métricas accesibles desde la interfaz web en el puerto 9221.

Puedes acceder a las métricas con curl:

Accesing promexporter metrics:

Asociando Prometheus con el exportador PVE
#

Ahora, necesitamos configurar el servidor Prometheus para que recopile las métricas expuestas por el Exportador PVE de Proxmox.  Para hacerlo, debemos editar el archivo de configuración de Prometheus /etc/prometheus/prometheus.yml:

global:
 scrape_interval: 10s

scrape_configs:
 - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
     - targets: ['localhost:9090']
 - job_name: 'pve'
    static_configs:
     - targets:
      - <IP of node 1> # pve1
      - <IP of node 2> # pve2
    metrics_path: /pve
    params:
     module: [default]
     cluster: ['1']
     node: ['1']
    relabel_configs:
     - source_labels: [__address__]
      target_label: __param_target
     - source_labels: [__param_target]
      target_label: instance
     - target_label: __address
      replacement: <IP de la máquina donde esta el exportador>:9221

En este archivo:

  • Definimos un nuevo trabajo llamado ‘pve’ para raspar las métricas de nuestros nodos Proxmox VE.
  • Especificamos la ruta a la ruta de la API del exportador PVE.
  • Agregamos parámetros para especificar el clúster y el nodo a los que se hace referencia en las métricas.
  • Configuramos etiquetas de re-etiquetado para transformar las etiquetas de origen en las etiquetas deseadas.
  • Reemplazamos la etiqueta __address__ original con la dirección IP de la máquina virtual donde se está ejecutando el exportador.

Guarda y ajusta la propiedad: Una vez que hayas agregado la configuración, guarda el archivo y asegúrate de que el usuario de Prometheus sea el propietario:

sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml

Aplicar cambios:

Recarga systemd para que reconozca los cambios en el archivo de configuración de Prometheus:

sudo systemctl daemon-reload

Para ahora, deberías tener las métricas del cluster Proxmox accesibles desde tu navegador:

Accesing exporter metrics from Prometheus:

Visualización de métricas de Proxmox desde Grafana
#

Una vez que hayas configurado Prometheus y Grafana, el siguiente paso es conectarlos para que Grafana pueda visualizar las métricas recopiladas por Prometheus. Así es como se logra:

Agrega Prometheus como una fuente de datos en Grafana:

  • Abre la interfaz web de Grafana en tu navegador.
  • Inicia sesión con tus credenciales.
  • En la barra lateral izquierda, haz clic en el icono de engranaje de configuración y selecciona “Fuentes de datos”.
  • Haz clic en “Agregar fuente de datos”.
  • Elige “Prometheus” como tipo.
  • En el campo “URL”, ingresa la dirección de tu servidor Prometheus. Si Prometheus se está ejecutando en la misma máquina que Grafana, puedes usar http://<Prometheus Server IP>:9090.
  • Haz clic en “Guardar y probar” para verificar la conexión. Si es exitosa, verás un mensaje que confirma la conectividad.

Explora y visualiza las métricas:

La forma más rápida de utilizar las métricas es exportar un excelente panel: https://grafana.com/grafana/dashboards/10347-proxmox-via-prometheus/ que está disponible al público.

Este panel se puede importar a nuestro servidor Grafana y vendrá preconfigurado con gráficos y tablas útiles de nuestro cluster, que se verá así:

Accesing the Proxmox dashboard on Grafana: grafana_working.png

Al explorar este panel, puedes obtener información valiosa sobre el estado y el rendimiento de tu entorno Proxmox. Puedes ver métricas como el uso de CPU, memoria, almacenamiento y red para cada nodo en tu cluster. También puedes ver gráficos que muestran tendencias en el tiempo, lo que te permite identificar posibles problemas antes de que se intensifiquen.

¡Felicidades! Ahora deberías poder monitorear tu cluster Proxmox con Prometheus y Grafana. Esta configuración te proporcionará información valiosa que te ayudará a mantener tu cluster en funcionamiento sin problemas y optimizar el rendimiento.

Relacionados

Administración básica de AlmaLinux - Firewalld
4 mins
Home Lab CLI Linux Admin
Administración básica de AlmaLinux - Instalación
3 mins
Home Lab CLI Linux Admin
Administración básica de AlmaLinux - Usuarios
4 mins
Home Lab CLI Linux Admin
Redes 101: DNS, DHCP, y Proxies
3 mins
Networking Home Lab