Guía de solución de problemas de la pasarela¶
Esta guía ayuda a diagnosticar y resolver problemas comunes con la arquitectura de seguridad de la pasarela.
Diagnósticos rápidos¶
Verificar la salud de la pasarela¶
# Docker
docker-compose -f deploy/docker/docker-compose.yml exec gateway \
grpc_health_probe -addr=:50051
# Kubernetes
kubectl exec deploy/almanak-gateway -c gateway -- \
grpc_health_probe -addr=:50051
Salida esperada: status: SERVING
Consultar logs de contenedores¶
# Logs de la pasarela
docker-compose logs gateway
# Logs de la estrategia
docker-compose logs strategy
# Kubernetes
kubectl logs deploy/almanak-gateway -c gateway
kubectl logs deploy/almanak-gateway -c strategy
Verificar conectividad de red¶
Desde el contenedor de estrategia:
# Probar conectividad a la pasarela
docker-compose exec strategy \
python -c "import socket; print(socket.gethostbyname('gateway'))"
# Debería devolver IP interna (172.x.x.x o 10.x.x.x)
Problemas comunes¶
Problema: La estrategia no puede conectarse a la pasarela¶
Síntomas:
- Errores connection refused
- Logs failed to connect to gateway
- La estrategia inicia pero falla inmediatamente
Causas y soluciones:
-
Pasarela no lista
-
Dirección de pasarela incorrecta
-
Configuración de red incorrecta
Problema: "Method Not Allowed" para llamadas RPC¶
Síntomas:
- ValidationError: method 'debug_traceTransaction' is not allowed
- Las llamadas RPC fallan con errores de permisos
Causa: El método RPC está bloqueado por la lista de permisos de la pasarela.
Solución:
Solo estos métodos están permitidos:
- eth_call, eth_getBalance, eth_getTransactionCount
- eth_getTransactionReceipt, eth_getBlockByNumber, eth_getBlockByHash
- eth_blockNumber, eth_chainId, eth_gasPrice, eth_estimateGas
- eth_getLogs, eth_getCode, eth_getStorageAt
- eth_sendRawTransaction, net_version
Si necesitas un método bloqueado, contacta a soporte para discutir alternativas.
Problema: "Chain Not Configured"¶
Síntomas:
- Chain 'xyz' is not configured
- Las llamadas RPC fallan con error de precondición
Causa: La cadena no está en la lista permitida o no está configurada.
Solución:
Cadenas permitidas: ethereum, arbitrum, base, optimism, polygon, avalanche, bsc, sonic, plasma, blast, mantle, berachain
# Verificar que la fuente RPC está configurada en la pasarela
docker-compose exec gateway env | grep -E 'RPC_URL|ALCHEMY'
Problema: Límite de velocidad¶
Síntomas:
- Rate limited, retry after X seconds
- Estado gRPC RESOURCE_EXHAUSTED
Causa: Demasiadas peticiones a la pasarela.
Soluciones:
-
Implementar caché
-
Agrupar peticiones
-
Reducir la frecuencia de polling
Problema: El estado no persiste¶
Síntomas: - Estado guardado pero no recuperado - Estado diferente entre reinicios
Causas y soluciones:
-
strategy_id incorrecto
-
Límite de tamaño de estado excedido
-
Base de datos no configurada
Problema: Acceso a red externa bloqueado¶
Síntomas:
- socket.gaierror: [Errno -2] Name or service not known
- ConnectionError: No route to host
- Las peticiones HTTP fallan por timeout
Causa: ¡Este es el comportamiento esperado! Los contenedores de estrategia no tienen acceso a Internet.
Solución:
Usa los servicios proporcionados por la pasarela en su lugar:
# En lugar de HTTP directo
# requests.get("https://api.coingecko.com/...")
# Usar la integración de la pasarela
from almanak.framework.integrations import coingecko
prices = await coingecko.get_price("ethereum")
Problema: Errores de seguridad del contenedor¶
Síntomas:
- Operation not permitted
- Read-only file system
- Permission denied
Causa: El endurecimiento de seguridad está funcionando correctamente.
Soluciones:
-
Escribir archivos
-
Instalar paquetes en tiempo de ejecución
Problema: Métricas no disponibles¶
Síntomas:
- El endpoint /metrics devuelve 404
- Prometheus no puede recopilar métricas
Causas y soluciones:
-
Métricas deshabilitadas
-
Puerto incorrecto
-
Política de red bloqueando
Herramientas de depuración¶
Reflexión gRPC¶
La pasarela soporta reflexión gRPC para depuración:
# Listar servicios
grpcurl -plaintext localhost:50051 list
# Describir un servicio
grpcurl -plaintext localhost:50051 describe almanak.gateway.MarketService
# Llamar a un método
grpcurl -plaintext -d '{"chain": "arbitrum", "token": "ETH"}' \
localhost:50051 almanak.gateway.MarketService/GetPrice
Logs de auditoría¶
Las operaciones de la pasarela se registran en formato JSON:
# Ver logs de auditoría
docker-compose logs gateway | grep gateway_request
# Parsear con jq
docker-compose logs gateway 2>&1 | grep gateway_request | \
tail -1 | jq -r '.timestamp, .service, .method, .latency_ms'
Depuración de red¶
Probar el aislamiento de red desde dentro del contenedor de estrategia:
# Entrar al contenedor de estrategia
docker-compose exec strategy /bin/sh
# Probar DNS (debería fallar para dominios externos)
nslookup google.com
# Probar conectividad (debería fallar)
ping -c 1 8.8.8.8
# Probar pasarela (debería funcionar)
nslookup gateway
nc -zv gateway 50051
Endpoints de salud¶
# Salud gRPC de la pasarela
grpc_health_probe -addr=:50051
# Salud HTTP de la pasarela
curl http://gateway:9090/health
# Métricas de la pasarela
curl http://gateway:9090/metrics
Obtener ayuda¶
Si sigues teniendo problemas:
- Revisa los logs buscando mensajes de error específicos
- Verifica la configuración contra la documentación
- Ejecuta los diagnósticos usando los comandos anteriores
- Contacta a soporte con:
- Mensajes de error de los logs
- Pasos para reproducir
- Versiones de la pasarela y la estrategia
- Configuración (sin secretos)