Uptime 30 días
99,97%
SLA objetivo: 99,9%
Endpoints activos
9
0 caídos
P95 respuesta API
187 ms
Umbral: 2 000 ms
SSL expira en
47 días
Alerta si < 30 días
Backend
API Gateway
api.nutriflow.app/health
143 ms
ACTIVO
Auth Service
api.nutriflow.app/auth/health
68 ms
ACTIVO
GraphQL API
api.nutriflow.app/graphql
212 ms
ACTIVO
Frontend
Web App
app.nutriflow.app
340 ms
ACTIVO
Landing Page
nutriflow.app
189 ms
ACTIVO
Infraestructura
PostgreSQL
db.nutriflow.internal:5432
4 ms
ACTIVO
Redis Cache
redis.nutriflow.internal:6379
1 ms
ACTIVO
Externos & Seguridad
Stripe API
api.stripe.com/v1
542 ms
ACTIVO
SSL Certificate
nutriflow.app — expira 02/08/2026
—
47 DÍAS
Configuracion de Alertas
Slack (#ops-alerts)
Activo
PagerDuty (DB)
Activo
Umbral fallos
3 consecutivos
Umbral recuperacion
2 consecutivos
Alerta resolución
Activada
Almacenamiento
SQLite /data/gatus.db
RAM usada (Gatus)
~14 MB
Intervalos de Monitoreo
API Gateway
30 s
Auth Service
30 s
GraphQL API
30 s
Web App / Landing
60 s
PostgreSQL / Redis
15 – 30 s
Stripe API
5 min
SSL Certificate
1 h
Historial de alertas recientes
API Gateway — Recuperado
hace 2 d
Stripe API — Timeout puntual
hace 4 d
GraphQL API — Latencia elevada
hace 11 d
Configuracion generada — lista para produccion
config.yaml
docker-compose.yml
config.yaml — NutriFlow Monitoring
# config.yaml — NutriFlow SaaS Health Monitoring
# Generado por CULTIVA IA · Skill: gatus-monitoreo-salud-endpoints
storage:
type: sqlite
path: /data/gatus.db
web:
port: 8080
alerting:
slack:
webhook-url: "${SLACK_WEBHOOK_URL}"
default-alert:
enabled: true
failure-threshold: 3
success-threshold: 2
send-on-resolved: true
pagerduty:
integration-key: "${PAGERDUTY_KEY}"
default-alert:
enabled: true
failure-threshold: 5
send-on-resolved: true
endpoints:
# ─── Backend ───────────────────────────────────
- name: API Gateway
group: backend
url: "https://api.nutriflow.app/health"
interval: 30s
conditions:
- "[STATUS] == 200"
- "[RESPONSE_TIME] < 2000"
- "[BODY].status == healthy"
alerts:
- type: slack
- type: pagerduty
- name: Auth Service
group: backend
url: "https://api.nutriflow.app/auth/health"
interval: 30s
conditions:
- "[STATUS] == 200"
- "[RESPONSE_TIME] < 1000"
alerts:
- type: slack
- name: GraphQL API
group: backend
url: "https://api.nutriflow.app/graphql"
method: POST
headers:
Content-Type: application/json
body: '{"query": "{ __typename }"}'
interval: 30s
conditions:
- "[STATUS] == 200"
- "[BODY].data.__typename == Query"
alerts:
- type: slack
# ─── Frontend ──────────────────────────────────
- name: Web App
group: frontend
url: "https://app.nutriflow.app"
interval: 60s
conditions:
- "[STATUS] == 200"
- "[RESPONSE_TIME] < 3000"
- "[BODY] contains NutriFlow"
alerts:
- type: slack
- name: Landing Page
group: frontend
url: "https://nutriflow.app"
interval: 60s
conditions:
- "[STATUS] == 200"
- "[RESPONSE_TIME] < 3000"
# ─── Infraestructura ───────────────────────────
- name: PostgreSQL
group: infrastructure
url: "tcp://db.nutriflow.internal:5432"
interval: 30s
conditions:
- "[CONNECTED] == true"
alerts:
- type: slack
- type: pagerduty
- name: Redis Cache
group: infrastructure
url: "tcp://redis.nutriflow.internal:6379"
interval: 15s
conditions:
- "[CONNECTED] == true"
# ─── Externos & Seguridad ───────────────────────
- name: Stripe API
group: external
url: "https://api.stripe.com/v1"
interval: 5m
conditions:
- "[STATUS] == 401" # 401 = API up, sin credenciales
- "[RESPONSE_TIME] < 3000"
- name: SSL Certificate
group: security
url: "https://nutriflow.app"
interval: 1h
conditions:
- "[CERTIFICATE_EXPIRATION] > 720h" # Alerta si < 30 días
alerts:
- type: slack
docker-compose.yml
version: "3.8"
services:
gatus:
image: twinproduction/gatus:latest
ports:
- "8080:8080"
volumes:
- ./config.yaml:/config/config.yaml
- gatus-data:/data
environment:
- SLACK_WEBHOOK_URL=${SLACK_WEBHOOK_URL}
- PAGERDUTY_KEY=${PAGERDUTY_KEY}
restart: unless-stopped
volumes:
gatus-data:
# Arrancar: docker-compose up -d
# Panel: http://localhost:8080