Tutoriales 12 min de lectura

Monitoreo de servidores con Grafana y Prometheus desde cero

Guía paso a paso para instalar Prometheus y Grafana en Ubuntu, configurar la recolección de métricas de servidores y crear dashboards de monitoreo profesionales.

Dashboard de Grafana mostrando métricas de CPU, RAM, disco y red de múltiples servidores en tiempo real
Dashboard de Grafana mostrando métricas de CPU, RAM, disco y red de múltiples servidores en tiempo real

Enterarte de que un servidor está caído porque un usuario te llama es la peor forma de monitorear infraestructura. Un sistema de monitoreo profesional te muestra el estado de todos tus servidores en tiempo real, te avisa antes de que los problemas impacten a los usuarios y te da datos históricos para tomar decisiones de capacidad.

En esta guía vas a instalar Prometheus + Grafana desde cero, configurar la recolección de métricas de tus servidores Linux y crear un dashboard profesional — todo en menos de una hora.

Arquitectura

Antes de instalar, entiende cómo funcionan las piezas juntas:

┌──────────────────────────────────────────────────┐
│                  Tu navegador                     │
│              (dashboards Grafana)                  │
└────────────────────┬─────────────────────────────┘
                     │ :3000
┌────────────────────▼─────────────────────────────┐
│               Grafana                             │
│    Visualización, dashboards, alertas             │
└────────────────────┬─────────────────────────────┘
                     │ consulta métricas
┌────────────────────▼─────────────────────────────┐
│              Prometheus                            │
│    Recolección y almacenamiento de métricas       │
│    (scraping cada 15s)                            │
└───┬────────────────┬──────────────────┬──────────┘
    │ :9100          │ :9100            │ :9100
┌───▼───┐      ┌────▼────┐       ┌────▼────┐
│Servidor│      │Servidor │       │Servidor │
│  App   │      │   DB    │       │  Web    │
│(node_  │      │(node_   │       │(node_   │
│exporter│      │exporter)│       │exporter)│
└────────┘      └─────────┘       └─────────┘

node_exporter corre en cada servidor que quieres monitorear y expone métricas (CPU, RAM, disco, red) en un endpoint HTTP. Prometheus hace scraping de esos endpoints cada 15 segundos y almacena las métricas. Grafana consulta Prometheus y muestra los datos en dashboards.

Requisitos previos

Un servidor Ubuntu 24.04 dedicado al monitoreo (puede ser el mismo que corras otros servicios si es pequeño). Recomendamos al menos 2 GB de RAM y 20 GB de disco.

Paso 1: Instalar node_exporter en los servidores a monitorear

Instala node_exporter en cada servidor que quieras monitorear. Es un binario ligero que expone métricas del sistema operativo:

# Descargar la última versión
cd /tmp
curl -LO https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
tar xzf node_exporter-1.8.2.linux-amd64.tar.gz

# Instalar
sudo cp node_exporter-1.8.2.linux-amd64/node_exporter /usr/local/bin/
sudo useradd --no-create-home --shell /bin/false node_exporter

Crea el servicio de systemd:

sudo tee /etc/systemd/system/node_exporter.service > /dev/null <<EOF
[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
EOF

Arranca y habilita el servicio:

sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter

Verifica que está corriendo:

curl http://localhost:9100/metrics | head -20

Deberías ver líneas con métricas como node_cpu_seconds_total, node_memory_MemTotal_bytes, etc.

Firewall

node_exporter escucha en el puerto 9100. Asegúrate de que Prometheus pueda acceder a este puerto. Con UFW:

sudo ufw allow from 10.0.1.5 to any port 9100 comment 'Prometheus scraping'

Solo permite acceso desde la IP del servidor de Prometheus — no expongas el puerto a internet.

Paso 2: Instalar Prometheus

Ahora en el servidor de monitoreo, instala Prometheus:

cd /tmp
curl -LO https://github.com/prometheus/prometheus/releases/download/v2.54.0/prometheus-2.54.0.linux-amd64.tar.gz
tar xzf prometheus-2.54.0.linux-amd64.tar.gz

sudo cp prometheus-2.54.0.linux-amd64/{prometheus,promtool} /usr/local/bin/
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo cp -r prometheus-2.54.0.linux-amd64/{consoles,console_libraries} /etc/prometheus/
sudo useradd --no-create-home --shell /bin/false prometheus
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus

Crea el archivo de configuración:

sudo tee /etc/prometheus/prometheus.yml > /dev/null <<EOF
global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  # Monitorear el propio Prometheus
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  # Servidores Linux
  - job_name: 'servidores'
    static_configs:
      - targets:
          - '10.0.1.10:9100'   # Servidor App
          - '10.0.1.11:9100'   # Servidor DB
          - '10.0.1.12:9100'   # Servidor Web
        labels:
          env: 'produccion'

      - targets:
          - '10.0.1.20:9100'   # Servidor Dev
        labels:
          env: 'desarrollo'
EOF

Crea el servicio de systemd:

sudo tee /etc/systemd/system/prometheus.service > /dev/null <<EOF
[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 \
  --storage.tsdb.retention.time=30d \
  --web.enable-lifecycle

[Install]
WantedBy=multi-user.target
EOF

Arranca Prometheus:

sudo systemctl daemon-reload
sudo systemctl enable --now prometheus

Verifica en tu navegador: http://tu-servidor:9090. Deberías ver la interfaz web de Prometheus. Ve a Status → Targets y confirma que todos tus servidores aparecen como UP.

Retención de datos

La configuración --storage.tsdb.retention.time=30d conserva 30 días de métricas. Ajusta según tu espacio en disco. Prometheus usa aproximadamente 1-2 bytes por sample, así que 3 servidores con scraping cada 15s generan ~500 MB/mes.

Paso 3: Instalar Grafana

En el mismo servidor de monitoreo:

# Agregar repositorio oficial de Grafana
sudo apt install -y apt-transport-https software-properties-common
sudo mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list

# Instalar
sudo apt update
sudo apt install grafana -y

# Arrancar
sudo systemctl enable --now grafana-server

Accede a Grafana en http://tu-servidor:3000. Las credenciales por defecto son admin / admin — te pedirá cambiar la contraseña al primer login.

Paso 4: Conectar Grafana con Prometheus

  1. En Grafana, ve a Connections → Data sources → Add data source
  2. Selecciona Prometheus
  3. En la URL pon: http://localhost:9090
  4. Clic en Save & test — debería mostrar "Data source is working"

Paso 5: Importar un dashboard profesional

En lugar de crear un dashboard desde cero, Grafana tiene una biblioteca con miles de dashboards pre-construidos. El más popular para node_exporter es el Node Exporter Full (ID: 1860):

  1. Ve a Dashboards → Import
  2. Escribe el ID 1860 y clic en Load
  3. Selecciona tu data source de Prometheus
  4. Clic en Import

En segundos tendrás un dashboard profesional con métricas de CPU, RAM, disco, red, filesystem, I/O y más — para cada servidor.

Otros dashboards recomendados

IDNombreUso
1860Node Exporter FullMétricas detalladas por servidor
11074Node Exporter DashboardVista compacta por servidor
15172Node Exporter OverviewVista general de múltiples servidores
3662Prometheus 2.0 OverviewMétricas del propio Prometheus

Paso 6: Configurar alertas

Grafana puede enviarte alertas cuando una métrica supera un umbral. Configura las alertas más importantes:

Alerta de disco al 85%

  1. En un panel del dashboard, clic en Edit
  2. Ve a la pestaña Alert
  3. Crea una nueva regla:
    • Condición: avg(1 - (node_filesystem_avail_bytes / node_filesystem_size_bytes)) > 0.85
    • Evaluar cada: 1m por 5m
    • Mensaje: "Disco al en "

Alerta de memoria al 90%

(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) > 0.90

Alerta de CPU sostenido al 90%

100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90

Canal de notificación

Configura dónde quieres recibir las alertas en Alerting → Contact points:

  • Slack — webhook a un canal de #alertas
  • Email — requiere configurar SMTP en /etc/grafana/grafana.ini
  • Telegram — bot de Telegram con chat ID
  • Webhook — para integrar con cualquier sistema

Paso 7: Monitorear servicios adicionales

node_exporter cubre el sistema operativo. Para servicios específicos, agrega exporters:

PostgreSQL

# Instalar postgres_exporter
docker run -d --name pg_exporter \
  -e DATA_SOURCE_NAME="postgresql://monitor:password@localhost:5432/postgres?sslmode=disable" \
  -p 9187:9187 \
  prometheuscommunity/postgres-exporter

Agregar a prometheus.yml:

  - job_name: 'postgresql'
    static_configs:
      - targets: ['10.0.1.11:9187']

Dashboard recomendado: ID 9628 (PostgreSQL Database).

Nginx

Habilita stub_status en Nginx y usa nginx-prometheus-exporter:

docker run -d --name nginx_exporter \
  -p 9113:9113 \
  nginx/nginx-prometheus-exporter \
  --nginx.scrape-uri=http://10.0.1.12/nginx_status

Redis

docker run -d --name redis_exporter \
  -p 9121:9121 \
  oliver006/redis_exporter \
  --redis.addr=redis://10.0.1.11:6379

Asegurar Grafana en producción

Antes de exponer Grafana a tu equipo, aplica estas configuraciones de seguridad:

# /etc/grafana/grafana.ini

[security]
# Deshabilitar registro público
disable_initial_admin_creation = false
admin_user = admin

[users]
# No permitir que los usuarios se registren solos
allow_sign_up = false

[auth.anonymous]
# No permitir acceso anónimo
enabled = false

Reinicia Grafana después de cambiar la configuración:

sudo systemctl restart grafana-server

Para acceso externo, pon Grafana detrás de Nginx con HTTPS:

server {
    listen 443 ssl;
    server_name grafana.tuempresa.com;

    ssl_certificate /etc/letsencrypt/live/grafana.tuempresa.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/grafana.tuempresa.com/privkey.pem;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # WebSocket para live dashboards
    location /api/live/ws {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Siguientes pasos

Con Prometheus y Grafana corriendo, puedes expandir tu monitoreo:

  • Alertmanager — gestión avanzada de alertas con silencing, agrupación y escalamiento
  • Loki — agregación de logs que se integra nativamente con Grafana (como un "Prometheus para logs")
  • Docker monitoring — cAdvisor para métricas de contenedores
  • Blackbox Exporter — monitoreo de endpoints HTTP, TCP y DNS desde fuera (uptime monitoring)
  • Monitoreo profesional con Zabbix para monitoreo SNMP de switches, firewalls y UPS

Monitoreo empresarial

¿Necesitas monitoreo profesional para toda tu infraestructura?

Implementamos Prometheus, Grafana y Zabbix con alertas proactivas, dashboards personalizados y soporte 24/7.

Solicitar evaluación

Preguntas frecuentes

Temas relacionados

#monitoreo#grafana#prometheus#linux#servidores#tutorial

¿Te fue útil? Compártelo

Artículos relacionados

Ver todos

Consultoría gratuita

¿Necesitas monitoreo profesional para tu infraestructura?

Implementamos monitoreo con Prometheus, Grafana y Zabbix con alertas proactivas y dashboards personalizados para tu operación.

Solicitar evaluación