Este proyecto proporciona un stack de monitorización robusto y listo para usar, ideal para observar el estado y los logs de un sistema anfitrión (localhost). Utiliza una combinación de herramientas líderes en la industria, orquestadas a través de Docker Compose para un despliegue rápido y sencillo.
Es una base perfecta para expandir y personalizar según tus necesidades, ya sea para monitorizar aplicaciones, servicios adicionales o una infraestructura más compleja.
- Métricas del Sistema: Monitorización en tiempo real de CPU, memoria, disco, red y más, gracias a Prometheus y Node Exporter.
- Agregación de Logs: Centralización y visualización de logs del sistema con Loki y Promtail.
- Visualización Unificada: Dashboards interactivos y personalizables en Grafana para visualizar tanto métricas como logs en un solo lugar.
- Despliegue Sencillo: Todo el stack se levanta con un solo comando gracias a Docker Compose.
- Persistencia de Datos: Los datos de Grafana, Prometheus y Loki se guardan en volúmenes de Docker, sobreviviendo a reinicios.
- Configuración Moderna: Utiliza las últimas versiones y configuraciones recomendadas, como el índice
tsdben Loki para un rendimiento mejorado.
| Servicio | Propósito | Puerto |
|---|---|---|
| Grafana | Visualización de métricas y logs. | 3000 |
| Prometheus | Recolección y almacenamiento de métricas. | 9090 |
| Node Exporter | Exposición de métricas del sistema anfitrión. | 9100 |
| Loki | Agregación y almacenamiento de logs. | 3100 |
| Promtail | Agente que recolecta y envía logs a Loki. | 9080 |
.
├── docker-compose.yml # Orquesta el despliegue de todos los servicios.
├── loki/
│ └── loki-config.yml # Configuración de Loki (almacenamiento, etc.).
├── prometheus/
│ └── prometheus.yml # Configuración de Prometheus (targets a scrapear).
└── promtail/
└── promtail-config.yml # Configuración de Promtail (de dónde leer logs).
- Docker instalado.
- Docker Compose instalado.
Obtén los archivos de este repositorio en tu máquina local.
Abre una terminal en la raíz del proyecto y ejecuta:
docker-compose up -dEste comando descargará las imágenes necesarias y levantará todos los contenedores en segundo plano (-d).
-
Grafana: Abre tu navegador y ve a
http://localhost:3000- Usuario:
admin - Contraseña:
admin(te pedirá cambiarla al primer inicio de sesión).
- Usuario:
-
Prometheus:
http://localhost:9090 -
Loki: (Normalmente no se accede directamente, pero su API está en
http://localhost:3100)
Al acceder a Grafana por primera vez, necesitarás añadir las fuentes de datos (Data Sources):
-
Añadir Prometheus:
- Ve a
Configuration > Data Sources > Add data source. - Selecciona
Prometheus. - En el campo
URL, introduce:http://prometheus:9090. - Haz clic en
Save & Test.
- Ve a
-
Añadir Loki:
- Ve a
Configuration > Data Sources > Add data source. - Selecciona
Loki. - En el campo
URL, introduce:http://loki:3100. - Haz clic en
Save & Test.
- Ve a
¡Listo! Ahora puedes empezar a crear dashboards o importar algunos pre-hechos desde la comunidad de Grafana. Un buen punto de partida es el dashboard de Node Exporter (ID: 1860).
Este stack está diseñado para ser un punto de partida. Aquí tienes algunas ideas para personalizarlo:
Para monitorizar las métricas de un nuevo servicio (por ejemplo, una base de datos o una API que exponga métricas en formato Prometheus):
-
Asegúrate de que el nuevo contenedor esté en la misma red de Docker que Prometheus.
-
Añade un nuevo
jobenprometheus/prometheus.yml:# prometheus/prometheus.yml - job_name: 'mi-nueva-app' static_configs: - targets: ['nombre-del-servicio:puerto'] # Ej: 'mi-api:8080'
-
Reinicia Prometheus para que tome la nueva configuración:
docker-compose restart prometheus
Para que Promtail recolecte logs de otros archivos o directorios:
-
Monta el directorio en
docker-compose.yml: Añade un nuevo volumen al serviciopromtailpara darle acceso a los logs.# docker-compose.yml services: promtail: volumes: - ./promtail/promtail-config.yml:/etc/promtail/config.yml - /var/log:/var/log - /ruta/a/tus/logs:/ruta/en/contenedor # <-- Nueva línea
-
Añade un nuevo
jobenpromtail/promtail-config.yml: Define de qué archivos leer y qué etiquetas (labels) aplicar a esos logs.# promtail/promtail-config.yml scrape_configs: - job_name: system # ... (configuración existente) ... - job_name: mi-app static_configs: - targets: - localhost labels: job: mi-app-logs __path__: /ruta/en/contenedor/*log # Lee todos los .log en la ruta montada
-
Reinicia Promtail:
docker-compose restart promtail
prometheus.yml: Define losscrape_configs, que le dicen a Prometheus dónde encontrar los exportadores de métricas. Por defecto, se monitoriza a sí mismo y alnode-exporter.loki-config.yml: Configura Loki para usar el almacenamiento local (filesystem) y el índicetsdb, que es eficiente para series temporales.promtail-config.yml: Le dice a Promtail a qué instancia de Loki enviar los logs (clients) y qué archivos del sistema de ficheros observar (scrape_configs). Por defecto, captura todos los archivos que terminan en.logdentro de/var/log.
-
Para detener los contenedores sin eliminar los datos:
docker-compose down
-
Para detener y eliminar los volúmenes de datos (¡cuidado, esta acción es irreversible!):
docker-compose down -v