Monitoring
Observabilidad y monitoreo de servicios
Stack de Observabilidad
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Prometheus │ --> │ Grafana │ --> │ Alertmanager │
│ (Métricas) │ │ (Dashboards) │ │ (Alertas) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │
v v
┌─────────────────┐ ┌─────────────────┐
│ Netdata │ │ Telegram Bot │
│ (Real-time) │ │ (Notificaciones)│
└─────────────────┘ └─────────────────┘
URLs de Acceso
| Herramienta | URL | Descripción |
|---|---|---|
| Grafana | infra.illanes00.cl | Dashboards principales |
| Prometheus | infra.illanes00.cl:9090 | Queries y configuración |
| Netdata | localhost:19999 | Métricas en tiempo real |
| Status API | infra.illanes00.cl/status.json | Estado JSON |
Métricas Clave
Por Servicio
Cada servicio expone (si usa prometheus_client):
from prometheus_client import Counter, Histogram, generate_latest
REQUEST_COUNT = Counter('http_requests_total', 'Total HTTP requests', ['method', 'endpoint'])
REQUEST_LATENCY = Histogram('http_request_duration_seconds', 'Request latency')Queries PromQL Útiles
# Uptime de un servicio
up{job="mi-proyecto"}
# Requests por segundo
rate(http_requests_total[5m])
# Latencia p99
histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))
# Uso de memoria
process_resident_memory_bytes{job="mi-proyecto"}
Agregar Nueva Métrica
- Editar prometheus.yml:
# /srv/prometheus/config/prometheus.yml
scrape_configs:
- job_name: 'mi-proyecto'
static_configs:
- targets: ['localhost:8105']
metrics_path: /metrics- Recargar Prometheus:
curl -X POST http://localhost:9090/-/reload- Verificar en Grafana:
- Ir a Explore → Prometheus
- Buscar la nueva métrica
Alertas
Las alertas se configuran en Prometheus y se envían via Telegram:
# /srv/prometheus/rules/alerts.yml
groups:
- name: services
rules:
- alert: ServiceDown
expr: up == 0
for: 2m
labels:
severity: critical
annotations:
summary: "{{ $labels.job }} está caído"Comandos Rápidos
# Ver estado de todos los servicios
curl -s https://infra.illanes00.cl/status.json | jq '.services'
# Verificar que Prometheus está scrapeando
curl -s http://localhost:9090/api/v1/targets | jq '.data.activeTargets[]'
# Logs de Grafana
journalctl -u grafana-server -fMás Información
- Prometheus - Configuración detallada
- Grafana - Dashboards y alertas