LIVE
⏱ Last 30 minutes · Auto-refresh 30s
⬡ sre-team
service.name: "payment-service" OR "api-gateway" OR "meal-planner" OR "user-auth"  AND NOT  request.path:"/health"
index: logs-nutriflow-prod-*
env: production
NutriFlow — Observabilidad de Servicios (SRE)
Generado con Kibana 8.12 + Elasticsearch 8.12 · índice logs-nutriflow-prod-* · 16 Jun 2026, 11:42:30 UTC
Peticiones / min
2.847
▲ +12% vs hora anterior
Tasa de error
3.2%
▲ +0.8pp — payment-service
Latencia P95
847 ms
▲ +180 ms — meal-planner
Errores 5xx (30 min)
312
▲ 62 en últimos 5 min
Disponibilidad
96.8%
SLO target: 99.5%
Volumen de Peticiones — Últimos 30 min
Count of records · Date histogram @timestamp · Split: service.name
Lens · Line
3000 2000 1000 500 11:12 11:20 11:28 11:35 11:38 11:42
api-gateway
payment-service
meal-planner
user-auth
Distribución Códigos HTTP
Count · Top values of http.response.status_code
Lens · Donut
85,421 total req.
200 OK
66,970
78.4%
201 Created
6,919
8.1%
4xx Client
6,748
7.9%
5xx Server
4,784
5.6%
Errores por Servicio — Últimos 30 min
Filter: level:"error" · Top 5 values of service.name
Lens · Bar
payment-service
312 err
9.8%
meal-planner
194 err
4.1%
api-gateway
119 err
1.3%
notification-svc
75 err
2.2%
user-auth
37 err
0.5%
Latencia P95 por Servicio
95th percentile of response_time_ms · Filter: NOT /health
Lens · Metric
payment-service
1,240 ms
▲ SLO: > 800ms
meal-planner
847 ms
⚠ SLO: ~límite 800ms
api-gateway
312 ms
✓ dentro de SLO
user-auth
198 ms
✓ dentro de SLO
Top Errores por Frecuencia — Últimos 30 min
Filter: level:"error" · Columns: message.keyword, service.name, count · Top 8 · KQL: level:"error"
Lens · Table
Mensaje de Error Servicio Nivel Último visto Count %
PaymentGateway timeout: upstream 504 after 30000ms payment-service ERROR 11:42:18 187
25.1%
Stripe webhook signature verification failed payment-service ERROR 11:41:55 125
16.8%
OpenAI API rate limit exceeded (429) — meal generation meal-planner WARN 11:42:05 94
12.6%
PostgreSQL connection pool exhausted (pool_size=20) meal-planner ERROR 11:40:33 73
9.8%
JWT token expired — forcing re-authentication user-auth WARN 11:42:20 37
5.0%
SendGrid delivery failed — bounce rate exceeded threshold notification-svc ERROR 11:39:11 31
4.2%
Redis CLUSTER NODES timeout — cache miss fallback api-gateway WARN 11:41:08 28
3.8%
Unhandled promise rejection in /api/v2/plans endpoint api-gateway ERROR 11:38:42 22
3.0%
Alerting Rules — Kibana Alerting
🚨
High Error Rate — payment-service
ES Query · >50 errores en 5 min · interval: 1m · Notif: Slack #sre-alerts
FIRED
hace 3 min
⚠️
P95 Latency — meal-planner > 800ms
ES Query · percentile 95 > 800ms rolling 10min · Notif: PagerDuty
WARNING
hace 8 min
Disk Usage — Elasticsearch Nodes
Infrastructure · >85% disk usage · Notif: Email ingeniería
OK
11:40:00
SLO Burn Rate — api-gateway
SLO · 99.5% uptime · Fast burn >14x · Notif: PagerDuty
OK
11:42:00
Kibana Spaces — NutriFlow
sre-team
Infraestructura y observabilidad
4 dashboards
payments-team
Pagos, Stripe, facturación
2 dashboards
product-analytics
Activación, retención, funnel
6 dashboards
data-science
ML models, notebooks, experimentos
3 dashboards
KQL — Consultas rápidas SRE
KQL · Elasticsearch
# Errores payment-service (últimas 2h)
level: "error" AND service.name: "payment-service"

# Peticiones lentas (>2s, excluyendo /health)
response_time_ms > 2000 AND NOT request.path: "/health"

# Errores 5xx en api-gateway
http.response.status_code >= 500 AND
service.name: "api-gateway"

# Rate limit OpenAI en meal-planner
message: *rate limit* AND service.name: "meal-planner"
docker-compose.yml — Despliegue Kibana + Elasticsearch · NutriFlow Production
YAML · Docker Compose
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=true
      - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
      - ES_JAVA_OPTS=-Xms4g -Xmx4g     # NutriFlow: 4GB para producción
    ports: ["9200:9200"]
    volumes: [es_data:/usr/share/elasticsearch/data]

  kibana:
    image: docker.elastic.co/kibana/kibana:8.12.0
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - ELASTICSEARCH_USERNAME=kibana_system
      - ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD}
      - XPACK_ENCRYPTEDSAVEDOBJECTS_ENCRYPTIONKEY=${ENC_KEY}
      - SERVER_PUBLICBASEURL=https://kibana.nutriflow.internal
    ports: ["5601:5601"]