Monitorización y Observabilidad

Resumen

Herramientas de observabilidad en OpenShift: métricas (Prometheus), logs (ELK), alertas, dashboards, y monitorización de aplicaciones.

Conceptos Clave

Stack de Observabilidad

Aplicaciones
    ├─ Métricas (Prometheus)
    ├─ Logs (Elasticsearch)
    ├─ Traces (Jaeger)
    └─ Alertas (AlertManager)

Prometheus (Métricas)

Propósito: Recolectar y almacenar métricas de tiempo real

Incluido en OpenShift: Sí (cluster monitoring)

Métrica típica:

cpu_usage_percent{pod="myapp-1"} = 45%
memory_bytes{pod="myapp-1"} = 256MB
request_duration_seconds = 0.234

Visualización: Grafana

Prometheus Queries (PromQL)

# CPU actual
node_cpu_seconds_total

# Memoria disponible
node_memory_MemAvailable_bytes

# Request rate
rate(http_requests_total[5m])

# Error rate
rate(http_requests_total{status=~"5.."}[5m])

Logs

OpenShift logging: Elasticsearch + Kibana (optional)

Fuentes:

  • Container logs (stdout)
  • Application logs
  • Audit logs

Acceso:

oc logs deployment/myapp
oc logs -f pod/myapp-1  # Tail

Centralizado: Logs → Elasticsearch → Kibana (búsqueda)

Alertas

AlertManager: Alertas basadas en métricas

Ejemplo:

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: myapp-alerts
spec:
  groups:
  - name: myapp
    rules:
    - alert: HighCPU
      expr: cpu_usage_percent > 80
      for: 5m
      annotations:
        summary: "Pod {{ $labels.pod }} CPU alta"

Acciones: Slack, email, PagerDuty, webhook

Dashboards

Grafana: Visualización de métricas

Tipos de panel:

  • Gráficos de línea (tendencia)
  • Gauges (valor actual)
  • Tablas (listados)
  • Heatmaps (distribución)

Pre-built: OpenShift incluye dashboards cluster

Health Checks

spec:
  containers:
  - name: app
    livenessProbe:
      httpGet:
        path: /health
        port: 8080
      initialDelaySeconds: 10
      periodSeconds: 5
    readinessProbe:
      httpGet:
        path: /ready
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 3

Liveness: ¿Está vivo? Si no → restart Readiness: ¿Listo para tráfico? Si no → quita de LB

Métricas de Aplicación

Exponer en app: /metrics endpoint Prometheus format

# HELP http_requests_total Total requests
# TYPE http_requests_total counter
http_requests_total{method="GET",status="200"} 1234

Biblioteca: Prometheus client library

Relaciones

Conecta con

  • Parte de: OpenShift
  • Herramientas: Prometheus, Grafana, Elasticsearch, Kibana
  • Integración: AlertManager para alertas

Fuentes