Skip to content

Instalar Prometheus, Node Exporter y Grafana en Debian o Ubuntu

Guía paso a paso para montar un stack de monitorización en un servidor Debian/Ubuntu. Las versiones usadas abajo son las estables más recientes en el momento de escribir esto (agosto de 2026): Prometheus 3.13.1, Node Exporter 1.12.1, Grafana 13.1.1. Revisa las páginas de publicación antes de ejecutar nada, por si han salido versiones más nuevas.

Hay tres referencias upstream que conviene tener abiertas al lado de esta guía: la referencia de configuración de Prometheus, la lista de colectores de Node Exporter con lo que cuesta cada uno, y la documentación de instalación de Grafana en Debian.

Arquitectura

+----------------+   scrapes :9100   +----------------+
|  Node Exporter | <---------------- |   Prometheus   |
|   :9100        |                   |   :9090        |
+----------------+                   +--------+-------+
                                              |
                                              | PromQL queries :9090
                                              v
                                     +----------------+
                                     |    Grafana     |
                                     |   :3000        |
                                     +----------------+
                                              |
                                              v
                                        Browser / user

Requisitos previos

  • Un servidor Debian o Ubuntu con acceso sudo
  • curl y tar instalados
  • Acceso SSH para un túnel. Mantén los puertos 9090, 9100 y 3000 cerrados a internet; los tres servicios escucharán solo en loopback.

Parte 1: instalar Prometheus

Paso 1: crear el usuario de sistema prometheus

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

Paso 2: crear los directorios

bash
sudo mkdir -p /etc/prometheus /var/lib/prometheus

Paso 3: descargar Prometheus

bash
cd /tmp
curl -LO https://github.com/prometheus/prometheus/releases/download/v3.13.1/prometheus-3.13.1.linux-amd64.tar.gz
tar -xvf prometheus-3.13.1.linux-amd64.tar.gz

Paso 4: instalar los binarios

bash
sudo cp prometheus-3.13.1.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-3.13.1.linux-amd64/promtool /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool

Paso 5: instalar las plantillas de consola y asignar la propiedad

bash
sudo cp -r prometheus-3.13.1.linux-amd64/consoles /etc/prometheus
sudo cp -r prometheus-3.13.1.linux-amd64/console_libraries /etc/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus

Paso 6: crear el fichero de configuración

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

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
EOF

El trabajo de scraping de Node Exporter se añade en la Parte 3, una vez instalado.

Paso 7: crear el servicio de systemd

bash
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 \\
  --web.listen-address=127.0.0.1:9090 \\
  --web.console.templates=/etc/prometheus/consoles \\
  --web.console.libraries=/etc/prometheus/console_libraries \\
  --storage.tsdb.retention.time=365d
ExecReload=/bin/kill -HUP \$MAINPID

[Install]
WantedBy=multi-user.target
EOF

ExecReload es lo que hace funcionar systemctl reload prometheus en la Parte 3. Sin él, systemd rechaza la recarga con "Job type reload is not applicable" y tu única salida es un reinicio completo. Fíjate en la barra invertida de \$MAINPID: este heredoc va sin comillas, así que de otro modo el shell expandiría la variable a nada al escribir el fichero.

Paso 8: arrancar y habilitar Prometheus

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

Paso 9: verificar

bash
sudo systemctl status prometheus
curl -s http://localhost:9090/-/healthy

Desde tu ordenador, abre un túnel SSH y déjalo funcionando:

bash
ssh -N -L 9090:127.0.0.1:9090 -L 3000:127.0.0.1:3000 user@server

Sustituye user@server por tu destino SSH. Abre http://localhost:9090 en el navegador de tu ordenador.

Limpiar la descarga de Prometheus

bash
rm -rf /tmp/prometheus-3.13.1.linux-amd64*

Parte 2: instalar Node Exporter

Paso 1: crear el usuario de sistema node_exporter

bash
sudo useradd --no-create-home --shell /bin/false node_exporter

Paso 2: descargar Node Exporter

bash
cd /tmp
curl -LO https://github.com/prometheus/node_exporter/releases/download/v1.12.1/node_exporter-1.12.1.linux-amd64.tar.gz
tar -xvf node_exporter-1.12.1.linux-amd64.tar.gz

Paso 3: instalar el binario

bash
sudo cp node_exporter-1.12.1.linux-amd64/node_exporter /usr/local/bin/
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter

Paso 4: crear el servicio de systemd

bash
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 --web.listen-address=127.0.0.1:9100

[Install]
WantedBy=multi-user.target
EOF

Paso 5: arrancar y habilitar Node Exporter

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

Paso 6: verificar

bash
curl -s http://localhost:9100/metrics | head

Limpiar la descarga de Node Exporter

bash
rm -rf /tmp/node_exporter-1.12.1.linux-amd64*

Parte 3: apuntar Prometheus a Node Exporter

Paso 1: añadir el trabajo de scraping

bash
sudo vim /etc/prometheus/prometheus.yml

Añade bajo scrape_configs:

yaml
  - job_name: "node_exporter"
    static_configs:
      - targets: ['localhost:9100']

Paso 2: validar la configuración

bash
promtool check config /etc/prometheus/prometheus.yml

Paso 3: recargar Prometheus

bash
sudo systemctl reload prometheus

Paso 4: comprobar que el target está activo

A través del túnel SSH, abre http://localhost:9090/targets: los trabajos prometheus y node_exporter deberían mostrar State = UP.

Parte 4: instalar Grafana

Método oficial: repositorio APT. apt-get update actualiza las listas de paquetes; apt-get install --only-upgrade grafana instala una actualización disponible. Fuente: https://grafana.com/docs/grafana/latest/setup-grafana/installation/debian/

Paso 1: instalar los requisitos previos

bash
sudo apt-get install -y apt-transport-https wget gnupg

Paso 2: importar la clave GPG

bash
sudo mkdir -p /etc/apt/keyrings
sudo wget -O /etc/apt/keyrings/grafana.asc https://apt.grafana.com/gpg-full.key
sudo chmod 644 /etc/apt/keyrings/grafana.asc

Paso 3: añadir el repositorio estable

bash
echo "deb [signed-by=/etc/apt/keyrings/grafana.asc] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

Paso 4: actualizar la lista de paquetes

bash
sudo apt-get update

Paso 5: instalar Grafana OSS

bash
sudo apt-get install -y grafana

Paso 6: arrancar y habilitar Grafana

bash
sudo mkdir -p /etc/systemd/system/grafana-server.service.d
printf '[Service]\nEnvironment=GF_SERVER_HTTP_ADDR=127.0.0.1\n' | sudo tee /etc/systemd/system/grafana-server.service.d/listen.conf
sudo systemctl daemon-reload
sudo systemctl enable grafana-server
sudo systemctl restart grafana-server

Paso 7: verificar

bash
sudo systemctl status grafana-server

A través del túnel SSH, abre http://localhost:3000. Las credenciales por defecto son admin / admin, y se te pedirá cambiarlas en el primer acceso.

Parte 5: configuración opcional de Grafana (dominio propio / HTTPS)

El túnel SSH basta para acceso privado. Para publicar el panel, apunta grafana.example.com al servidor y termina TLS en nginx. Grafana seguirá usando HTTP en loopback; no actives HTTPS en su puerto interno.

Paso 1: editar grafana.ini

bash
sudo vim /etc/grafana/grafana.ini
ini
[server]
http_addr = 127.0.0.1
http_port = 3000
domain = grafana.example.com
root_url = https://grafana.example.com/
enforce_domain = true
protocol = http

Paso 2: reiniciar Grafana

bash
sudo systemctl restart grafana-server

Paso 3 (opcional): proxy inverso con Nginx

nginx
map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

server {
    listen 80;
    listen [::]:80;

    server_name grafana.example.com;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://127.0.0.1:3000;
    }

    location /api/live {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://127.0.0.1:3000;
    }
}

Instala nginx y Certbot, y guarda la configuración anterior en /etc/nginx/sites-available/grafana.example.com. Sustituye el dominio de ejemplo en todos los pasos:

bash
sudo apt-get install -y nginx certbot python3-certbot-nginx
sudo ln -s /etc/nginx/sites-available/grafana.example.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d grafana.example.com
sudo certbot renew --dry-run

Abre los puertos 80 y 443 para nginx, no el 3000. Certbot configura TLS y el temporizador de renovación. Mantén la autenticación de Grafana y cambia la contraseña inicial a través del túnel SSH antes de publicar el dominio.

Parte 6: conectar Grafana con Prometheus

Paso 1: añadir la fuente de datos

En Grafana: Connections > Data sources > Add data source > Prometheus.

Pon como URL:

http://localhost:9090

Pulsa Save & test y deberías ver "Successfully queried the Prometheus API."

Paso 2: importar el panel de Node Exporter

Dashboards > New > Import, e introduce el ID del panel:

1860

Selecciona tu fuente de datos Prometheus cuando te lo pida y pulsa Import. Es el panel comunitario "Node Exporter Full" y cubre CPU, memoria, disco y red desde el primer momento.

Chuleta de gestión de servicios

service          start                 status                enable
---------------  --------------------  --------------------  -------------------------------
prometheus       systemctl start       systemctl status       systemctl enable prometheus
node_exporter    systemctl start       systemctl status       systemctl enable node_exporter
grafana-server   systemctl start       systemctl status       systemctl enable grafana-server

Recargar configuraciones sin cortes:

bash
sudo systemctl reload prometheus
sudo systemctl restart grafana-server

Por dónde seguir

Un servidor es donde esto empieza, no donde acaba. Los dos pasos siguientes suelen ser las alertas (Alertmanager, para que un disco lleno te avise a las 3 de la madrugada en vez de sorprenderte a las 9) y un segundo exporter para lo que realmente corra en la máquina. Si esa máquina es un sitio web, autoalojar WordPress con Docker y Redis es la otra mitad del mismo montaje.

La monitorización a mayor escala es buena parte de mi trabajo: observabilidad con Grafana y Prometheus, incluido un banco de pruebas que lanzó diez millones de peticiones en quince minutos. Encantado de comentarlo contigo.

Desinstalar

Eliminar Prometheus

bash
sudo systemctl disable --now prometheus
sudo rm -f /usr/local/bin/prometheus /usr/local/bin/promtool
sudo rm -rf /etc/prometheus /var/lib/prometheus /etc/systemd/system/prometheus.service
sudo userdel prometheus
sudo systemctl daemon-reload

Eliminar Node Exporter

bash
sudo systemctl disable --now node_exporter
sudo rm -f /usr/local/bin/node_exporter /etc/systemd/system/node_exporter.service
sudo userdel node_exporter
sudo systemctl daemon-reload

Eliminar Grafana

bash
sudo systemctl stop grafana-server
sudo apt-get remove -y grafana
sudo rm -i /etc/apt/sources.list.d/grafana.list