Lesson 2 · OpenStack Production Engineer
Service State and Liveness — Reading What the Cloud Is Telling You
Status versus state, how liveness is actually determined, and why a service that is enabled and down is the most dangerous row in any OpenStack listing.
Objectives
- Distinguish administrative status from actual service state in every listing
- Explain how liveness is derived and what breaks it
- Read Neutron agent listings, whose columns mean the opposite of Nova's
- Build a daily health check that surfaces only genuine problems
Two columns, two different questions
Every OpenStack service listing reports two things that look like one:
- Status — what an operator wants.
enabledordisabled. Someone set this deliberately. - State — what is actually happening.
upordown. Derived, not set.
Four combinations, four different meanings:
| Status | State | Meaning | Action |
|---|---|---|---|
| enabled | up | Working and in service | None |
| enabled | down | The cloud thinks it is available. It is not. | Investigate now |
| disabled | down | Taken out deliberately and stopped | Confirm it is on someone’s list |
| disabled | up | Running but excluded from scheduling | Usually a forgotten maintenance leftover |
Why enabled-and-down is the dangerous one
The scheduler treats an enabled service as part of the cloud. It counts toward capacity arithmetic and it is a scheduling candidate.
When that service is not actually answering, the results are indirect and confusing:
- Capacity reporting overstates what you have
- Scheduling attempts route work to a host that will not respond
- Failures appear as timeouts and
NoValidHostrather than as “that host is down”
Nothing in the error message points at the host. You get a symptom three layers away from the cause.
The disabled-and-down case is the opposite: the cloud already knows not to use it, so nothing misbehaves. Same process state, completely different operational meaning.
How liveness is actually determined
State is not a health check. Nothing probes the service.
Each service periodically publishes a report over the message bus. The control plane records the
timestamp of the last one. If the most recent report is older than a threshold, the service is
marked down.
Which means down can be caused by:
- The process is dead. The obvious case.
- The process is alive but not reaching the message bus. Network, credentials, or a broker problem.
- The message bus is not delivering. A partition, or a queue with no consumer.
- Clock skew. The report arrives, but its timestamp is far enough off that it is treated as stale.
This is why docker ps showing the container up does not contradict State: down. They are
measuring different things — one is process existence, the other is successful communication.
Neutron is inverted
Neutron reports the same information with different column names, in the opposite arrangement.
Aliveis liveness::-)means reporting,XXXmeans not.Stateis administrative:UPorDOWN.
So in Neutron, State means what Status means in Nova. Reading the State column the way you
read it in a compute listing gives you exactly the wrong answer.
compute-02 above is the dangerous row: administratively UP, not alive. Instances scheduled to
that host will build and have no network.
Correlation across services
A single service down on a host is a service problem. Several services down on the same host is a host problem, and investigating them individually wastes time.
Three unrelated services on one host all stopped reporting. They do not share code, they share the host, its network path, and its connection to the message bus.
Investigate the host. Do not investigate Nova.
The same logic applies to zones: if every failing service sits in one availability zone, look for what that zone shares — a rack, a switch, a power feed.
Building a health check that is worth running
The useful health check reports only things that need attention. A check that lists every service is a report nobody reads.
#!/usr/bin/env bash
# Report only services that need a human.
set -euo pipefail
echo "=== Enabled but down ==="
openstack compute service list -f value -c Binary -c Host -c Status -c State \
| awk '$3 == "enabled" && $4 == "down" { print " compute: " $1 " on " $2 }'
openstack volume service list -f value -c Binary -c Host -c Status -c State \
| awk '$3 == "enabled" && $4 == "down" { print " volume: " $1 " on " $2 }'
openstack network agent list -f value -c 'Agent Type' -c Host -c Alive -c State \
| awk '$NF == "UP" && $(NF-1) != ":-)" { print " network: " $0 }'
echo "=== Running but disabled (lost capacity) ==="
openstack compute service list -f value -c Binary -c Host -c Status -c State \
| awk '$3 == "disabled" && $4 == "up" { print " " $1 " on " $2 }'
echo "=== Instances in error ==="
openstack server list --all-projects --status ERROR -f value -c ID -c Name | sed 's/^/ /'
No output means healthy. That is the property that makes a check worth running daily — you notice output because output is unusual.
Exercise
Extend the script above so it also reports any host with more than one failing service, since that indicates a host-level problem rather than a service one.
You will need to collect failures from all three listings into a single list of hosts, then count occurrences.
Then run it against a cloud you have access to and confirm it produces no output when everything is healthy. A check that always prints something will be ignored within a week.
Validation
You understand this lesson if you can answer, without looking back:
- A service shows
enabled/down. Name three causes other than the process being dead. - A Neutron agent shows
Alive: XXXandState: UP. Is it working? Is it supposed to be? docker psshowsnova_computerunning, and the service list shows it down. Do these contradict each other?- Four services across two hosts are down. What do you investigate first?
Verification status
This resource has not been executed end to end in a lab environment. Commands and configuration are reviewed by an engineer, but treat them as reference rather than as a tested procedure.
Author
James Joyner
Builds and operates the infrastructure layers underneath production AI systems.
James founded Inside The AI Stack to publish the kind of infrastructure and operations material he wanted while running production systems: specific, tested where it claims to be tested, and written by someone who has had to fix the thing at 3am. He works across AI infrastructure, private cloud, and platform engineering, and reviews every technical resource published here before it is marked as verified.
- AI infrastructure
- OpenStack operations
- Kubernetes
- Terraform
- Linux systems engineering
- Observability
Continue from here
Related resources chosen because they are the next thing you would actually need — not because they share a keyword.
OpenStack Production Operations
Operating OpenStack in production: service state versus status, the message bus, placement disagreements, and the quiet failures that keep dashboards green.
OpenStack Production Engineer
A sequenced learning path for engineers who operate OpenStack in production — architecture, service-by-service depth, deployment, and troubleshooting under pressure.
Tool
OpenStack Health Analyzer
Turn service and agent listings into a ranked view of what is actually broken.
Available now
Newsletter
Inside The AI Stack Brief
A practical weekly briefing on AI engineering, infrastructure, production operations, and the technologies powering the AI stack.
One email a week. No sponsorship placements inside the technical sections. Unsubscribe in one click.