1. Skip to content

1. Observabilidad y Telemetría

Capacidad de entender el estado interno de un sistema mediante sus outputs: logs, métricas y traces.


1.1 🎯 Los Tres Pilares

Qué: Logging, Metrics, Tracing - información complementaria para diagnosticar sistemas.

Por qué: En producción, no puedes hacer debugging con breakpoints. La observabilidad es tu única ventana.

Quién: Developers, SREs, DevOps, Support.

Costo: 5-10% overhead en performance, invaluable para incident response.


1.2 📝 Logging (Registros)

Qué: Eventos discretos con timestamp, nivel y contexto.

Aspecto Qué Por qué Cómo Herramientas
Structured Logs JSON con campos consistentes Queryable, parseable {"timestamp": "...", "level": "error", "trace_id": "..."} Winston, Loguru, Log4j2
Niveles DEBUG, INFO, WARN, ERROR, FATAL Filtrar por severidad INFO en prod, DEBUG en dev Configuración por entorno
Correlation IDs trace_id único por request Rastrear request completo Generar UUID en gateway, propagar headers X-Trace-Id, OpenTelemetry
Contexto user_id, endpoint, duration Debugging efectivo Incluir metadatos relevantes MDC (Mapped Diagnostic Context)
Rotación Archivar logs antiguos No llenar disco Rotar diario, retener 30 días Logrotate, S3 lifecycle
Agregación Centralizar logs de múltiples fuentes Vista unificada Enviar a Elasticsearch/Loki Fluentd, Filebeat

Stack ELK:

Alternativas:


1.3 📊 Metrics (Métricas)

Qué: Valores numéricos agregados en el tiempo.

Framework Qué Cuándo Ejemplo
RED Rate, Errors, Duration User-facing services requests/sec, error rate %, p95 latency
USE Utilization, Saturation, Errors Resources (CPU, disk) CPU %, queue depth, disk errors
Golden Signals Latency, Traffic, Errors, Saturation Google SRE approach p99 latency, QPS, 5xx rate, memory %

1.3.1 Tipos de Métricas

Tipo Qué Cuándo Ejemplo
Counter Solo aumenta (nunca decrece) Total requests, errores http_requests_total
Gauge Valor que sube y baja Memoria, CPU, connections activas active_connections
Histogram Distribución de valores Latencias, tamaños de response http_request_duration_seconds
Summary Percentiles precalculados Latencias (client-side) p50, p95, p99

1.3.2 Herramientas de Métricas

Tool Qué Por qué Cómo
Prometheus Time-series DB con pull model Estándar de facto, PromQL potente Exponer /metrics, Prometheus scrapes cada 15s
Grafana Dashboards para múltiples fuentes Visualización flexible Datasource → Query → Panel
StatsD Aggregation daemon con push model Fácil instrumentar Cliente envía UDP, StatsD agrega
Micrometer Facade para métricas (Java) Vendor-neutral Exportar a Prometheus, Datadog, etc.

1.4 🔍 Tracing (Trazas Distribuidas)

Qué: Seguir una request a través de múltiples servicios.

Por qué: En microservicios, una operación toca N servicios. Tracing muestra el path completo.

Componente Qué Cómo Herramientas
Trace Request completo (raíz a hojas) ID único propagado por headers X-B3-TraceId
Span Operación individual dentro de trace Parent-child relationships POST /users (50ms) → INSERT INTO users (30ms)
Context Propagation Pasar trace_id entre servicios Headers HTTP, gRPC metadata OpenTelemetry
Sampling Solo trazar % de requests Reducir overhead 1% en prod (high traffic), 100% en staging

1.4.1 Herramientas de Tracing

Tool Qué Por qué Cuándo
Jaeger Tracing distribuido (Uber) Open source, escalable Microservicios con alta complejidad
Zipkin Tracing distribuido (Twitter) Maduro, ampliamente adoptado Alternativa a Jaeger
OpenTelemetry Estándar unificado (logs+metrics+traces) Vendor-neutral, CNCF Reemplazo de OpenTracing+OpenCensus
AWS X-Ray Tracing para servicios AWS Integración nativa Apps en AWS

1.5 🏥 Health Checks

Qué: Endpoints para validar estado del servicio.

Tipo Qué Cuándo Endpoint Valida
Liveness ¿Está vivo el proceso? K8s reinicia si falla /live o /healthz Proceso responde
Readiness ¿Listo para recibir tráfico? K8s no envía tráfico si falla /ready DB conectada, dependencias OK
Startup ¿Terminó inicialización? K8s espera antes de liveness /startup Warmup completado

Ejemplo:

GET /ready
{
  "status": "healthy",
  "checks": {
    "database": "ok",
    "redis": "ok",
    "external_api": "degraded"
  },
  "uptime": "3d 14h 22m"
}

1.6 🚨 Alerting (Alertas)

Qué: Notificaciones automáticas ante problemas.

Por qué: Detectar y responder antes que usuarios reporten.

Concepto Qué Cómo
Threshold Valor que dispara alerta error_rate > 5%
Window Periodo de evaluación Últimos 5 minutos
Severity Nivel de urgencia Critical → page, Warning → ticket
Runbook Guía paso a paso para resolver Link en alerta
On-call Rotation Quién responde PagerDuty, Opsgenie

1.6.1 Herramientas de Alerting

Tool Qué Cuándo
Alertmanager Alertas de Prometheus Stack Prometheus
PagerDuty Incident management Equipos on-call
Opsgenie Alertas + escalations Alternativa PagerDuty

Ejemplo Prometheus Alert:

- alert: HighErrorRate
  expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.05
  for: 5m
  labels:
    severity: critical
  annotations:
    summary: "High error rate on {{ $labels.instance }}"
    description: "Error rate is {{ $value | humanizePercentage }}"

1.7 📈 APM (Application Performance Monitoring)

Qué: Monitoreo end-to-end de aplicaciones con profiling automático.

Por qué: Detecta N+1 queries, memory leaks, slow transactions sin instrumentación manual.

Tool Qué Cuándo
New Relic APM full-stack Enterprise, soporte 24/7
Datadog APM APM + Infra + Logs Unified platform
Elastic APM APM integrado con ELK Ya usas Elasticsearch
Dynatrace AI-powered APM Apps complejas, auto-discovery

1.8 🎯 SLIs, SLOs, SLAs

Concepto Qué Ejemplo
SLI (Service Level Indicator) Métrica que mide servicio Latencia p95, error rate
SLO (Service Level Objective) Target interno p95 < 300ms en 99.9% requests
SLA (Service Level Agreement) Contrato con usuario 99.9% uptime, créditos si incumple
Error Budget Cuánto downtime tolerable 0.1% = 43 min/mes

Fórmula Error Budget:

Error Budget = 100% - SLO
Si SLO = 99.9%, Error Budget = 0.1% = 43.2 min/mes

Uso: Si error budget consumido → pausar features, priorizar estabilidad.


1.9 📊 Dashboards

Qué incluir:

1.9.1 Dashboard de Servicio

  • Request rate (QPS)
  • Error rate (%)
  • Latencia (p50, p95, p99)
  • Availability (uptime %)
  • Active users

1.9.2 Dashboard de Infraestructura

  • CPU, Memory, Disk por nodo
  • Network traffic
  • Pod/container count
  • Database connections

1.9.3 Dashboard de Negocio

  • Conversiones
  • Revenue
  • Active subscriptions

Herramientas: Grafana, Kibana, Datadog


1.10 🚫 Anti-patrones

Anti-patrón Problema Solución
Log everything Ruido, costo storage Log lo relevante, sampling en high cardinality
No correlation IDs Impossible rastrear request Siempre trace_id + user_id
Alertas no accionables Alert fatigue Alerta solo si requiere acción humana
Dashboards vanidosos Métricas que nadie usa Medir SLIs reales, no proxies
Sin runbooks Alerta sin guía de resolución Todo alerta → runbook

1.11 📚 Recursos