OpenStack Production Troubleshooting
Trace a request from the load balancer to compute, storage, and networking — and diagnose the failures that page you at 3am. Built on this site’s deepest OpenStack coverage.
- Who it’s for
- Operators and SREs running or supporting a production OpenStack cloud.
- Prerequisites
- Comfort on the Linux command line and basic familiarity with the OpenStack service names (Nova, Neutron, Keystone, Cinder).
Skills you’ll build
- ✓Map an API request through HAProxy, the service API, RabbitMQ, and the database
- ✓Localize a 504 to the layer that actually timed out
- ✓Diagnose Keystone auth, RabbitMQ/RPC, Nova scheduling, Neutron, and Cinder failures
- ✓Run a simulated incident end-to-end in the workspace
-
Module 1
Understand the OpenStack request path
Build the mental model everything else depends on: how a client call flows through HAProxy → service API → RabbitMQ → conductor/agent → database, and where each hop can fail.
-
Module 2
Troubleshoot HAProxy and API 504 errors
Determine whether a 504 originates at the proxy, the API worker pool, or a downstream dependency — the single most common OpenStack page.
Diagnostic commands run in order — each one narrows the fault
- Reproduce the timeout and time it
time openstack --debug server list 2>&1 | tail -30A response at almost exactly the proxy timeout (commonly 60s) confirms the proxy gave up, not the client.
- Check HAProxy backend health
echo "show stat" | sudo socat stdio /var/run/haproxy/admin.sock | cut -d, -f1,2,18,19Any backend not in status UP is the layer that failed. This is the single fastest way to localize a 504.
- Check which service container is unhealthy
sudo docker ps --filter "health=unhealthy" --format "{{.Names}}\\t{{.Status}}"On a Kolla-Ansible deployment the container health check usually fails before the API does.
- Read the service API log for slow requests
sudo tail -200 /var/log/kolla/keystone/keystone-apache-admin-access.log | awk '$NF > 5000000'Apache logs request duration in microseconds. Requests over ~5s are the ones dragging the proxy toward its timeout.
Exercise
A Nova API request returns HTTP 504. Decide whether the timeout originates from HAProxy, the Nova API workers, RabbitMQ, or the database — and capture the evidence for each.
Open in Workspace → -
-
Module 3
Troubleshoot Keystone authentication
Diagnose token, Fernet-key, and scope failures that make every other service look broken.
-
Module 4
Troubleshoot RabbitMQ / RPC timeouts
Find the queue buildup, missed heartbeats, or partition behind "Timed out waiting for a reply".
Diagnostic commands run in order — each one narrows the fault
- Check cluster and partition status
sudo docker exec rabbitmq rabbitmqctl cluster_statusA non-empty `partitions` section means a network partition — RPC will time out until it is resolved.
- Find queues with backed-up messages
sudo docker exec rabbitmq rabbitmqctl list_queues name messages consumers --no-table-headers | awk '$2 > 100'A queue with messages and ZERO consumers is a service that has stopped consuming — that is your failing component.
- Check for blocked connections
sudo docker exec rabbitmq rabbitmqctl list_connections name state | grep -v running"blocked" or "blocking" means RabbitMQ hit a memory or disk alarm and is applying backpressure to publishers.
- Check the resource alarms
sudo docker exec rabbitmq rabbitmqctl status | grep -A5 alarmsAny raised alarm stalls the whole message bus and surfaces as timeouts in every OpenStack service at once.
-
-
Module 5
Troubleshoot Nova compute failures
Work "No valid host was found", spawn failures, and resource-tracker errors from scheduler to hypervisor.
Diagnostic commands run in order — each one narrows the fault
- Check compute service state
openstack compute service list --longA service that is `enabled` but `down` has stopped reporting to the conductor — check its host clock and the message bus first.
- Read the scheduler failure reason
sudo tail -200 /var/log/kolla/nova/nova-scheduler.log | grep -iE "no valid host|filter" | tail -20"No valid host was found" is always followed by which filter rejected every candidate — that filter names the real constraint.
- Check hypervisor capacity
openstack hypervisor stats showCompare free vcpus/ram/disk against the flavor being requested; also check the allocation ratios before assuming exhaustion.
-
-
Module 6
Troubleshoot Neutron agents and networking
Diagnose port-binding failures, dead OVS/DHCP agents, and the connectivity issues they cause.
Diagnostic commands run in order — each one narrows the fault
- Check agent state
openstack network agent list --longAn agent with `alive = XXX` has missed its heartbeats. Check its host before touching any router.
- Inspect the router namespace
sudo ip netns list | grep qrouter && sudo ip netns exec qrouter-<ID> ip -brief addressA router namespace with no addresses (or missing entirely) explains total loss of external connectivity for that tenant.
- Read the L3 agent log
sudo tail -200 /var/log/kolla/neutron/neutron-l3-agent.log | grep -iE "error|traceback" | tail -20Look for the first traceback after the last successful sync — the ones after it are usually cascade failures.
-
-
Module 7
Troubleshoot Cinder scheduling and storage
Resolve "no weighed backends", stuck volumes, and backend driver failures.
Diagnostic commands run in order — each one narrows the fault
- Check volume service state
openstack volume service listA `cinder-volume` backend that is down means every create on that backend will sit in "creating" until it times out.
- Read the scheduler decision
sudo tail -200 /var/log/kolla/cinder/cinder-scheduler.log | grep -iE "no valid|filter|capab" | tail -20Names the backend filter that rejected the request — usually capacity, or a backend that never reported capabilities.
- Check a stuck volume
openstack volume show <VOLUME_ID> -f value -c status -c "os-vol-host-attr:host"The host attribute tells you which backend owns it; a volume stuck in "creating" with no host never got scheduled at all.
-
-
Module 8
Complete a simulated OpenStack incident
Put it together: run a full triage in the workspace, record diagnostics and root cause, and export the incident summary.
Exercise
Instances are failing to launch and the dashboard is slow. Triage across scheduler, messaging, and networking. Record each check and its result, land on a root cause, and export the summary.
Open in Workspace →
Mission complete 🎉
You’ve worked every module of OpenStack Production Troubleshooting.
Next: Kubernetes Production Troubleshooting →Related