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 · By the NexusWorks team, makers of NagMon

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 reachability logic at work, 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 (the official state types documentation covers this in depth). 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