¿Por qué Prometheus y Grafana para la monitorización de servidores Bare Metal?
Los servidores bare metal ofrecen un rendimiento, control y aislamiento inigualables, lo que los hace ideales para cargas de trabajo exigentes como el alojamiento web de alto tráfico, grandes bases de datos, servidores de juegos, pipelines de CI/CD y servicios de streaming. Sin embargo, la gestión eficaz de estas potentes máquinas requiere una monitorización robusta. Prometheus destaca en la recopilación de datos de series temporales, mientras que Grafana proporciona paneles intuitivos para visualizar esos datos. Juntos, forman una potente combinación para comprender la salud del servidor, identificar cuellos de botella y abordar los problemas de forma proactiva.
Este tutorial se centra en la instalación de la pila de monitorización (Prometheus y Grafana) en un servidor dedicado o un VPS robusto, que luego monitorizará otros servidores bare metal utilizando Node Exporter. Esto asegura que el propio sistema de monitorización tenga recursos dedicados y no compita con los servicios que se ejecutan en las máquinas monitorizadas.
Requisitos previos y requisitos mínimos del servidor
Antes de empezar, asegúrate de tener:
- Un servidor dedicado o un VPS robusto de Valebyte con una instalación limpia de Ubuntu 22.04 LTS (o una distribución similar basada en Debian). Para el propio servidor de monitorización, recomendamos al menos 4 vCPU, 8GB de RAM y 100GB de almacenamiento NVMe para uso en producción, lo que permite la retención de datos y la capacidad de respuesta del panel.
- Acceso root o sudo al servidor de monitorización.
- Acceso root o sudo a los servidores bare metal que deseas monitorizar.
- Conocimientos básicos de la interfaz de línea de comandos de Linux.
- Puertos abiertos en tu firewall: 9090 para Prometheus, 3000 para Grafana y 9100 para Node Exporter (en los servidores monitorizados).
Guía de instalación paso a paso
Paso 1: Actualizar el sistema e instalar dependencias
Primero, conéctate a tu servidor de monitorización vía SSH y actualiza tus listas de paquetes y paquetes instalados. Instala las utilidades necesarias:
sudo apt update
sudo apt upgrade -y
sudo apt install -y wget curl gnupg2 software-properties-common apt-transport-https
Paso 2: Instalar el servidor Prometheus
Prometheus no suele residir en los repositorios estándar de Ubuntu, por lo que descargaremos la última versión estable directamente.
- Crear usuario y directorios de Prometheus:
- Descargar y extraer Prometheus: Reemplaza
2.47.1con la última versión estable si es diferente. Consulta Descargas de Prometheus. - Crear archivo de configuración de Prometheus (
/etc/prometheus/prometheus.yml): - Establecer propiedad para la configuración:
- Crear un archivo de servicio systemd para Prometheus (
/etc/systemd/system/prometheus.service): - Recargar systemd, iniciar y habilitar Prometheus:
- Verificar el estado de Prometheus:
sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.47.1/prometheus-2.47.1.linux-amd64.tar.gz
tar xvfz prometheus-2.47.1.linux-amd64.tar.gz
sudo cp prometheus-2.47.1.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-2.47.1.linux-amd64/promtool /usr/local/bin/
sudo cp -r prometheus-2.47.1.linux-amd64/consoles /etc/prometheus
sudo cp -r prometheus-2.47.1.linux-amd64/console_libraries /etc/prometheus
sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool
sudo chown -R prometheus:prometheus /etc/prometheus/consoles
sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries
rm -rf prometheus-2.47.1.linux-amd64.tar.gz prometheus-2.47.1.linux-amd64
sudo nano /etc/prometheus/prometheus.yml
Pega el siguiente contenido. Esta configuración incluye un objetivo de scrapeo básico para el propio Prometheus y un marcador de posición para los objetivos de Node Exporter.
global:
scrape_interval: 15s # How frequently to scrape targets
evaluation_interval: 15s # How frequently to evaluate rules
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# Add your bare metal servers here after installing Node Exporter
# - job_name: 'node_exporter'
# static_configs:
# - targets: ['your_server_ip_1:9100', 'your_server_ip_2:9100']
Guarda y sal (Ctrl+X, Y, Enter).
sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml
sudo nano /etc/systemd/system/prometheus.service
Pega lo siguiente:
[Unit]
Description=Prometheus Monitoring System
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 \
--web.enable-lifecycle
[Install]
WantedBy=multi-user.target
Guarda y sal.
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
sudo systemctl status prometheus
Deberías ver active (running). Accede a la interfaz de usuario de Prometheus en tu navegador en http://TU_IP_DEL_SERVIDOR_DE_MONITORIZACION:9090.
Paso 3: Instalar Node Exporter en servidores bare metal monitorizados
Node Exporter es un agente que recopila métricas del sistema (CPU, RAM, E/S de disco, red) y las expone para que Prometheus las scrapee. Instala esto en cada servidor bare metal que quieras monitorizar.
- Crear usuario y directorios de Node Exporter:
- Descargar y extraer Node Exporter: Reemplaza
1.6.1con la última versión estable si es diferente. Consulta Descargas de Node Exporter. - Crear un archivo de servicio systemd para Node Exporter (
/etc/systemd/system/node_exporter.service): - Recargar systemd, iniciar y habilitar Node Exporter:
- Verificar el estado de Node Exporter:
sudo useradd --no-create-home --shell /bin/false node_exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar xvfz node_exporter-1.6.1.linux-amd64.tar.gz
sudo cp node_exporter-1.6.1.linux-amd64/node_exporter /usr/local/bin/
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
rm -rf node_exporter-1.6.1.linux-amd64.tar.gz node_exporter-1.6.1.linux-amd64
sudo nano /etc/systemd/system/node_exporter.service
Pega lo siguiente:
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
Guarda y sal.
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
sudo systemctl status node_exporter
Deberías ver active (running). Accede a las métricas de Node Exporter en tu navegador en http://TU_IP_DEL_SERVIDOR_MONITORIZADO:9100/metrics.
Paso 4: Configurar Prometheus para scrapear objetivos de Node Exporter
Ahora, vuelve a tu servidor de monitorización. Edita la configuración de Prometheus para añadir tus servidores bare metal.
- Editar configuración de Prometheus:
- Añade nuevas entradas
job_namepara tus servidores bare metal: Reemplazayour_server_ip_1,your_server_ip_2con las direcciones IP reales de tus servidores monitorizados. - Verificar la configuración de Prometheus en busca de errores de sintaxis:
- Recargar Prometheus para aplicar los cambios:
- Verificar objetivos en la interfaz de usuario de Prometheus: Navega a
http://TU_IP_DEL_SERVIDOR_DE_MONITORIZACION:9090/targets. Deberías ver tus objetivos de Node Exporter listados con un estado 'UP'.
sudo nano /etc/prometheus/prometheus.yml
# ... existing configuration ...
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
static_configs:
- targets: ['192.168.1.10:9100', '192.168.1.11:9100', 'your_next_server_ip:9100']
# Optionally, add labels for better organization
# labels:
# environment: production
# location: datacenter_a
Guarda y sal.
/usr/local/bin/promtool check config /etc/prometheus/prometheus.yml
Debería mostrar SUCCESS!. Si no, corrige cualquier error reportado.
sudo systemctl reload prometheus
Paso 5: Instalar Grafana
Grafana proporciona la capa de visualización para tus datos de Prometheus.
- Añadir clave GPG de Grafana:
- Añadir repositorio de Grafana:
- Actualizar la caché de apt e instalar Grafana:
- Iniciar y habilitar el servicio de Grafana:
- Verificar el estado de Grafana:
sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt update
sudo apt install -y grafana
sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo systemctl status grafana-server
Deberías ver active (running). Accede a la interfaz de usuario de Grafana en tu navegador en http://TU_IP_DEL_SERVIDOR_DE_MONITORIZACION:3000. El inicio de sesión predeterminado es admin / admin. Se te pedirá que cambies la contraseña en el primer inicio de sesión.
Paso 6: Configurar la fuente de datos y el panel de Grafana
Ahora, conecta Grafana a Prometheus e importa un panel útil.
- Añadir Prometheus como fuente de datos:
- Inicia sesión en Grafana (
admin/admin). - Haz clic en el icono de engranaje (Configuración) en la barra lateral izquierda, luego en 'Data sources' (Fuentes de datos).
- Haz clic en 'Add data source' (Añadir fuente de datos).
- Selecciona 'Prometheus'.
- Para 'Name' (Nombre), introduce
Prometheus. - Para 'URL', introduce
http://localhost:9090. - Desplázate hacia abajo y haz clic en 'Save & test' (Guardar y probar). Deberías ver 'Data source is working' (La fuente de datos funciona).
- Inicia sesión en Grafana (
- Importar un panel de Node Exporter:
- Haz clic en el icono '+' (Crear) en la barra lateral izquierda, luego en 'Import' (Importar).
- En el campo 'Import via grafana.com' (Importar vía grafana.com), introduce
1860(un ID de panel completo de Node Exporter popular). - Haz clic en 'Load' (Cargar).
- En la siguiente pantalla, selecciona tu fuente de datos 'Prometheus' del menú desplegable.
- Haz clic en 'Import' (Importar).
Ahora deberías ver un panel completo que visualiza las métricas de todos tus servidores bare metal monitorizados.
Casos de uso para la monitorización de servidores bare metal
Con Prometheus y Grafana, puedes monitorizar una amplia gama de cargas de trabajo en servidores bare metal:
- Alojamiento web: Rastrea las solicitudes por segundo de Nginx/Apache, los tiempos de respuesta, las conexiones concurrentes y el uso de recursos para garantizar un rendimiento óptimo del sitio web.
- Bases de datos (ej., PostgreSQL, MySQL): Monitoriza la latencia de las consultas, las conexiones activas, las tasas de aciertos de búfer, la E/S de disco y el estado de replicación para mantener la salud de la base de datos.
- Servidores de juegos: Vigila la utilización de la CPU, la latencia de la red, el número de jugadores y el uso de la memoria para proporcionar una experiencia de juego fluida.
- Servicios de streaming: Observa el uso de ancho de banda, las transmisiones concurrentes y la carga del servidor para garantizar una entrega de contenido ininterrumpida.
- Pipelines de CI/CD: Monitoriza los recursos del agente de compilación, el espacio en disco y la actividad de la red durante los procesos de integración y despliegue continuos.
- Aplicaciones autoalojadas: Rastrea el consumo de recursos de aplicaciones personalizadas, servidores de correo (ej., Postfix, Dovecot) o servicios VPN (ej., OpenVPN, WireGuard) para garantizar su estabilidad.
Solución de problemas comunes
- Prometheus/Grafana/Node Exporter no se inicia: Verifica
sudo systemctl status <service_name>ysudo journalctl -xeu <service_name>en busca de mensajes de error. - Prometheus no scrapea los objetivos: Verifica las direcciones IP de los objetivos y los números de puerto en
prometheus.yml. Asegúrate de que los firewalls (ej., UFW) tanto en el servidor de monitorización como en los servidores monitorizados permitan el tráfico en los puertos 9090 (Prometheus), 3000 (Grafana) y 9100 (Node Exporter). Verificahttp://TU_IP_DEL_SERVIDOR_DE_MONITORIZACION:9090/targetsen la interfaz de usuario de Prometheus en busca de errores de scrapeo. - Grafana no muestra datos: Confirma que la fuente de datos de Prometheus esté configurada correctamente y que 'Save & test' (Guardar y probar) muestre éxito. Asegúrate de que el panel que importaste sea compatible con las métricas de Node Exporter.
- Problemas de permisos: Vuelve a verificar la propiedad de archivos y directorios (
chown) y los permisos (chmod) para los binarios y archivos de configuración de Prometheus y Node Exporter.
La infraestructura de servidor adecuada es crucial para una monitorización eficiente. A continuación se presentan recomendaciones generales de hardware para tu servidor de monitorización basadas en la escala de tu entorno bare metal.
| Número de servidores monitorizados (con Node Exporter) | vCPU / Núcleos | RAM | Disco (Tipo + GB) | Ancho de banda mensual |
|---|---|---|---|---|
| Hasta 10 servidores | 4 vCPU | 8 GB | 100 GB NVMe | 1 TB |
| 10 - 50 servidores | 8 núcleos | 16-32 GB | 250 GB NVMe | 2 TB |
| 50 - 150 servidores | 12-16 núcleos | 32-64 GB | 500 GB NVMe (o HDD más grande para almacenamiento a largo plazo) | 5 TB |
| Más de 150 servidores (con alta cardinalidad de métricas) | 16-24 núcleos | 64-128 GB | 1 TB+ NVMe (o solución de almacenamiento en clúster) | 10 TB+ |