Por qué monitorizar
Sin monitorización, los problemas se detectan cuando ya es demasiado tarde. Un stack basado en Prometheus y Grafana permite recopilar métricas, configurar alertas y visualizar el estado de toda tu infraestructura desde un solo panel.
Arquitectura del stack
El flujo es sencillo:
- Node Exporter expone métricas del sistema (CPU, RAM, disco, red) en cada servidor
- Prometheus recopila esas métricas periódicamente (scraping)
- Grafana las visualiza en dashboards interactivos
Instalar Node Exporter en los servidores
Node Exporter se ejecuta en cada máquina que quieras monitorizar.
# Descargar la última versión
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.1/node_exporter-1.8.1.linux-amd64.tar.gz
tar xvfz node_exporter-1.8.1.linux-amd64.tar.gz
sudo mv node_exporter-1.8.1.linux-amd64/node_exporter /usr/local/bin/
Crear el servicio de systemd:
sudo cat <<EOF > /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
EOF
Activar y arrancar:
sudo useradd -rs /bin/false node_exporter
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
Las métricas estarán disponibles en http://servidor:9100/metrics.
Instalar Prometheus
En el servidor central de monitorización:
wget https://github.com/prometheus/prometheus/releases/download/v2.53.0/prometheus-2.53.0.linux-amd64.tar.gz
tar xvfz prometheus-2.53.0.linux-amd64.tar.gz
sudo mv prometheus-2.53.0.linux-amd64/{prometheus,promtool} /usr/local/bin/
sudo mkdir -p /etc/prometheus /var/lib/prometheus
Configurar los targets
Edita /etc/prometheus/prometheus.yml:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'nodos'
static_configs:
- targets:
- '192.168.1.10:9100'
- '192.168.1.11:9100'
- '192.168.1.12:9100'
Crear el servicio
sudo cat <<EOF > /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
After=network.target
[Service]
User=prometheus
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus
[Install]
WantedBy=multi-user.target
EOF
sudo useradd -rs /bin/false prometheus
sudo chown -R prometheus: /var/lib/prometheus /etc/prometheus
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus
Prometheus estará accesible en http://servidor:9090.
Instalar Grafana
# RHEL/Rocky/Oracle Linux
sudo dnf install -y https://dl.grafana.com/oss/release/grafana-11.1.0-1.x86_64.rpm
# Ubuntu/Debian
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 grafana -y
Activar el servicio:
sudo systemctl enable --now grafana-server
Accede a http://servidor:3000 (usuario y contraseña por defecto: admin/admin).
Conectar con Prometheus
- Ve a Connections > Data Sources > Add data source
- Selecciona Prometheus
- En URL introduce
http://localhost:9090 - Pulsa Save & Test
Importar un dashboard
El dashboard más popular para Node Exporter es el 1860:
- Ve a Dashboards > Import
- Introduce el ID
1860 - Selecciona la fuente de datos Prometheus
- Pulsa Import
Tendrás un panel completo con CPU, memoria, disco, red y más para cada servidor.
Consultas PromQL útiles
Algunas queries que puedes usar en Grafana o directamente en Prometheus:
# Uso de CPU por nodo (porcentaje)
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# Memoria usada (porcentaje)
(1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100
# Espacio en disco usado (porcentaje)
(1 - node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100
# Tráfico de red recibido (bytes/s)
rate(node_network_receive_bytes_total{device="eth0"}[5m])
Configurar alertas básicas
Crea un archivo de reglas /etc/prometheus/alerts.yml:
groups:
- name: nodos
rules:
- alert: NodoCaido
expr: up == 0
for: 2m
labels:
severity: critical
annotations:
summary: 'Nodo {{ $labels.instance }} no responde'
- alert: DiscoLleno
expr: (1 - node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) > 0.85
for: 5m
labels:
severity: warning
annotations:
summary: 'Disco al {{ $value | humanizePercentage }} en {{ $labels.instance }}'
Añade la referencia en prometheus.yml:
rule_files:
- 'alerts.yml'
Reinicia Prometheus para aplicar:
sudo systemctl restart prometheus
Conclusión
Con Prometheus, Node Exporter y Grafana tienes un stack de monitorización completo y gratuito. El siguiente paso natural es añadir Alertmanager para enviar notificaciones por email, Slack o Telegram cuando salten las alertas.
## Nota
✍️ Transparencia: Este artículo ha sido creado con el apoyo de herramientas de inteligencia artificial. Toda la información técnica ha sido revisada y validada por el autor antes de su publicación.