This guide provides Level 1 (L1) diagnostic steps for troubleshooting issues in on-premise Odin AI deployments. These steps help identify common problems with containers, databases, services, and system resources.
Prerequisites: You need SSH access to the customer’s VM/server where Odin AI is deployed, and appropriate permissions to run Docker commands and access container logs.
Container Status Checks
Check All Container Status
First, verify which containers are running and their health status:
Expected Containers:
web - Frontend application
api or fastapi_backend - Backend API server
worker or celery_worker - Celery worker(s)
redis - Redis cache
rabbitmq - RabbitMQ message queue
supabase-studio - Supabase Studio
supabase-kong - Kong API Gateway
supabase-auth - Auth service
supabase-db or postgres - PostgreSQL database
- Other Supabase services (storage, meta, etc.)
What to Check:
- All containers should be in “Up” status
- No containers should be in “Restarting” or “Exited” state
- Health checks should show “healthy” where applicable
Restart Failed Containers
If containers are stopped or restarting:
Backend Container Logs
Check API Container Logs
The backend API container logs contain critical information about errors, database connections, and service issues:
What to Look For:
- Database connection errors
- Redis connection failures
- RabbitMQ connection issues
- Authentication errors
- API endpoint errors (500, 503, etc.)
- Import/export errors
- Knowledge Base processing errors
- Worker task failures
Check Worker Container Logs
Worker containers handle background tasks (KB processing, embeddings, etc.):
What to Look For:
- Task execution errors
- Memory issues
- Timeout errors
- Database connection errors in workers
- Knowledge Base sync failures
- Embedding generation errors
Check Web Container Logs
Frontend container logs can reveal UI and API connection issues:
What to Look For:
- Build errors
- API connection failures
- Environment variable issues
- Port binding errors
Database Status
Check PostgreSQL/Supabase Database Status
What to Check:
- Database container is running
- No connection errors in logs
- Database is not full (check disk space)
- Active connections are within limits
- No long-running queries blocking operations
Check Database Connectivity from API
Check Database Migrations
Redis Status
Check Redis Container
What to Check:
- Redis is responding to ping
- Memory usage is within limits
- No connection errors
- No eviction errors (memory full)
Test Redis from API Container
RabbitMQ Status
Check RabbitMQ Container
What to Check:
- Container is running
- No connection errors
- Queues are processing messages
- No message backlog
Check RabbitMQ from API
System Resources
Check Disk Space
Low disk space can cause database, storage, and container issues:
What to Check:
- Root partition has sufficient space (>20% free recommended)
- Docker volumes are not full
- Database data directory has space
- Supabase storage has space
Check Memory Usage
What to Check:
- System has available memory
- Containers are not hitting memory limits
- No OOM (Out of Memory) kills in logs
Check CPU Usage
Network Connectivity
Check Container Network
Check Port Availability
Environment Variables
Check Environment Configuration
What to Check:
- Database connection strings are correct
- Redis and RabbitMQ hostnames are correct
- API URLs are properly configured
- Required environment variables are set
- No typos in variable names
File Permissions
Check File and Directory Permissions
What to Check:
- Application directories are readable
- Docker socket has correct permissions
- Volume mounts have proper permissions
- Certificate files are accessible
Service-Specific Checks
Knowledge Base Issues
If Knowledge Base is not updating or processing:
Chat/Agent Issues
Authentication Issues
Common Error Patterns
Database Connection Errors
Symptoms:
- “Connection refused” errors
- “Too many connections” errors
- Timeout errors
Diagnostic Steps:
- Check database container is running:
docker ps | grep db
- Check database logs:
docker logs supabase-db
- Check connection limits:
docker exec supabase-db psql -U postgres -c "SHOW max_connections;"
- Check active connections:
docker exec supabase-db psql -U postgres -c "SELECT count(*) FROM pg_stat_activity;"
- Verify DATABASE_URL in environment variables
Redis Connection Errors
Symptoms:
- “Connection refused” to Redis
- Cache misses
- Session issues
Diagnostic Steps:
- Check Redis container:
docker ps | grep redis
- Test Redis:
docker exec redis redis-cli ping
- Check Redis logs:
docker logs redis
- Verify Redis hostname in environment variables
Worker Task Failures
Symptoms:
- Tasks not completing
- Knowledge Base not syncing
- Background jobs failing
Diagnostic Steps:
- Check worker logs:
docker logs worker
- Check worker container status:
docker ps | grep worker
- Check RabbitMQ queues: Access RabbitMQ management UI
- Check for memory issues:
docker stats worker
Storage/File Upload Issues
Symptoms:
- File uploads failing
- “File too large” errors
- Storage quota exceeded
Diagnostic Steps:
- Check disk space:
df -h
- Check Supabase storage logs:
docker logs supabase-storage
- Check file size limits in Supabase config
- Check storage bucket configuration
Quick Diagnostic Script
Create a diagnostic script to run all checks at once:
Save as diagnostics.sh, make executable: chmod +x diagnostics.sh, and run: ./diagnostics.sh
When escalating to L2 support, provide:
- Container Status: Output of
docker ps -a
- Recent Logs: Last 100-200 lines from relevant containers
- System Resources: Output of
df -h and free -h
- Error Messages: Specific error messages from logs
- Configuration: Environment variable names (not values) that are set
- Timeline: When the issue started
- Impact: What functionality is affected
Contact Support: support@getodin.ai
Additional Resources