205 lines
5.2 KiB
Markdown
205 lines
5.2 KiB
Markdown
# 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:
|
|
```python
|
|
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:
|
|
```python
|
|
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:
|
|
```python
|
|
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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
### Verificar estado
|
|
```bash
|
|
docker-compose ps
|
|
```
|
|
|
|
### Ver logs
|
|
```bash
|
|
# 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
|
|
```bash
|
|
docker-compose down
|
|
```
|
|
|
|
## Acceso a los Servicios
|
|
|
|
- **Grafana**: http://localhost:3500
|
|
- Usuario: Ver `GRAFANA_ADMIN_USER` en `.env`
|
|
- Contrase�a: Ver `GRAFANA_ADMIN_PASSWORD` en `.env`
|
|
|
|
- **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:
|
|
|
|
1. **Prometheus** (`config/prometheus/prometheus.yml`):
|
|
- Agregar nuevos targets de scraping
|
|
- Configurar reglas de alertas
|
|
- Modificar intervalos de recolecci�n
|
|
|
|
2. **Mimir** (`config/mimir/mimir.yml`):
|
|
- Ajustar l�mites de series
|
|
- Configurar almacenamiento
|
|
- Modificar configuraci�n de cluster
|
|
|
|
3. **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:
|
|
|
|
```bash
|
|
# 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
|
|
|
|
1. **Prometheus** recolecta m�tricas de los targets configurados
|
|
2. **Prometheus** env�a las m�tricas a **Mimir** via remote_write
|
|
3. **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:
|
|
|
|
```yaml
|
|
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:
|
|
|
|
```yaml
|
|
alertmanager:
|
|
image: prom/alertmanager:latest
|
|
container_name: alertmanager
|
|
ports:
|
|
- "9093:9093"
|
|
networks:
|
|
- monitoring
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Verificar conectividad
|
|
```bash
|
|
# Ping entre contenedores
|
|
docker exec prometheus ping mimir
|
|
docker exec grafana ping prometheus
|
|
```
|
|
|
|
### Verificar configuraci�n de Prometheus
|
|
```bash
|
|
# Verificar sintaxis de configuraci�n
|
|
docker exec prometheus promtool check config /etc/prometheus/prometheus.yml
|
|
```
|
|
|
|
### Verificar configuraci�n de Mimir
|
|
```bash
|
|
# Ver configuraci�n activa
|
|
curl http://localhost:9009/config
|
|
```
|