Skip to content
DevOps AI ToolKit

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.

0 of 8 modules complete

0%

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
8 modules · self-paced
  1. 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.

  2. 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

    1. Reproduce the timeout and time it
      time openstack --debug server list 2>&1 | tail -30

      A response at almost exactly the proxy timeout (commonly 60s) confirms the proxy gave up, not the client.

    2. Check HAProxy backend health
      echo "show stat" | sudo socat stdio /var/run/haproxy/admin.sock | cut -d, -f1,2,18,19

      Any backend not in status UP is the layer that failed. This is the single fastest way to localize a 504.

    3. 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.

    4. 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 →
  3. Module 3

    Troubleshoot Keystone authentication

    Diagnose token, Fernet-key, and scope failures that make every other service look broken.

  4. 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

    1. Check cluster and partition status
      sudo docker exec rabbitmq rabbitmqctl cluster_status

      A non-empty `partitions` section means a network partition — RPC will time out until it is resolved.

    2. 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.

    3. 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.

    4. Check the resource alarms
      sudo docker exec rabbitmq rabbitmqctl status | grep -A5 alarms

      Any raised alarm stalls the whole message bus and surfaces as timeouts in every OpenStack service at once.

  5. 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

    1. Check compute service state
      openstack compute service list --long

      A service that is `enabled` but `down` has stopped reporting to the conductor — check its host clock and the message bus first.

    2. 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.

    3. Check hypervisor capacity
      openstack hypervisor stats show

      Compare free vcpus/ram/disk against the flavor being requested; also check the allocation ratios before assuming exhaustion.

  6. 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

    1. Check agent state
      openstack network agent list --long

      An agent with `alive = XXX` has missed its heartbeats. Check its host before touching any router.

    2. Inspect the router namespace
      sudo ip netns list | grep qrouter && sudo ip netns exec qrouter-<ID> ip -brief address

      A router namespace with no addresses (or missing entirely) explains total loss of external connectivity for that tenant.

    3. Read the L3 agent log
      sudo tail -200 /var/log/kolla/neutron/neutron-l3-agent.log | grep -iE "error|traceback" | tail -20

      Look for the first traceback after the last successful sync — the ones after it are usually cascade failures.

  7. 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

    1. Check volume service state
      openstack volume service list

      A `cinder-volume` backend that is down means every create on that backend will sit in "creating" until it times out.

    2. Read the scheduler decision
      sudo tail -200 /var/log/kolla/cinder/cinder-scheduler.log | grep -iE "no valid|filter|capab" | tail -20

      Names the backend filter that rejected the request — usually capacity, or a backend that never reported capabilities.

    3. 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.

  8. 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 →

Related