Grafana y Prometheus en Casa: Monta tu Propio Panel de Control Paso a Paso

Si tienes un pequeño servidor en casa, ya sea para pruebas, almacenamiento, domótica o cualquier otro proyecto personal, seguro que más de una vez te has preguntado cómo está rindiendo. ¿Va la CPU a tope? ¿Queda poca memoria? Saber qué ocurre en tiempo real es fundamental, no solo para solucionar problemas, sino también para optimizar y entender mejor tu sistema. Hoy vamos a ver cómo montar una solución bastante potente y estándar en la industria para monitorizar servidor casero: Prometheus y Grafana. Y lo haremos paso a paso, ideal para principiantes.

¿Qué son Prometheus y Grafana (y por qué deberías usarlos)?

Antes de meternos en faena, aclaremos qué hace cada pieza:

  • Prometheus: Es una base de datos de series temporales y un sistema de monitorización. Su trabajo principal es «preguntar» (hacer scraping) a diferentes servicios o sistemas (llamados targets) sobre sus métricas actuales (CPU, memoria, red, etc.) y almacenar esos datos con una marca de tiempo. Es muy eficiente para este tipo de datos.
  • Grafana: Es una plataforma de visualización y análisis. Grafana se conecta a diferentes fuentes de datos (como Prometheus) y te permite crear paneles (dashboards) muy visuales con gráficos, medidores y tablas para entender fácilmente la información recopilada.

La combinación de ambos es un estándar de facto en muchos entornos profesionales, y perfectamente aplicable a nuestro servidor casero. Nos da una visión clara y gráfica del estado de nuestro sistema.

Preparando el Terreno: Lo que Necesitas

Para seguir esta guía Grafana Prometheus, asumiré que tienes:

  1. Un servidor casero: Lo más probable es que corra alguna distribución Linux (Ubuntu, Debian, CentOS…). Los comandos pueden variar ligeramente, pero la lógica es la misma.
  2. Acceso a la terminal: Necesitarás ejecutar comandos como administrador (root o usando sudo).
  3. Docker y Docker Compose (Recomendado): Aunque se pueden instalar directamente, usar Docker simplifica enormemente la gestión de Prometheus y Grafana, especialmente las actualizaciones y dependencias. Si no los tienes, su instalación suele ser sencilla (busca «install docker and docker compose» para tu distribución). Usaremos Docker Compose en esta guía por su simplicidad.

Paso 1: Instalación y Configuración de Prometheus

Vamos a empezar por el recolector de datos. Crearemos un archivo docker-compose.yml para definir cómo queremos que se ejecuten Prometheus y, más adelante, Grafana.

Crea un directorio para tu configuración, por ejemplo, ~/monitoring:

«`bash

mkdir ~/monitoring

cd ~/monitoring


Ahora, crea el archivo `prometheus.yml`. Este archivo le dice a Prometheus qué métricas debe recolectar (*scrape*). De momento, solo le diremos que se monitorice a sí mismo y a un servicio que instalaremos en el siguiente paso (Node Exporter).

```yaml
# prometheus.yml
global:
  scrape_interval: 15s # Cada cuánto recoger métricas

scrape_configs:
  - job_name: 'prometheus' # Métricas del propio Prometheus
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node_exporter' # Métricas del servidor (lo instalaremos luego)
    static_configs:
      - targets: ['localhost:9100'] # Asume que node_exporter corre en el mismo host

Ahora, crea el archivo docker-compose.yml en el mismo directorio (~/monitoring):

«`yaml

docker-compose.yml

version: ‘3.8’

services:

prometheus:

image: prom/prometheus:latest

container_name: prometheus

ports:

  • «9090:9090» # Puerto para acceder a la interfaz web de Prometheus

volumes:

  • ./prometheus.yml:/etc/prometheus/prometheus.yml # Monta nuestro archivo de configuración
  • prometheus_data:/prometheus # Volumen para persistir los datos

command:

  • ‘–config.file=/etc/prometheus/prometheus.yml’
  • ‘–storage.tsdb.path=/prometheus’
  • ‘–web.console.libraries=/usr/share/prometheus/console_libraries’
  • ‘–web.console.templates=/usr/share/prometheus/consoles’

restart: unless-stopped

volumes:

prometheus_data: {} # Define el volumen


**Explicación rápida:**
*   Usamos la imagen oficial de Prometheus.
*   Mapeamos el puerto 9090 del contenedor al 9090 de tu servidor.
*   Montamos nuestro `prometheus.yml` dentro del contenedor.
*   Creamos un volumen `prometheus_data` para que las métricas no se pierdan si reinicias el contenedor.
*   Le pasamos comandos para que use nuestro archivo de configuración y almacene los datos en el volumen.

Ahora, levanta Prometheus:

```bash
sudo docker-compose up -d prometheus

Si todo va bien, deberías poder acceder a la interfaz web de Prometheus en tu navegador: http://<IP_DE_TU_SERVIDOR>:9090. Ve a la sección «Status» -> «Targets». Verás el target ‘prometheus’ como UP, pero ‘node_exporter’ estará DOWN (aún no lo hemos instalado).

Paso 2: Instalando el «Chivato» de Métricas – Node Exporter

Prometheus necesita de dónde sacar las métricas del sistema operativo (CPU, RAM, disco, red…). Para eso se usan los exporters. El más común para métricas de host Linux es node_exporter.

Vamos a añadirlo a nuestro docker-compose.yml:

«`yaml

docker-compose.yml (añade esto al archivo existente)

version: ‘3.8’

services:

prometheus:

… (definición anterior sin cambios) …

node_exporter:

image: prom/node-exporter:latest

container_name: node_exporter

ports:

  • «9100:9100» # Puerto donde node_exporter expone las métricas

volumes:

  • /proc:/host/proc:ro # Acceso de solo lectura al /proc del host
  • /sys:/host/sys:ro # Acceso de solo lectura al /sys del host
  • /:/rootfs:ro # Acceso de solo lectura al filesystem raíz del host

command:

  • ‘–path.procfs=/host/proc’
  • ‘–path.sysfs=/host/sys’
  • ‘–path.rootfs=/rootfs’
      - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)' # Evita monitorizar puntos de montaje virtuales

restart: unless-stopped

volumes:

prometheus_data: {}

No necesitamos volumen para node_exporter, solo lee datos del host


**Importante:** Hemos añadido el servicio `node_exporter`.
*   Usa la imagen oficial.
*   Expone el puerto 9100.
*   **Clave:** Monta directorios importantes del *host* (`/proc`, `/sys`, `/`) como solo lectura dentro del contenedor para que `node_exporter` pueda leer las métricas del sistema.
*   Le pasamos comandos para que sepa dónde encontrar esos directorios montados.

Ahora, actualiza y levanta los servicios (Docker Compose es inteligente y solo recreará lo necesario):

```bash
sudo docker-compose up -d

Espera unos segundos y vuelve a la interfaz de Prometheus (http://<IP_DE_TU_SERVIDOR>:9090), en «Status» -> «Targets». Ahora, el target node_exporter debería aparecer como UP. ¡Prometheus ya está recogiendo métricas de tu servidor! 🎉

Puedes incluso ver las métricas crudas que expone el node_exporter visitando http://<IP_DE_TU_SERVIDOR>:9100/metrics. Verás un montón de texto, que son los datos que Prometheus está guardando.

Paso 3: Instalación de Grafana

Ahora toca la parte visual. Añadimos Grafana a nuestro docker-compose.yml:

«`yaml

docker-compose.yml (añade esto al archivo existente)

version: ‘3.8’

services:

prometheus:

… (definición anterior sin cambios) …

node_exporter:

… (definición anterior sin cambios) …

grafana:

image: grafana/grafana-oss:latest # Usamos la versión Open Source

container_name: grafana

ports:

  • «3000:3000» # Puerto estándar de Grafana

volumes:

  • grafana_data:/var/lib/grafana # Volumen para persistir dashboards y configuraciones

restart: unless-stopped

volumes:

prometheus_data: {}

grafana_data: {} # Define el volumen para Grafana


**Explicación:**
*   Usamos la imagen oficial de Grafana (versión Open Source).
*   Mapeamos el puerto 3000.
*   Creamos un volumen `grafana_data` para guardar la configuración, los dashboards, etc.

Levantamos todo de nuevo:

```bash
sudo docker-compose up -d

Ahora, accede a Grafana en tu navegador: http://<IP_DE_TU_SERVIDOR>:3000.

El usuario y contraseña por defecto suelen ser admin / admin. Te pedirá cambiar la contraseña la primera vez que entres.

Paso 4: Conectando Grafana con Prometheus

Una vez dentro de Grafana, necesitamos decirle dónde está nuestra fuente de datos (Prometheus).

  1. Ve al icono de engranaje (⚙️) en el menú lateral izquierdo -> «Data Sources».
  2. Haz clic en «Add data source».
  3. Busca y selecciona «Prometheus».
  4. En la configuración, lo más importante es el campo URL. Como Grafana y Prometheus están corriendo en la misma red Docker (gracias a Docker Compose), podemos usar el nombre del servicio definido en docker-compose.yml y el puerto interno. Escribe: http://prometheus:9090.
  5. Deja el resto de opciones por defecto por ahora.
  6. Haz clic en «Save & test». Debería aparecer un mensaje verde indicando «Data source is working».

¡Listo! Grafana ya sabe cómo hablar con Prometheus.

Paso 5: Creando tu Primer Dashboard (La Forma Fácil)

Podrías crear gráficos desde cero, pero para empezar, lo más rápido es importar un dashboard ya hecho por la comunidad, diseñado específicamente para node_exporter.

  1. En el menú lateral izquierdo, ve al icono de «+» -> «Import».
  2. Hay un campo que dice «Import via grafana.com dashboard ID or URL». Uno muy popular y completo para node_exporter es el ID 1860 (Node Exporter Full). Escribe 1860 en ese campo y haz clic en «Load».
  3. Grafana te mostrará los detalles del dashboard. Abajo, te pedirá seleccionar la fuente de datos Prometheus que acabamos de configurar. Selecciónala en el desplegable.
  4. Haz clic en «Import».

¡Tachán! ✨ Deberías tener ante ti un dashboard completo con un montón de gráficos mostrando el uso de CPU, memoria, disco, red y mucho más de tu servidor casero. Explóralo un poco para familiarizarte con la visualización datos Grafana.

Siguientes Pasos

Esto es solo el principio. A partir de aquí puedes:

  • Explorar otros exporters: Hay exporters para casi todo (bases de datos, aplicaciones específicas, métricas de Docker…).
  • Crear tus propios paneles: Intenta modificar el dashboard importado o crear uno nuevo desde cero seleccionando métricas específicas que te interesen.
  • Configurar Alertas: Grafana permite definir alertas (ej: si la CPU supera el 90% durante 5 minutos) y notificarte por diferentes canales (email, Slack, Telegram…).
  • Aprender PromQL: Es el lenguaje de consulta de Prometheus. Te permite hacer cálculos y selecciones muy potentes sobre tus métricas.

Conclusión

Montar un sistema básico para monitorizar servidor casero con Prometheus y Grafana no es tan complicado como podría parecer, especialmente usando Docker. Con esta guía Grafana Prometheus tienes una base sólida para empezar a entender qué pasa en tu máquina. Ver los datos de forma gráfica te da una perspectiva completamente nueva y te ayuda a detectar problemas o cuellos de botella que de otra forma pasarían desapercibidos.

Espero que esta guía te sea útil. Ahora te toca a ti explorar y adaptar la monitorización a tus necesidades específicas. ¿Te animas a probarlo? Si tienes alguna duda, déjala en los comentarios.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *