Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
title: Complete dot-separated metric name migration
type: changed
authors:
- name: Jan Høydahl
url: https://home.apache.org/phonebook.html?uid=janhoy
links:
- name: SOLR-18165
url: https://issues.apache.org/jira/browse/SOLR-18165
14 changes: 7 additions & 7 deletions solr/core/src/java/org/apache/solr/core/ZkContainer.java
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ public void initializeMetrics(
var metricsListener = zkController.getZkClient().getMetrics();

ctx.observableLongCounter(
"solr_zk_ops",
"solr.zk.ops",
"Total number of ZooKeeper operations",
measurement -> {
measurement.record(
Expand All @@ -176,44 +176,44 @@ public void initializeMetrics(
});

ctx.observableLongCounter(
"solr_zk_read",
"solr.zk.read",
"Total bytes read from ZooKeeper",
measurement -> {
measurement.record(metricsListener.getBytesRead(), attributes);
},
OtelUnit.BYTES);

ctx.observableLongCounter(
"solr_zk_watches_fired",
"solr.zk.watches_fired",
"Total number of ZooKeeper watches fired",
measurement -> {
measurement.record(metricsListener.getWatchesFired(), attributes);
});

ctx.observableLongCounter(
"solr_zk_written",
"solr.zk.written",
"Total bytes written to ZooKeeper",
measurement -> {
measurement.record(metricsListener.getBytesWritten(), attributes);
},
OtelUnit.BYTES);

ctx.observableLongCounter(
"solr_zk_cumulative_multi_ops_total",
"solr.zk.cumulative.multi_ops.total",
"Total cumulative multi-operations count",
measurement -> {
measurement.record(metricsListener.getCumulativeMultiOps(), attributes);
});

ctx.observableLongCounter(
"solr_zk_child_fetches",
"solr.zk.child.fetches",
"Total number of ZooKeeper child node fetches",
measurement -> {
measurement.record(metricsListener.getChildFetches(), attributes);
});
Comment on lines 208 to 213
Copy link

Copilot AI Apr 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The metric name solr.zk.child.fetches introduces an extra hierarchy level (childfetches) even though the pre-migration name treated this as a single compound concept (child_fetches). In this same block, other compound leaves keep underscores (e.g. watches_fired, children_fetched, multi_ops), so this one stands out and makes the naming inconsistent. Consider using solr.zk.child_fetches instead to keep the compound token intact (and keep the mapping closer to the previous name).

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is what I also commented in the Questions section above. So probably use child_fetches.


ctx.observableLongCounter(
"solr_zk_cumulative_children_fetched",
"solr.zk.cumulative.children_fetched",
"Total cumulative children fetched count",
measurement -> {
measurement.record(
Expand Down
12 changes: 6 additions & 6 deletions solr/core/src/java/org/apache/solr/search/CaffeineCache.java
Original file line number Diff line number Diff line change
Expand Up @@ -469,7 +469,7 @@ public String toString() {

@Override
public void initializeMetrics(SolrMetricsContext parentContext, Attributes attributes) {
initializeMetrics(parentContext, attributes, "solr_caffeine_cache");
initializeMetrics(parentContext, attributes, "solr.caffeine_cache");
}

public void initializeMetrics(
Expand All @@ -480,23 +480,23 @@ public void initializeMetrics(

ObservableLongMeasurement cacheLookupsMetric =
solrMetricsContext.longCounterMeasurement(
metricName + "_lookups", "Number of cumulative cache lookup results (hits and misses)");
metricName + ".lookups", "Number of cumulative cache lookup results (hits and misses)");

ObservableLongMeasurement cacheOperationMetric =
solrMetricsContext.longCounterMeasurement(
metricName + "_ops", "Number of cumulative cache operations (inserts and evictions)");
metricName + ".ops", "Number of cumulative cache operations (inserts and evictions)");

ObservableLongMeasurement sizeMetric =
solrMetricsContext.longGaugeMeasurement(
metricName + "_size", "Current number cache entries");
metricName + ".size", "Current number of cache entries");

ObservableLongMeasurement ramBytesUsedMetric =
solrMetricsContext.longGaugeMeasurement(
metricName + "_ram_used", "RAM bytes used by cache", OtelUnit.BYTES);
metricName + ".ram_used", "RAM bytes used by cache", OtelUnit.BYTES);

ObservableLongMeasurement warmupTimeMetric =
solrMetricsContext.longGaugeMeasurement(
metricName + "_warmup_time", "Cache warmup time (most recent)", OtelUnit.MILLISECONDS);
metricName + ".warmup_time", "Cache warmup time (most recent)", OtelUnit.MILLISECONDS);

solrMetricsContext.batchCallback(
() -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -277,31 +277,31 @@ public void initializeMetrics(SolrMetricsContext parentContext, Attributes attri
numLogged =
new AttributedLongCounter(
solrMetricsContext.longCounter(
"solr_auditlogger_count",
"solr.auditlogger.count",
"The number of audit events that were successfully logged."),
attrsWithCategory);
numErrors =
new AttributedLongCounter(
solrMetricsContext.longCounter(
"solr_auditlogger_errors", "The number of audit events that resulted in errors."),
"solr.auditlogger.errors", "The number of audit events that resulted in errors."),
attrsWithCategory);
numLost =
new AttributedLongCounter(
solrMetricsContext.longCounter(
"solr_auditlogger_lost",
"solr.auditlogger.lost",
"The number of audit events that were lost due to async queue being full."),
attrsWithCategory);
requestTimes =
new AttributedLongTimer(
this.solrMetricsContext.longHistogram(
"solr_auditlogger_request_times",
"solr.auditlogger.request_times",
"Distribution of audit event request durations",
OtelUnit.NANOSECONDS),
attrsWithCategory);

if (async) {
solrMetricsContext.observableLongGauge(
"solr_auditlogger_queue",
"solr.auditlogger.queue",
"Metrics around the audit logger queue when running in async mode",
(observableLongMeasurement -> {
observableLongMeasurement.record(
Expand All @@ -314,7 +314,7 @@ public void initializeMetrics(SolrMetricsContext parentContext, Attributes attri
queuedTime =
new AttributedLongTimer(
solrMetricsContext.longHistogram(
"solr_auditlogger_queued_time",
"solr.auditlogger.queued_time",
"Distribution of time events spend queued before processing",
OtelUnit.NANOSECONDS),
attrsWithCategory);
Expand All @@ -323,7 +323,7 @@ public void initializeMetrics(SolrMetricsContext parentContext, Attributes attri
AttributedLongGauge asyncEnabledGauge =
new AttributedLongGauge(
solrMetricsContext.longGauge(
"solr_auditlogger_async_enabled",
"solr.auditlogger.async_enabled",
"Whether the audit logger is running in async mode (1) or not (0)"),
attrsWithCategory);
asyncEnabledGauge.set(async ? 1L : 0L);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
public class OtelMetrics implements ConsumerMetrics {

public static final String REGISTRY = "crossdc.consumer.registry";
public static final String NAME_PREFIX = "crossdc_consumer_";
public static final String NAME_PREFIX = "crossdc.consumer.";
public static final String ATTR_TYPE = "type";
public static final String ATTR_SUBTYPE = "subtype";
public static final String ATTR_RESULT = "result";
Expand Down Expand Up @@ -61,36 +61,36 @@ protected void register(String scope) {

inputMsg =
metricsContext.longCounter(
NAME_PREFIX + "input_msg_total", "Total number of input Kafka messages");
NAME_PREFIX + "input.msg.total", "Total number of input Kafka messages");

inputReq =
metricsContext.longCounter(
NAME_PREFIX + "input_req_total", "Total number of input Solr requests");
NAME_PREFIX + "input.req.total", "Total number of input Solr requests");

collapsed =
metricsContext.longCounter(
NAME_PREFIX + "collapsed_total", "Total number of collapsed update requests");
NAME_PREFIX + "collapsed.total", "Total number of collapsed update requests");

output =
metricsContext.longCounter(NAME_PREFIX + "output_total", "Total number of output requests");
metricsContext.longCounter(NAME_PREFIX + "output.total", "Total number of output requests");

outputBatchSizeHistogram =
metricsContext.longHistogram(
NAME_PREFIX + "output_batch_size", "Histogram of output batch sizes");
NAME_PREFIX + "output.batch_size", "Histogram of output batch sizes");

outputBackoffHistogram =
metricsContext.longHistogram(
NAME_PREFIX + "output_backoff_time", "Histogram of output backoff sleep times");
NAME_PREFIX + "output.backoff_time", "Histogram of output backoff sleep times");

outputTimeHistogram =
metricsContext.longHistogram(
NAME_PREFIX + "output_time",
NAME_PREFIX + "output.time",
"Histogram of output request times",
OtelUnit.MILLISECONDS);

outputFirstAttemptHistogram =
metricsContext.longHistogram(
NAME_PREFIX + "output_first_attempt_time",
NAME_PREFIX + "output.first_attempt_time",
"Histogram of first attempt request times",
OtelUnit.MILLISECONDS);
}
Expand Down
Loading