Simplificación del stack de observabilidad manteniendo solo los servicios esenciales: Servicios activos: - Alloy (puertos mínimos: 12345, 9999, 3101) - Prometheus (métricas) - Loki (logs) - Grafana (visualización) Servicios comentados: - Tempo (trazas distribuidas) - Promtail (reemplazado por Alloy) - Node Exporter (métricas del host) - cAdvisor (métricas de contenedores) Cambios: - Reducción de puertos de Alloy (eliminados puertos de trazas: OTLP, Jaeger, Zipkin) - Actualización de dependencias de Alloy y Grafana - Limpieza de volúmenes no utilizados (tempo_data, promtail_positions) - Grafana ahora solo depende de Prometheus y Loki El stack simplificado mantiene capacidad completa de métricas y logs con menor complejidad operacional.
Suite de Monitoreo con Grafana, Prometheus y Mimir
Esta configuraci�n incluye un stack completo de monitoreo con:
- Prometheus: Recolecci�n de m�tricas
- Mimir: Almacenamiento de m�tricas a largo plazo
- Grafana: Visualizaci�n y dashboards
Estructura de Archivos
Uso rápido en Python (logs y métricas)
- Logs a Loki / Alloy:
from Logger import LokiLogger
logger = LokiLogger(service_name="mi_servicio", min_level="INFO")
logger.info("Aplicación iniciada")
logger.error("Algo falló", add_fields={"detalle": "stacktrace"})
- Métricas con prefijo listo para scrapeo de Prometheus:
from Logger import PrometheusMetric
metrics = PrometheusMetric(
prefix="suite_logs",
default_labels={"service_name": "mi_servicio", "env": "dev"},
port=9102, # inicia un servidor HTTP en este puerto
)
requests_total = metrics.counter(
"requests_total", "Solicitudes procesadas", labels=["endpoint"]
)
latency_seconds = metrics.histogram(
"latency_seconds",
"Latencia de peticiones",
labels=["endpoint"],
buckets=[0.1, 0.5, 1, 2, 5],
)
requests_total.inc(endpoint="/health")
latency_seconds.observe(0.35, endpoint="/health")
Agrega el puerto (9102 en el ejemplo) como target de scrape en Prometheus/Alloy para ver las series con el prefijo definido.
Atajo: si quieres emitir sin guardar handles, usa counter_value, gauge_value, histogram_observe y summary_observe, pudiendo sobreescribir el prefijo por métrica:
metrics.gauge_value("workers_active", 3, prefix="backend", labels={"queue": "ingest"})
metrics.counter_value("processed_total", 1, prefix="backend", labels={"queue": "ingest"})
En este repo, Alloy ya está configurado para scrapear host.docker.internal:9102 con el job_name="app_metrics". Si tu script expone métricas en ese puerto (con PrometheusMetric(port=9102)), se almacenarán sin cambios adicionales.
Configuración Inicial
1. Configurar variables de entorno
# Copiar archivo de ejemplo
cp .env.example .env
# Editar archivo .env y cambiar la contraseña de Grafana
nano .env
IMPORTANTE: Cambia GRAFANA_ADMIN_PASSWORD por una contraseña segura.
2. Iniciar los servicios
docker-compose up -d
Verificar estado
docker-compose ps
Ver logs
# Todos los servicios
docker-compose logs -f
# Servicio espec�fico
docker-compose logs -f grafana
docker-compose logs -f prometheus
docker-compose logs -f mimir
Detener los servicios
docker-compose down
Acceso a los Servicios
-
Grafana: http://localhost:3500
- Usuario: Ver
GRAFANA_ADMIN_USERen.env - Contrase�a: Ver
GRAFANA_ADMIN_PASSWORDen.env
- Usuario: Ver
-
Prometheus: http://localhost:9090
-
Mimir: http://localhost:9009
Configuraci�n
Modificar Configuraciones
Todos los archivos de configuraci�n est�n en la carpeta config/ y pueden editarse directamente:
-
Prometheus (
config/prometheus/prometheus.yml):- Agregar nuevos targets de scraping
- Configurar reglas de alertas
- Modificar intervalos de recolecci�n
-
Mimir (
config/mimir/mimir.yml):- Ajustar l�mites de series
- Configurar almacenamiento
- Modificar configuraci�n de cluster
-
Grafana (
config/grafana/grafana.ini):- Cambiar configuraci�n de seguridad
- Configurar autenticaci�n
- Ajustar configuraci�n de la base de datos
Aplicar Cambios
Despu�s de modificar las configuraciones:
# Reiniciar servicios espec�ficos
docker-compose restart prometheus
docker-compose restart mimir
docker-compose restart grafana
# O reiniciar todo
docker-compose restart
Agregar Fuentes de Datos
Edita config/grafana/provisioning/datasources/datasources.yml para agregar nuevas fuentes de datos autom�ticamente.
Cargar Dashboards
Coloca archivos JSON de dashboards en data/grafana/dashboards/ y se cargar�n autom�ticamente.
Flujo de Datos
- Prometheus recolecta m�tricas de los targets configurados
- Prometheus env�a las m�tricas a Mimir via remote_write
- Grafana consulta tanto Prometheus (datos recientes) como Mimir (datos hist�ricos)
Personalizaci�n
Agregar Node Exporter
Descomenta las l�neas en config/prometheus/prometheus.yml y agrega al docker-compose:
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
ports:
- "9100:9100"
networks:
- monitoring
Agregar Alertmanager
Descomenta las l�neas en config/prometheus/prometheus.yml y agrega al docker-compose:
alertmanager:
image: prom/alertmanager:latest
container_name: alertmanager
ports:
- "9093:9093"
networks:
- monitoring
Troubleshooting
Verificar conectividad
# Ping entre contenedores
docker exec prometheus ping mimir
docker exec grafana ping prometheus
Verificar configuraci�n de Prometheus
# Verificar sintaxis de configuraci�n
docker exec prometheus promtool check config /etc/prometheus/prometheus.yml
Verificar configuraci�n de Mimir
# Ver configuraci�n activa
curl http://localhost:9009/config