Consul runs three subsystems concurrently: Raft consensus, Serf gossip, and a catalog state machine backed by BoltDB. Each fails independently. A monitoring setup that checks only “is there a leader” and “are all members alive” will miss the most common production incidents: slow disk causing leader churn, client agents losing RPC connectivity while gossip stays green, blocking query leaks, and Connect certificate rotation failures.

This checklist organizes signals into four maturity levels. Each builds on the previous one and maps to specific failure patterns: leader thrashing, split brain after partition, gossip storms during mass recovery, silent catalog staleness, and KV store saturation. Use it as an audit tool. Identify which level your current monitoring reaches, then close gaps at that level before chasing the next tier.

Do not skip levels. Expert signals like Raft log index comparison and certificate renewal success rate add no value if your survival checks do not page on a missing leader or a failed server node.

flowchart TD
    L4["Level 4 - Expert
Asymmetric partition detection, GC pause tails,
certificate renewal success, blocking query leaks"] L3["Level 3 - Mature
GC pauses, gossip queues, catalog churn,
certificate expiry, xDS stream health"] L2["Level 2 - Operational
Raft commit time, last contact, elections,
DNS latency, RPC failures, FD usage"] L1["Level 1 - Survival
Leader exists, servers alive, process up,
API responsive, disk space"] L1 --> L2 --> L3 --> L4

Level 1: survival

If any of these fail, the cluster is down or about to be. Page on all of them.

SignalHow to checkWhy it matters
Leader existsGET /v1/status/leader returns a non-empty addressNo leader means all writes fail. Service registrations, KV writes, health updates, and ACL token creation all block.
All servers alive in gossipGET /v1/agent/members, filter to servers, all Status=1A failed server brings you one step from quorum loss.
Raft peer count matches cluster sizeGET /v1/operator/raft/configuration or consul operator raft list-peersFewer voters than expected means reduced redundancy. Below quorum means the cluster cannot survive another failure.
Agent process runningOS-level process check on every nodeDead agent means no health checks, no anti-entropy sync, stale DNS.
HTTP API responsive200 from /v1/status/leader within timeoutDistinguishes “process running but hung” from “process running and serving.”
Disk space on server data directoryFilesystem check on data_dirRaft cannot write logs or snapshots if disk is full.

Alerting guidance. Page on no leader for more than 15 seconds outside maintenance windows. Page on any server in failed state. Page on voter count below quorum (fewer than 2 for a 3-server cluster, fewer than 3 for a 5-server cluster). Brief leaderless periods during rolling restarts are expected.

Level 2: operational

These signals tell you whether Consul is performing well, not just whether it is alive. Most teams stop here, which is adequate for small clusters but leaves blind spots as scale grows.

SignalMetric or checkWarning sign
Raft commit timeconsul.raft.commitTime (leader only)Sustained above 100ms. Approaching heartbeat timeout risks elections.
Raft last contactconsul.raft.leader.lastContact (leader only; measures quorum reachability)Sustained above 200ms. Above 80% of election timeout is imminent election risk.
Leader election countconsul.raft.state.leader and consul.raft.state.candidate (gauges; track transitions)More than 2 transitions in 10 minutes outside maintenance. Near-zero is steady state.
DNS query latencyconsul.dns.domain_query.* timersp99 above 500ms or failure rate above 1%. DNS is the primary discovery interface for many applications.
Health check distributionGET /v1/health/state/critical countSudden spike of more than 10% of total checks. Mass criticals indicate a shared downstream dependency failure.
Client RPC failure rateconsul.client.rpc.failed (counter)Any sustained non-zero rate. Client agents cannot push health state to the catalog when RPC fails.
Server memory RSSOS-level VmRSS from /proc/<pid>/statusSustained growth without corresponding catalog growth indicates a leak.
File descriptor usagels /proc/<pid>/fd | wc -l vs ulimitAbove 70% of soft limit. Default OS ulimit of 1024 is catastrophically low for Consul.
Disk write latency on Raft volumeiostat -x 1 on server nodes, check w_awaitSustained above 10ms. This is the single most common root cause of leader instability.

Alerting guidance. Page on commit time sustained above 500ms. Page on RPC failure rate above 1% on any client agent. Page on disk write latency sustained above 10ms on the Raft volume. Ticket on election count above 1 per hour outside maintenance.

Why disk latency is critical. The Raft log is persisted to disk with fsync on every write. When disk write latency approaches the heartbeat timeout, the leader cannot send heartbeats fast enough, followers start elections, and the cluster enters a thrashing cycle. This is the most common Consul incident pattern. Rotational disks, NFS, and EBS gp2 with exhausted burst credits are the usual culprits. SSD is not optional for server data directories.

Level 3: mature

Full coverage for a professional SRE team. These signals tell you what is trending toward a problem and where the bottlenecks are.

SignalMetricWhy it matters
Goroutine countconsul.runtime.num_goroutinesMonotonic growth indicates a leak. Each blocking query holds a goroutine. Leaked watches and abandoned gRPC streams accumulate.
Gossip queue depthconsul.serf.queue.Event, .Intent, .QueryNon-zero sustained values mean the agent cannot process gossip fast enough. Leads to false failure detection and cascading member-flap events.
Catalog registration rateconsul.catalog.register, consul.catalog.deregisterChurn above 5x baseline. Each registration is a Raft write. Flapping health checks and deployment loops drive this.
KV operation latencyconsul.kvs.apply (leader only)KV writes track Raft commit time. If KV latency is high but commit time is normal, the issue is KV-specific (large values, slow prefix scans).
HTTP API latency per endpointconsul.http.* timersGranular performance tracking. Catalog endpoints scale with catalog size. Filter out blocking queries when analyzing latency.
Cache hit ratioconsul.cache.* hit and miss countersBelow 80% for established caches. Low hit ratio causes unnecessary Raft queries and state store access.
ACL resolution latencyconsul.acl.resolveTokenAbove 10ms impacts every authenticated API request. Cache miss storms during policy updates cause spikes.
Certificate expirationGET /v1/connect/ca/roots, Envoy /certsRoot CA expiring within 30 days. Leaf certs not rotating. Cliff-edge failure when certs expire.
xDS stream countconsul.xds.server.streamsStream count should match proxy count. High reconnect rate indicates control plane instability.
Serf WAN members per DCGET /v1/agent/members?wan=trueAn entire DC missing from the WAN pool means cross-DC queries and prepared query failover are broken.
Raft snapshot sizeFilesystem check on snapshot filesGrowing snapshot size indicates catalog or KV growth. Larger snapshots mean longer restore times and more memory during creation.
Go GC pause durationconsul.runtime.gc_pause_ns, consul.runtime.total_gc_pause_nsPauses above 50ms affect Raft timing. Multi-GB heaps with high allocation rates can cause stop-the-world pauses that trigger elections.
Anti-entropy sync successconsul.anti_entropy metricsSync failures on client agents cause silent catalog staleness. Services appear registered but are invisible cluster-wide.
Session invalidation rateconsul.session.applySpike indicates distributed locks releasing. Node failures and gossip flaps cause cascading invalidations.

Alerting guidance. Ticket on goroutine count above 2x baseline with monotonic growth. Ticket on gossip queue depth sustained above 0 for more than 1 minute. Ticket on certificate expiry within 30 days for root CA, 7 days for intermediate. Page on xDS stream drain rate spiking, since that means Envoy proxies are losing configuration updates.

Level 4: expert

Signals that experienced operators add after their third or fourth major incident. These give you 30 minutes of warning before the next one.

SignalHow to collectWhat it catches
Raft log index comparison across serversconsul.raft.lastLog.index from each serverDivergence indicates a follower is falling behind or has inconsistent state. A corrupt follower that wins an election serves bad data.
Anti-entropy sync timing per agentAgent logs and sync latency distributionDetects stragglers: agents that are alive in gossip but cannot sync within the expected interval.
RPC connection count per serverOS-level connection trackingUneven distribution means one server is under disproportionate load. Relevant when debugging “one slow server.”
Blocking query count and distributionInferred from goroutine count, cache miss patterns, and HTTP long-poll durationIdentifies watch accumulation before it becomes a goroutine or FD leak.
Prepared query failover event rateApplication logs, DNS response analysisDetects when consumers are silently served from remote DCs. Receiving results does not mean local health.
Certificate renewal success rateconsul.connect.ca metrics , Envoy CSR logsExpiry time without renewal tracking is a countdown clock with no early warning. Track whether the renewal pipeline works, not just when certs expire.
Catalog size by serviceGET /v1/catalog/service/<name> across all servicesIdentifies which services contribute most to catalog bloat and snapshot size growth.
Raft compaction timingconsul.raft.snapshot.* metricsLog compaction must keep up with write volume. If snapshot creation fails, the log grows indefinitely.
Pairwise server network latencyCross-reference consul.serf member status from each serverAsymmetric partitions are common. Server A reaching B but not C creates subtle routing failures.
Intention evaluation cache hit rateconsul.connect.authorize metricsMiss rate during policy changes causes latency spikes invisible to general RPC metrics.

Alerting guidance. Most Level 4 signals are investigative rather than threshold-based. Use them during incident triage and for weekly trend review. The exception is certificate renewal success rate: page on any sustained renewal failure, because the countdown to expiry has started.

Common blind spots

These are gaps most teams discover during incidents, not during planning.

Disk I/O latency. The most common Consul incident pattern. Teams provision servers with adequate CPU and memory, then put the Raft data directory on general-purpose storage. Everything works until write volume increases or burst credits deplete. The first visible symptom is leader elections, by which point the cluster is already degraded. Monitor disk write latency (w_await from iostat), not just throughput or utilization. This should be a page-level alert.

Client-to-server RPC health. Server-side monitoring gets all the attention. But client agents can be alive, running health checks, and participating in gossip while being unable to push state to the server catalog. The catalog silently goes stale. Monitor consul.client.rpc.failed on every client agent, not just servers.

Gossip and Raft divergence. Gossip is the most visible protocol because it powers consul members. Teams assume “all members alive” means the cluster is healthy. Gossip and Raft are independent subsystems. A server can be alive in gossip while having corrupt Raft state. Cross-reference consul operator raft list-peers against consul members regularly.

Blocking query leaks. Every consul-template instance, every watch, and every application using blocking queries holds a goroutine and a connection on the server. When clients crash without cleanly ending queries, these accumulate. Goroutine count creeps up week over week. It becomes a problem only when servers exhaust goroutines or file descriptors. Track goroutine count trends and correlate with expected blocking query load.

Connect certificate lifecycle. Teams enable Connect, verify it works during setup, and never monitor the certificate pipeline again. When the Vault backend has a brief outage, nobody notices until certificates start expiring. Monitor both certificate expiration time and renewal success rate as separate signals.

Catalog size growth. The catalog grows slowly: a few new services per week, a few more checks per deployment. Over months, the catalog can grow 10x. Snapshot sizes grow proportionally. Server memory grows. Raft commit times creep up. Track total service instances, total checks, and snapshot size as trend signals with weekly review.

Cross-DC federation. Multi-datacenter Consul is configured once, verified once, and then assumed to work. WAN gossip encryption keys are rotated independently. Network changes between DCs break WAN gossip silently. Prepared query failover stops working without anyone noticing because the primary DC is still serving traffic.

How Netdata helps

Netdata collects Consul signals at per-second resolution, which catches transients invisible to 10-second or 1-minute aggregation windows.

  • Raft pipeline correlation. Per-second consul.raft.commitTime, consul.raft.leader.lastContact, and consul.raft.state.leader on the same timeline let you see disk latency translating into commit time spikes translating into elections, before the cluster thrashes.
  • OS-level signals alongside Consul metrics. Disk write latency on the Raft volume, file descriptor usage, memory RSS, and goroutine count are collected at the host level and displayed next to Consul telemetry. The connection between slow disk and leader churn becomes visible without switching tools.
  • Client agent coverage. consul.client.rpc.failed is collected from every agent, not just servers. Silent catalog staleness from client-to-server RPC failures shows up before consumers notice stale DNS responses.
  • ML-based anomaly detection. Goroutine count, gossip queue depth, and catalog registration rate benefit from trend-based anomaly detection. Gradual leaks that stay within static thresholds but deviate from the learned baseline are flagged without manual threshold tuning.
  • Health check distribution. Passing, warning, and critical check counts are tracked over time, making mass-failure events and recovery visible as a coordinated shift rather than individual check alerts.
  • DNS latency. Per-second DNS query latency distribution separates agent-side issues from server-side issues, helping you determine whether the bottleneck is catalog scans, RPC backing up, or agent-level parsing.