ZooKeeper is a coordination service, not a database, and its failure modes are subtle. An ensemble can be “up” on every health check while request latency climbs past 100ms, outstanding requests queue up, and fsync stalls ripple into every system that depends on it: Kafka, Solr, Hadoop, HBase. The tools that catch these problems early are the ones that read ZooKeeper’s actual health interfaces, not the ones that treat it as a generic JVM process.
The most common buying mistake in this category is assuming JMX is enough. JMX gives you heap and GC, but the metrics that diagnose ensemble trouble live in the mntr 4-letter-word command, the ZooKeeper 3.6+ Prometheus MetricsProvider, and the AdminServer HTTP API. Before shortlisting anything, check which interface the tool actually parses.
Three dimensions decide the outcome for most teams:
- Metric depth and interface. Does the tool cover latency min/avg/max, outstanding requests, znode and ephemeral counts, watches, connections, server state, fsync time, and quorum or leader metrics, and does it get them from mntr, the 3.6+ metrics system, or the AdminServer rather than JMX alone?
- Collection resolution. ZooKeeper latency and queue spikes can appear and clear in seconds. Per-second collection catches them; 10 to 30 second scrape intervals often do not. Apache’s own reference Prometheus config scrapes every 10 seconds, and New Relic’s example config collects every 30.
- Cost shape. ZooKeeper’s znode count, watch count, and request volume grow with your cluster. Per-node pricing stays flat as those grow; per-GB-ingested and per-custom-metric pricing does not.
One note on pricing: we do not quote list prices for any vendor except Netdata. List prices for observability tools change frequently and rarely survive contact with a real fleet, so we describe each tool’s pricing shape and link the official pricing page instead. For operator-level guidance on the metrics themselves, see our ZooKeeper monitoring guides, which cover thresholds and ensemble runbooks in detail.