checkfleet

Cassandra / ScyllaDB check

cassandra — Cassandra / ScyllaDB

Nodes accept CQL via the native-protocol handshake, handshake latency, and cluster size against the expected node count.

checkfleet check cassandra --config checkfleet.yml

Reachability check that speaks the CQL native protocol handshake directly — no driver, no authentication:

  • Connects and performs OPTIONSSUPPORTED (negotiating the CQL version), then STARTUP. A READY or AUTHENTICATE reply means the node accepts CQL connections → OK (with (auth required) noted when authentication is on).
  • WARN when the handshake is slower than max_latency_ms. Handshake latency is also the node’s numeric metric (ms).
  • BAD on a protocol ERROR reply, ERROR if the node is unreachable.
  • Cluster state — a cluster finding rolls the nodes up: how many accept CQL out of those configured, as a metric (nodes). BAD below expect_nodes (0 = expect them all), WARN when the expectation is met but a configured node is still down. A slow node (WARN) still counts as up — it completed the handshake. Skipped for a single target with no expect_nodes, where it would only repeat the node’s own finding.

    This is derived from checkfleet’s own probes, not from system.peers: reading the cluster’s view of its membership needs a QUERY on an authenticated session, and this module speaks the handshake only. The trade-off is deliberate — it says nothing about nodes absent from your config, but it keeps working on clusters with authentication enabled, with no driver and no credentials. Same shape as etcd’s expect_members.

Targets are host[:port] (default CQL port 9042). Zero-dep; tested against an in-test fake CQL server.

  cassandra:
    expect_nodes: 3   # 0 = all configured nodes must accept CQL
    targets:
      - {name: cass-01, address: cass-01:9042, max_latency_ms: 500}

Ansible inventory as a target source

The certs, nats, haproxy, patroni, consul, redis and tls modules can read a standard Ansible INI inventory (a file or a directory of files):

  • host lines and their ansible_host= value are used;
  • :vars and :children sections are ignored;
  • hosts are de-duplicated.

Every discovered host becomes a target on the module’s port (443 for certs, 8222 for nats, 8404 for haproxy, 8008 for patroni, 8500 for consul, 6379 for redis, 443 for tls).


See the full module reference for every check, or configuration for the config keys.