Edge Gateway — Instalación y Operación
Cómo instalar el contenedor rela-ai-edge en tu planta, registrarlo, asignarle fuentes, monitorear el fleet y solucionar problemas de conexión.
Edge Gateway
El edge gateway es un contenedor Docker que corre dentro de la red de tu planta y hace el polling de los PLCs localmente. En vez de que Rela AI abra conexiones TCP entrantes al PLC, el gateway toma los datos y los empuja por HTTPS saliente hacia el worker de Cloud Run.
¿Para qué sirve?
Para plantas con firewall estricto donde no podés abrir puertos entrantes, ni siquiera por VPN. El gateway requiere sólo HTTPS saliente al dominio de Rela AI — una regla que el 95% de los firewalls industriales ya permite sin negociación con IT. También añade buffering local: si internet se cae, los eventos se acumulan en el disco del gateway y se drenan cuando la conexión vuelve.
¿Cómo funciona?
- Instalás el contenedor en un equipo con Docker dentro de la red de la planta (Raspberry Pi, mini-PC industrial, NUC).
- Al arrancar, el contenedor se registra con nuestro backend presentando un token único por gateway.
- Recibe la configuración (qué fuentes tiene que pollear) vía HTTPS.
- Abre conexiones Modbus / OPC UA / S7 localmente al PLC.
- Cada lectura → evento → buffer SQLite → push HTTP al webhook del agente.
- Si la red se cae, el buffer retiene hasta 100k eventos; al recuperarse, los drena en orden FIFO.
- Emite heartbeats cada 60 segundos; si el backend no los ve durante >1h, dispara alarma
GATEWAY_OFFLINE.
Beneficios
| Firewall-friendly | Sólo HTTPS outbound 443. No requiere VPN, no requiere abrir puertos entrantes. |
| Buffering local | Store-and-forward SQLite — perdiendo internet no perdés datos. |
| Polling local | Latencia a PLC menor a 1ms (misma red). Sin RTT de internet. |
| Multi-protocolo | Un gateway puede pollear Modbus + OPC UA + S7 a la vez. |
| Monitoreo centralizado | Dashboard muestra fleet con last_heartbeat, CPU, memoria, queue depth. |
Instalación — paso a paso
1. Registrar el gateway en el dashboard
Dashboard → Conexiones → Edge Gateways → Registrar Gateway.
Te devuelve un gateway_id (ej. gw_a1b2c3) y un shared_secret que el contenedor usa para autenticarse. Guardalo — se muestra una sola vez.
2. Preparar el host
Requisitos mínimos:
- Linux x86_64 o ARM64 (Raspberry Pi 4+ funciona).
- Docker 20+ instalado.
- 1 GB RAM, 10 GB disco.
- Conectividad a la red del PLC (mismo subnet o con ruta).
- Salida a internet (HTTPS 443) al dominio
rela-ai-worker-*.run.app.
3. Arrancar el contenedor
docker run -d \
--name rela-ai-edge \
--restart unless-stopped \
-v rela-edge-data:/var/lib/rela-edge \
-e GATEWAY_ID=gw_a1b2c3 \
-e GATEWAY_SECRET=<shared_secret> \
-e BACKEND_URL=https://rela-ai-worker-687568754456.europe-west1.run.app \
gcr.io/rela-ai-488016/rela-ai-edge:latestO con docker compose:
services:
rela-ai-edge:
image: gcr.io/rela-ai-488016/rela-ai-edge:latest
restart: unless-stopped
volumes:
- rela-edge-data:/var/lib/rela-edge
environment:
GATEWAY_ID: gw_a1b2c3
GATEWAY_SECRET: <shared_secret>
BACKEND_URL: https://rela-ai-worker-687568754456.europe-west1.run.app
volumes:
rela-edge-data:4. Verificar que el gateway está online
En el dashboard, a los ~60 segundos deberías ver el gateway en verde con last_heartbeat reciente.
Logs locales:
docker logs -f rela-ai-edgeDeberías ver:
edge_started gateway_id=gw_a1b2c3
heartbeat_sent seq=1 latency_ms=142
config_fetched sources=05. Asignar fuentes al gateway
En el dashboard, edita las fuentes que querés que corran desde este gateway:
Deployment Mode:edgeEdge Gateway ID:gw_a1b2c3
En el próximo heartbeat (≤60s), el gateway descarga la config actualizada y empieza a pollear.
Fleet monitoring
Dashboard → Conexiones → Edge Gateways muestra todos los gateways del tenant con:
| Columna | Significado |
|---|---|
| Nombre | Etiqueta (ej. "Gateway Planta Norte") |
| Status | online si last_heartbeat < 60s, warning si 1-60min, offline si >60min |
| Last heartbeat | Tiempo relativo desde el último ping |
| CPU / Mem | Métricas del host reportadas por el contenedor |
| Queue depth | Eventos pendientes en el buffer (debería ser bajo salvo durante outages) |
| Firmware version | Versión del contenedor |
Alertas automáticas
Un Cloud Scheduler job corre cada hora y revisa todos los gateways. Si encuentra uno con last_heartbeat > 60min, dispara una alerta canónica GATEWAY_OFFLINE con severidad warning en el inbox. Los operadores la ven como cualquier otra alerta de activo.
La dedup del inbox consolida outages del mismo gateway en una sola fila hasta que vuelve a heartbeatear (no genera spam durante una caída larga).
Actualización de firmware
Dashboard → Edge Gateways → <gateway> → Actualizar firmware. Elegís la versión target. En el próximo heartbeat el gateway recibe la orden y:
- Descarga la nueva imagen Docker.
- Hace un
docker stopdel contenedor viejo. - Arranca el nuevo.
- Reporta éxito o falla en el siguiente heartbeat.
Si la actualización falla (imagen corrupta, espacio insuficiente), el gateway queda en la versión anterior y vemos el error en el dashboard.
Troubleshooting
El gateway no aparece online después de 2 minutos
Check 1 — logs del contenedor:
docker logs rela-ai-edge | tail -50Mensajes típicos y sus causas:
| Mensaje | Causa | Fix |
|---|---|---|
DNS resolution failed for rela-ai-worker-*.run.app | Sin conexión a internet o DNS bloqueado | Probá nslookup rela-ai-worker-687568754456.europe-west1.run.app desde el host |
SSL: CERTIFICATE_VERIFY_FAILED | Fecha del sistema fuera de sync + certs expirados | sudo systemctl restart systemd-timesyncd |
HTTP 401 Unauthorized | GATEWAY_SECRET incorrecto | Re-generá el secret en el dashboard y actualizá el contenedor |
HTTP 403 Forbidden | GATEWAY_ID no existe o fue eliminado | Registralo de nuevo en el dashboard |
Check 2 — conectividad saliente:
curl -v https://rela-ai-worker-687568754456.europe-west1.run.app/internal/healthDebería devolver 200 OK con JSON {"status":"ok"}.
El gateway está online pero no lee del PLC
- Verificá que el gateway y el PLC están en la misma red (ping desde el gateway al PLC debería funcionar).
- Revisá los logs del contenedor por errores Modbus/OPC UA específicos (mismo troubleshooting que fuentes Modbus o fuentes OPC UA).
- En el dashboard, cada fuente tiene un widget "Última lectura" — si lleva rato en 0, los logs del contenedor te dicen por qué.
Queue depth subiendo sin parar
Significa que el gateway está leyendo más rápido de lo que puede pushear al backend. Causas comunes:
- Internet lento: ver latencia HTTPS en los logs. >2s suele indicar problema.
- Backend caído: el último POST devolvió 5xx. Ver dashboard.
- Too many sources: redistribuí entre gateways.
El queue tiene tope de 100k eventos. Al llegar, empieza a descartar los más viejos con un warning. Si ves esto, es hora de añadir otro gateway o debuguear el cuello.
Queue depth en 0 y sin eventos llegando al dashboard
El gateway está conectado y pusheando OK, pero el pipeline backend no los está procesando. Causas:
- La fuente que debería emitir tiene
enabled: false. - El machine agent asignado a esa fuente tiene
min_severitydemasiado alto. - Hay una regla de correlación suprimiendo (ver docs de Event Rules).
Consideraciones de seguridad
- El
shared_secretes equivalente a una llave de API — tratalo como cualquier secreto. - El gateway rota su auth token automáticamente cada 24 horas usando el secret.
- Cada gateway sólo puede leer las fuentes asignadas a su
gateway_id. No puede suplantar a otros gateways del mismo tenant. - Todo el tráfico saliente va cifrado TLS 1.3.
- No hay conexión entrante al gateway desde internet — no es un servidor, es un cliente.
Cómo probar que el gateway funciona end-to-end
Checklist operativo:
- Dashboard → Edge Gateways → gw_xxx: estado
online,last_heartbeatmenor a 1min. - CPU / Mem razonables (menor al 20% CPU, menos de 500MB RAM en idle).
- Queue depth bajo o 0.
- Una fuente con
deployment_mode=edgeyedge_gateway_id=gw_xxxdebe estarconnectedy leer. - Eventos llegando al inbox con
source_system=edge_gatewayen los metadatos. - Sin alertas
GATEWAY_OFFLINEdel propio gateway en el inbox.
Conexión Modbus TCP — Guía Técnica
Cómo conectar un PLC Modbus TCP a Rela AI: campos del formulario, register map, modos cloud_direct vs edge, emit policies, test de conexión y troubleshooting por tipo de error.
Handoff al técnico por WhatsApp
Cómo el evento industrial llega al técnico con todo el contexto sin que lo repita el agente.