NagMon logo NagMon
  1. Home
  2. Guides
  3. Nagios States Explained
Nagios Guides · Fundamentals

Nagios Host & Service States Explained

Seven states, two state types, and a handful of modifiers explain everything a Nagios dashboard will ever show you. Fifteen minutes here saves hours of misread alerts.

Updated July 2026 · Applies to Nagios Core 3.x/4.x

On this page
  1. Where states come from: plugin exit codes
  2. Service states
  3. Host states
  4. Soft vs. hard states
  5. Acknowledgements, downtime, and flapping
  6. Reading a dashboard: a triage order
  7. FAQ

Where states come from: plugin exit codes

Every state in Nagios starts life as a humble process exit code. A check plugin runs, prints one line of output, and exits with:

Exit codeService stateMeaning
0OKEverything within thresholds.
1WARNINGAbove the warning threshold, below critical.
2CRITICALAbove the critical threshold, or the check itself failed hard (timeout, refused connection).
3UNKNOWNThe plugin couldn't determine a state at all.

That's the entire contract. The plugin's output line — DISK CRITICAL - free space: / 512 MB (2%) — travels with the state, which is why a good client always shows it: the state says that something's wrong, the output says what.

Service states

Host states

The DOWN/UNREACHABLE distinction is Nagios's network topology awareness, and it's what makes a good outage display possible: one dead switch shows as one DOWN host plus a cluster of UNREACHABLE dependents — one problem, not twenty. This is exactly what the outages view in NagMon surfaces: fix the blocking host and the rest clears itself.

Soft vs. hard states

Nagios doesn't believe the first bad check result. When a state changes, the object enters a SOFT state and Nagios re-checks at retry_interval until max_check_attempts results agree — only then does the object enter a HARD state.

With max_check_attempts 3 and retry_interval 1, a timeline:

10:00:00  check fails      → SOFT CRITICAL (attempt 1/3) — no notification
10:01:00  check fails      → SOFT CRITICAL (attempt 2/3) — no notification
10:02:00  check fails      → HARD CRITICAL (attempt 3/3) — notification sent
10:07:00  check succeeds   → HARD OK — recovery notification

Two consequences worth internalizing:

Acknowledgements, downtime, and flapping

Reading a dashboard: a triage order

  1. Blocking outages / UNREACHABLE clusters — one fix here clears the most red.
  2. DOWN hosts — everything on them is implicitly broken; their service alerts are noise until the host is back.
  3. CRITICAL services on healthy hosts — real, individual problems.
  4. WARNING and UNKNOWN — schedule them; fix UNKNOWNs before they train you to ignore states.

Skip anything already acknowledged or in downtime — that work is claimed. (This ordering is why NagMon's Dashboard puts current problems in priority order and lets you sort by severity or state duration.)

FAQ

DOWN vs. UNREACHABLE — which do I fix?

Fix DOWN. UNREACHABLE hosts are usually casualties of a down parent and recover on their own once the path is restored.

UNKNOWN vs. CRITICAL — how different are they really?

Completely. CRITICAL: the check worked and the news is bad. UNKNOWN: the check itself failed, so you have no news at all — a monitoring problem to fix, not a service outage to escalate.

Why did I see red in the UI before any email arrived?

The UI (and the JSON API) shows soft states immediately; email waits for the hard state. That head start is one of the best reasons to keep live status in your pocket.

NagMon app icon

All of these states, at a glance

NagMon puts state counts, priority-ordered problems, and full plugin output on your iPhone — with filters for every state on this page.

Download NagMon