Check key expiration: API keys may expire based on your license
API server fails to start
Note: As of v0.9.0, API_KEY is optional. When not set, the server starts in open-access mode — all requests are admitted without authentication. This is the recommended default for community self-hosted deployments.
To enable authentication, set a strong random key:
# Generate a key
openssl rand -hex 32
# Pass it to the container
docker run -e API_KEY=<generated-value> ... meshoptixiq/meshoptixiq:latest
For Docker Compose, add it to your .env file and reference it as API_KEY: ${API_KEY}.
Error: 504 Gateway Timeout
Cause: Query too complex or database performance issues.
Solutions:
Simplify query: Reduce scope or use pagination for large result sets
Use pagination:
GET /queries/list_devices?limit=100&offset=0
Check database performance: Verify Neo4j or PostgreSQL has adequate resources
Contact support: If timeouts persist, contact
Docker Issues
Container Status: "Unhealthy"
Cause: Application startup failure or health check failure.
Create indexes: Ensure common query patterns are indexed:
CREATE INDEX FOR (d:Device) ON (d.hostname);
CREATE INDEX FOR (i:Interface) ON (i.name);
Archive old data: Consider archiving snapshots older than 90 days
PostgreSQL: Slow Query Performance
Cause: Missing indexes or insufficient resources.
Solutions:
Check query execution plan:
EXPLAIN ANALYZE SELECT * FROM devices WHERE hostname = 'switch-01';
Ensure indexes exist: Check application logs for index creation confirmations
Increase connection pool: Adjust max_connections in postgresql.conf if needed
Firewall Collection Issues
Error: "Parser failed" for firewall device
Cause: Unexpected CLI output format, unsupported firmware version, or wrong vendor type in inventory.
Solutions:
Check vendor type: Ensure the vendor field in your inventory file matches one of the supported firewall vendors: paloalto_panos, juniper_srx, fortinet_fortios, cisco_asa
Verify SSH user permissions: The collection account must have at minimum read access to security policies. For PAN-OS: vsys reader role. For Fortinet: readonly profile with system + firewall access.
Check firmware version: Very old firmware may produce different CLI output. Check the supported version matrix in the vendor matrix appendix.
Enable verbose logging: Set MESHOPTIXIQ_LOG_LEVEL=DEBUG and re-run collection to see the raw parser output.
Flow Collection Not Receiving Data
No flows appearing in Flow Analytics
Cause: Flow listener not enabled, wrong port, or router not exporting to the MeshOptixIQ host.
Solutions:
Enable the sFlow listener: Set SFLOW_ENABLED=true in your environment (Enterprise license required). For NetFlow/IPFIX, configure your routers to export to UDP port 2055 (NetFlow v9) or 9995 (IPFIX). sFlow uses UDP port 6343.
Open the UDP port:
# Check if the listener is receiving packets
sudo tcpdump -i eth0 udp port 6343 -c 10 # sFlow
sudo tcpdump -i eth0 udp port 2055 -c 10 # NetFlow
Verify router export config: Confirm the router exports to the MeshOptixIQ host IP. sFlow agent IP must be set correctly on the device.
What happens when the license server is unreachable
The API server includes a 72-hour grace period for offline operation.
0–72 hours offline: All features work normally. A warning appears in logs every validation cycle. GET /health/license shows "grace_period_active": true.
72+ hours offline: The API returns 402 Payment Required on plan-gated endpoints with {"detail": "license_required"}. The UI, /health, /health/license, and Community-tier features remain open.
After reconnection: Validation resumes automatically on the next 24-hour check cycle or on restart. Full functionality restores immediately after a successful check.
To diagnose:
# Check grace period status
curl http://localhost:8000/health/license
# {"plan":"pro","expires":"2027-01-01","days_remaining":300,"demo_mode":false,"grace_period_active":true,"grace_hours_remaining":48}
# Test connectivity to license server
curl -I https://api.meshoptixiq.com/health
# Force an immediate re-check
meshq license info --refresh
BGP Data Missing
BGP routing queries return empty results
Cause: BGP data requires SSH collection with parser support for the device vendor, and a Pro+ license with the bgp_intelligence feature flag.
Solutions:
Verify license:
meshq license info
# Should show: bgp_intelligence: true
Check vendor support: BGP collection is supported for Cisco IOS/IOS-XE, Arista EOS, and JunOS. Other vendors may not parse BGP state tables.
Re-run collection: BGP peer state is collected via show bgp summary (Cisco/Arista) or show bgp neighbor (JunOS). Run meshq collect and check for parse errors in the logs.