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

  1. Editar prometheus.yml:
# /srv/prometheus/config/prometheus.yml
scrape_configs:
  - job_name: 'mi-proyecto'
    static_configs:
      - targets: ['localhost:8105']
    metrics_path: /metrics
  1. Recargar Prometheus:
curl -X POST http://localhost:9090/-/reload
  1. 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 -f

Más Información