Telemetry Devices

Apache Solr Benchmark includes telemetry devices for collecting server-side metrics. Six devices are always enabled. Eight additional devices can be enabled on demand with --telemetry.

Both Solr 9.x (JSON format) and Solr 10.x (Prometheus text format) are supported. Format detection is automatic via the HTTP Content-Type header.


solr-jvm-stats

Collects JVM statistics from each Solr node via the Solr metrics API.

Enable:

solr-benchmark run --telemetry solr-jvm-stats ...

Metrics collected:

Metric Unit Description
jvm_heap_used_bytes bytes JVM heap memory currently used
jvm_heap_max_bytes bytes Maximum JVM heap size
jvm_gc_count count Total GC collections across all collectors
jvm_gc_time_ms ms Total GC wall time across all collectors
jvm_gc_young_count count Young-generation GC collection count
jvm_gc_young_time_ms ms Young-generation GC wall time
jvm_gc_old_count count Old-generation GC collection count
jvm_gc_old_time_ms ms Old-generation GC wall time
jvm_thread_count count Current JVM thread count
jvm_thread_peak_count count Peak JVM thread count since startup
jvm_buffer_pool_direct_bytes bytes Direct byte buffer pool memory used
jvm_buffer_pool_mapped_bytes bytes Memory-mapped buffer pool memory used

solr-node-stats

Collects Solr node-level and OS statistics.

Enable:

solr-benchmark run --telemetry solr-node-stats ...

Metrics collected:

Metric Unit Description
cpu_usage_percent % Process CPU load (0–100)
os_memory_free_bytes bytes Free physical OS memory
node_file_descriptors_open count Currently open file descriptors
node_file_descriptors_max count Maximum allowed file descriptors
node_http_requests_total count Total HTTP requests processed by Jetty
query_handler_requests_total count Total /select query handler requests
query_handler_errors_total count Total /select query handler errors
query_handler_avg_latency_ms ms Rolling average /select request latency

solr-collection-stats

Collects per-collection document count, segment count, and deleted doc count.

Enable:

solr-benchmark run --telemetry solr-collection-stats ...

Metrics collected (all tagged with collection metadata):

Metric Unit Description
num_docs docs Current document count
num_deleted_docs docs Number of deleted (soft-deleted) documents
segment_count count Number of Lucene segments
index_size_bytes bytes Total index size on disk

Notes: Collection stats are polled every 30 seconds (configurable). Uses both the Collections API and the Luke request handler (/admin/luke) for full statistics.


solr-query-stats

Collects query latency percentiles and filter cache hit ratio.

Enable:

solr-benchmark run --telemetry solr-query-stats ...

Metrics collected:

Metric Unit Description
query_latency_p50_ms ms 50th percentile /select request latency
query_latency_p99_ms ms 99th percentile /select request latency
query_latency_p999_ms ms 99.9th percentile /select request latency
query_requests_total count Total /select handler request count
query_errors_total count Total /select handler error count
query_cache_hit_ratio ratio Filter cache hit ratio (0.0–1.0)

solr-indexing-stats

Collects update handler and merge metrics.

Enable:

solr-benchmark run --telemetry solr-indexing-stats ...

Metrics collected:

Metric Unit Description
indexing_requests_total count Total /update handler requests
indexing_errors_total count Total /update handler errors
indexing_avg_time_ms ms Rolling average /update request time
index_merge_major_running count Currently running major merges
index_merge_minor_running count Currently running minor merges

solr-cache-stats

Collects hit/miss/eviction and memory statistics for the three primary Solr caches.

Enable:

solr-benchmark run --telemetry solr-cache-stats ...

Metrics collected (all tagged with cache metadata: queryResultCache, filterCache, documentCache):

Metric Unit Description
cache_hits_total count Cache hits since Solr start
cache_inserts_total count Cache inserts since Solr start
cache_evictions_total count Cache evictions since Solr start
cache_memory_bytes bytes RAM used by this cache
cache_hit_ratio ratio Hit ratio (0.0–1.0)

Optional devices

Optional devices must be explicitly requested with --telemetry <name>. REST-based optional devices work with all pipelines. JVM/process devices inject flags into SOLR_OPTS before Solr starts and require the docker or from-distribution pipeline — they are silently skipped on benchmark-only.


segment-stats

Captures per-collection segment statistics via the Solr Luke request handler.

Pipeline: All pipelines Enable: --telemetry segment-stats

Collected on benchmark stop. Results are written to segment_stats.log in the benchmark log directory.

Metric (in log file) Description
numDocs Current document count
maxDoc Maximum doc ID (includes deleted docs)
deletedDocs Number of soft-deleted documents
segmentCount Number of Lucene segments
sizeInBytes Total index size on disk

shard-stats

Polls CLUSTERSTATUS and Core STATUS for each shard leader and records per-shard metrics. Skipped silently on standalone (non-SolrCloud) Solr.

Pipeline: All pipelines Enable: --telemetry shard-stats

Metric Unit Description
shard_{name}_num_docs count Document count for the named shard
shard_{name}_size_bytes bytes Index size for the named shard

The default poll interval is 60 seconds. Override with --telemetry-params shard-stats-sample-interval:30.


cluster-environment-info

Records Solr version, JVM version, and hardware info as run metadata. Called once at benchmark start.

Pipeline: All pipelines Enable: --telemetry cluster-environment-info

Metadata key Description
distribution_version Solr version string (e.g. 9.7.0)
jvm_version JVM version (e.g. 21.0.1)
jvm_vendor JVM vendor name (e.g. OpenJDK 21)
cpu_logical_cores Number of logical CPU cores on the node
cluster_node_count Number of live SolrCloud nodes

jfr

Enables Java Flight Recorder. Injects -XX:StartFlightRecording=... into SOLR_OPTS.

Pipeline: docker or from-distribution only Enable: --telemetry jfr

The flight recording is written to profile.jfr in the benchmark log directory. Requires OpenJDK 11 or later. To use a custom recording template, pass --telemetry-params recording-template:/path/to/template.jfc.


gc

Enables GC logging (Java 9+ -Xlog: format). Injects the GC log flags into SOLR_OPTS.

Pipeline: docker or from-distribution only Enable: --telemetry gc

GC output is written to gc.log in the benchmark log directory. The default log configuration is gc*=info,safepoint=info,age*=trace. Override with --telemetry-params gc-log-config:gc*=debug.


jit

Enables JIT compiler logging. Injects -XX:+LogCompilation and related flags into SOLR_OPTS.

Pipeline: docker or from-distribution only Enable: --telemetry jit

JIT output is written to jit.log in the benchmark log directory.


heapdump

Captures a heap dump (jmap -dump) from the Solr JVM when the benchmark finishes.

Pipeline: docker or from-distribution only Enable: --telemetry heapdump

The heap dump is written to heap_at_exit_{pid}.hprof in the benchmark log directory. On Docker pipelines, docker exec is used automatically.


disk-io

Measures disk I/O consumed by the Solr process during the benchmark run. Always active on provisioned pipelines (not opt-in).

Pipeline: docker or from-distribution (always active)

Metric Unit Description
disk_io_read_bytes bytes Bytes read by the Solr process
disk_io_write_bytes bytes Bytes written by the Solr process

Using multiple devices

# Always-on devices (no --telemetry needed):
solr-benchmark run \
  --pipeline benchmark-only \
  --target-hosts localhost:8983 \
  --workload nyc_taxis

# Add optional REST devices on any pipeline:
solr-benchmark run \
  --pipeline benchmark-only \
  --target-hosts localhost:8983 \
  --workload nyc_taxis \
  --telemetry segment-stats,shard-stats,cluster-environment-info

# Add JVM profiling devices on provisioned pipelines:
solr-benchmark run \
  --pipeline docker \
  --distribution-version 9.10.1 \
  --workload nyc_taxis \
  --telemetry gc,jfr

Telemetry output location

Telemetry metrics are written to the same results.json file as workload metrics, under a "telemetry" key alongside the standard per-task metrics.