Consul makes service discovery look simple — a leader, some agents, a catalog — right up until the moment its three independent subsystems disagree about what "healthy" means.
The defaults work. Until the data_dir volume's write latency creeps up, Raft heartbeats slip, followers time out and call elections, and the cluster thrashes — the single most common Consul incident in the industry. Until a client agent's RPC pipe to the servers breaks while its gossip stays perfectly healthy, so anti-entropy stops syncing and the catalog silently drifts while every dashboard shows green. Until a Connect leaf certificate expires and mTLS handshakes fail across the mesh with no early warning at all. Until a botched keyring rotation leaves half the pool on a key the other half cannot decrypt and the gossip pool splits in two. Until the default 1024 file-descriptor limit is hit and the server refuses RPC, xDS, and DNS in the same instant.
These guides are written for engineers who already run Consul, not for people learning what service discovery is. The goal is the mental model of how the three subsystems actually behave and interact under load, the failure patterns that keep recurring, the monitoring story that catches them before they page anyone, and the runbooks you wish someone had handed you before your last incident. The recurring trap: "is there a leader?" and "is the node alive in gossip?" both answer yes while the cluster is write-dead or the catalog is stale.