Skip to content

AxonOps — AI-Native Control Plane for Open Source Data Platforms

Cassandra Key Metrics Reference

This guide covers the essential metrics to monitor for a healthy Cassandra cluster.

SignalCassandra MetricsSignificance
LatencyRead/Write p99User experience
TrafficRequests/secondCapacity planning
ErrorsTimeouts, UnavailablesService reliability
SaturationCPU, Disk, MemoryResource headroom
CategoryDescription
Client Request MetricsRead/Write latency, throughput, errors
Thread Pool MetricsActive, Pending, Blocked, Completed
Storage MetricsSSTable count, Disk usage, Compaction
JVM MetricsHeap usage, GC pauses, Off-heap
System MetricsCPU, Memory, Disk I/O, Network

JMX Path:

org.apache.cassandra.metrics:type=ClientRequest,scope=Read,name=Latency
org.apache.cassandra.metrics:type=ClientRequest,scope=Write,name=Latency

nodetool:

Terminal window
nodetool proxyhistograms

Thresholds:

PercentileReadWrite
p50< 5ms< 2ms
p99< 50ms< 20ms
p999< 200ms< 100ms

Recommended Alerts:

AlertConditionDurationSeverity
High Read Latencyp99 > 100ms5 minWarning
Critical Read Latencyp99 > 500ms5 minCritical
High Write Latencyp99 > 50ms5 minWarning
Critical Write Latencyp99 > 200ms5 minCritical

JMX Path:

org.apache.cassandra.metrics:type=ClientRequest,scope=Read,name=Latency/Count
org.apache.cassandra.metrics:type=ClientRequest,scope=Write,name=Latency/Count

What to look for:

  • Sudden drops (node issues, network problems)
  • Unexpected spikes (traffic surge, retry storms)
  • Uneven distribution across nodes (hot spots)

JMX Path:

org.apache.cassandra.metrics:type=DroppedMessage,scope=READ,name=Dropped
org.apache.cassandra.metrics:type=DroppedMessage,scope=MUTATION,name=Dropped
org.apache.cassandra.metrics:type=DroppedMessage,scope=RANGE_SLICE,name=Dropped

nodetool:

Terminal window
nodetool tpstats | grep -E "Message|Dropped"

Thresholds:

MetricWarningCritical
Any dropped> 0> 100/min

What drops mean:

  • Messages exceeded timeout while queued
  • System overloaded or GC paused too long
  • Need capacity increase or query optimization

JMX Path:

org.apache.cassandra.metrics:type=ThreadPools,path=request,scope=*,name=PendingTasks

nodetool:

Terminal window
nodetool tpstats

Key thread pools:

PoolWarningCritical
MutationStage> 15> 50
ReadStage> 15> 50
CompactionExecutor> 32> 64
MemtableFlushWriter> 4> 8

JMX Path:

org.apache.cassandra.metrics:type=Table,name=LiveSSTableCount

nodetool:

Terminal window
nodetool tablestats my_keyspace.my_table | grep "SSTable count"

Thresholds:

LevelCountAction
Normal< 20None
Warning20-50Check compaction
Critical> 50Investigate

High SSTable count indicates:

  • Compaction falling behind
  • Write-heavy workload
  • Inappropriate compaction strategy

JMX Path:

org.apache.cassandra.metrics:type=Compaction,name=PendingTasks

nodetool:

Terminal window
nodetool compactionstats

Thresholds:

LevelPendingAction
Normal< 10None
Warning10-50Monitor
Critical> 50Increase throughput

nodetool:

Terminal window
nodetool status # Shows Load per node
df -h /var/lib/cassandra

Thresholds:

LevelUsageAction
Normal< 50%None
Warning50-70%Plan expansion
Critical> 70%Urgent expansion

Important: Leave 50% free for compaction operations.


JMX Path:

java.lang:type=Memory/HeapMemoryUsage

nodetool:

Terminal window
nodetool info | grep "Heap Memory"

Thresholds:

LevelUsageAction
Normal< 60%None
Warning60-80%Monitor GC
Critical> 80%Risk of OOM

JMX Path:

java.lang:type=GarbageCollector,name=G1 Young Generation/CollectionTime
java.lang:type=GarbageCollector,name=G1 Old Generation/CollectionTime

Log analysis:

Terminal window
grep -E "GC pause" /var/log/cassandra/gc.log | tail -20

Thresholds:

LevelPauseFrequency
Normal< 200msOccasional
Warning200-500msFrequent
Critical> 500msAny

JMX Path:

org.apache.cassandra.metrics:type=ClientRequest,scope=Read,name=Timeouts
org.apache.cassandra.metrics:type=ClientRequest,scope=Write,name=Timeouts

Recommended Alerts:

AlertConditionSeverity
Read TimeoutsAny timeouts occurringWarning
Write TimeoutsAny timeouts occurringWarning
Sustained Timeouts> 10 timeouts/min for 5 minCritical

JMX Path:

org.apache.cassandra.metrics:type=ClientRequest,scope=Read,name=Unavailables
org.apache.cassandra.metrics:type=ClientRequest,scope=Write,name=Unavailables

Recommended Alerts:

AlertConditionSeverity
Read UnavailablesAny unavailable errorsCritical
Write UnavailablesAny unavailable errorsCritical

Unavailables Indicate Serious Issues

Unavailable errors mean insufficient replicas are accessible to satisfy the consistency level. This typically indicates multiple node failures or network partitions requiring immediate investigation.

JMX Path:

org.apache.cassandra.metrics:type=Storage,name=Exceptions

nodetool:

Terminal window
nodetool info | grep "Exceptions"

JMX Path:

org.apache.cassandra.metrics:type=Table,keyspace=my_ks,scope=my_table,name=ReadLatency
org.apache.cassandra.metrics:type=Table,keyspace=my_ks,scope=my_table,name=WriteLatency

nodetool:

Terminal window
nodetool tablehistograms my_keyspace my_table

nodetool:

Terminal window
nodetool tablehistograms my_keyspace my_table | grep "Partition Size"

Thresholds:

PercentileWarningCritical
p99> 50MB> 100MB

JMX Path:

org.apache.cassandra.metrics:type=Table,name=TombstoneScannedHistogram

nodetool:

Terminal window
nodetool tablestats my_keyspace | grep -i tombstone

Terminal window
# Overall health
nodetool status
nodetool info
nodetool describecluster
# Performance
nodetool tpstats
nodetool proxyhistograms
nodetool tablestats my_keyspace
# Storage
nodetool compactionstats
nodetool tablehistograms my_keyspace my_table
# Operations
nodetool netstats
nodetool gossipinfo

AxonOps Monitoring provides purpose-built dashboards for Cassandra monitoring, displaying all key metrics in a unified interface without requiring manual dashboard configuration.

Pre-built Cassandra dashboards include:

  • Cluster Overview — Node status, schema agreement, cluster health at a glance
  • Latency & Throughput — Read/write latency percentiles, request rates, error rates
  • Resource Utilization — Heap usage, CPU, disk I/O, network across all nodes
  • Compaction & Storage — Pending compactions, SSTable counts, disk usage trends
  • Per-Table Metrics — Table-level latency, partition sizes, tombstone counts
  • Thread Pool Status — Pending tasks, blocked threads, dropped messages

Key advantages over manual monitoring:

AspectManual (nodetool/JMX)AxonOps
Setup timeHours to daysMinutes
Historical dataNot retainedFull retention
Cross-node correlationManual comparisonAutomatic
AlertingSeparate configurationIntegrated
Query analysisNot availableSlow query detection

See AxonOps Monitoring for dashboard features and configuration.


AlertConditionDurationResponse
Node DownNode unreachable1 minCheck process, network, hardware
Heap CriticalHeap usage > 85%5 minInvestigate memory pressure, potential OOM
Disk CriticalDisk usage > 80%5 minClear snapshots, add capacity
Dropped MessagesAny messages dropped1 minCheck thread pools, timeouts, capacity
Unavailable ErrorsAny unavailablesImmediateCheck replica availability
AlertConditionDurationResponse
High Latencyp99 read > 100ms10 minCheck compaction, GC, disk I/O
Compaction BacklogPending > 3015 minCheck throughput, consider tuning
Heap WarningHeap usage > 70%10 minMonitor trend, prepare mitigation
Hints GrowingHints > 100010 minCheck target node health
Schema DisagreementMultiple versions5 minCheck for stuck migrations

AxonOps provides pre-configured alerts for all critical Cassandra metrics. Alerts can be customized through the AxonOps dashboard:

  • Threshold adjustment — Modify alert thresholds based on workload characteristics
  • Notification routing — Route alerts to Slack, PagerDuty, email, or webhooks
  • Alert suppression — Configure maintenance windows to suppress expected alerts
  • Escalation policies — Define escalation paths for unacknowledged alerts

See Setup Alert Rules for detailed configuration instructions.