From be3fd4f3f9ecfae88265cac510427ffbaff94fbd Mon Sep 17 00:00:00 2001 From: Piotr <17101802+thampiotr@users.noreply.github.com> Date: Fri, 20 Feb 2026 16:00:28 +0000 Subject: [PATCH 1/2] fix(mixin): Support OTel exporter batching --- .../dashboards/otel-engine-overview.libsonnet | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/operations/alloy-mixin/dashboards/otel-engine-overview.libsonnet b/operations/alloy-mixin/dashboards/otel-engine-overview.libsonnet index 2e84fb0d67e..ba44520a782 100644 --- a/operations/alloy-mixin/dashboards/otel-engine-overview.libsonnet +++ b/operations/alloy-mixin/dashboards/otel-engine-overview.libsonnet @@ -421,13 +421,20 @@ local filename = 'alloy-otel-engine-overview.json'; // Row 2: Batching ( panel.newHeatmap('Batch send size', 'short') + - panel.withDescription( - 'Distribution of batch sizes when sent. Shows how full batches are before being flushed. ' + normalNote, - ) + + panel.withDescription(||| + Distribution of batch sizes when sent. Works with both batching approaches: + the batch processor (processor/batch) and the exporter sending_queue batch (sending_queue.batch). + Whichever is active will populate this panel. + ||| + normalNote) + panelPosition3Across(row=12, col=0) + panel.withQueries([ panel.newQuery( + // Both the batch processor and the exporter sending_queue emit a batch + // send size histogram. Typically only one is active, so we use "or" to + // show whichever has data. If both are active, exporter wins. expr=||| + sum by (le) (increase(otelcol_exporter_queue_batch_send_size_bucket{%(groupSelector)s}[$__rate_interval])) + or sum by (le) (increase(otelcol_processor_batch_batch_send_size_bucket{%(groupSelector)s}[$__rate_interval])) ||| % $._config, format='heatmap', @@ -438,7 +445,7 @@ local filename = 'alloy-otel-engine-overview.json'; ( panel.new(title='Batch send triggers by ${groupby}', type='timeseries') + panel.withDescription( - 'How batches are flushed: by reaching the size limit or by timeout. Mostly timeout triggers may indicate low throughput or a large batch size setting. ' + normalNote, + 'How batches are flushed: by reaching the size limit or by timeout. Mostly timeout triggers may indicate low throughput or a large batch size setting. Only available with the batch processor; the exporter sending_queue batch does not emit trigger metrics. ' + normalNote, ) + panel.withUnit('cps') + panelPosition3Across(row=12, col=1) + @@ -460,7 +467,7 @@ local filename = 'alloy-otel-engine-overview.json'; ( panel.new(title='Batch metadata cardinality by ${groupby}', type='timeseries') + panel.withDescription( - 'Number of distinct metadata value combinations being processed. High cardinality increases memory usage and may hit the metadata_cardinality_limit. ' + normalNote, + 'Number of distinct metadata value combinations being processed. High cardinality increases memory usage and may hit the metadata_cardinality_limit. Only available with the batch processor; the exporter sending_queue batch does not emit this metric. ' + normalNote, ) + panelPosition3Across(row=12, col=2) + panel.withQueries([ From 9d6ed4c8fbfa2f25982eec13835c3708f676a789 Mon Sep 17 00:00:00 2001 From: Piotr <17101802+thampiotr@users.noreply.github.com> Date: Fri, 20 Feb 2026 16:02:05 +0000 Subject: [PATCH 2/2] mixin generate --- .../rendered/dashboards/alloy-otel-engine-overview.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/operations/alloy-mixin/rendered/dashboards/alloy-otel-engine-overview.json b/operations/alloy-mixin/rendered/dashboards/alloy-otel-engine-overview.json index 492fcdf0bf4..abd988e1c21 100644 --- a/operations/alloy-mixin/rendered/dashboards/alloy-otel-engine-overview.json +++ b/operations/alloy-mixin/rendered/dashboards/alloy-otel-engine-overview.json @@ -940,7 +940,7 @@ }, { "datasource": "${datasource}", - "description": "Distribution of batch sizes when sent. Shows how full batches are before being flushed. Requires \"normal\" telemetry level.", + "description": "Distribution of batch sizes when sent. Works with both batching approaches:\nthe batch processor (processor/batch) and the exporter sending_queue batch (sending_queue.batch).\nWhichever is active will populate this panel.\nRequires \"normal\" telemetry level.", "gridPos": { "h": 10, "w": 8, @@ -976,7 +976,7 @@ "targets": [ { "datasource": "${datasource}", - "expr": "sum by (le) (increase(otelcol_processor_batch_batch_send_size_bucket{cluster=~\"$cluster\", namespace=~\"$namespace\", job=~\"$job\"}[$__rate_interval]))\n", + "expr": "sum by (le) (increase(otelcol_exporter_queue_batch_send_size_bucket{cluster=~\"$cluster\", namespace=~\"$namespace\", job=~\"$job\"}[$__rate_interval]))\nor\nsum by (le) (increase(otelcol_processor_batch_batch_send_size_bucket{cluster=~\"$cluster\", namespace=~\"$namespace\", job=~\"$job\"}[$__rate_interval]))\n", "format": "heatmap", "instant": false, "legendFormat": "{{le}}", @@ -988,7 +988,7 @@ }, { "datasource": "${datasource}", - "description": "How batches are flushed: by reaching the size limit or by timeout. Mostly timeout triggers may indicate low throughput or a large batch size setting. Requires \"normal\" telemetry level.", + "description": "How batches are flushed: by reaching the size limit or by timeout. Mostly timeout triggers may indicate low throughput or a large batch size setting. Only available with the batch processor; the exporter sending_queue batch does not emit trigger metrics. Requires \"normal\" telemetry level.", "fieldConfig": { "defaults": { "unit": "cps" @@ -1021,7 +1021,7 @@ }, { "datasource": "${datasource}", - "description": "Number of distinct metadata value combinations being processed. High cardinality increases memory usage and may hit the metadata_cardinality_limit. Requires \"normal\" telemetry level.", + "description": "Number of distinct metadata value combinations being processed. High cardinality increases memory usage and may hit the metadata_cardinality_limit. Only available with the batch processor; the exporter sending_queue batch does not emit this metric. Requires \"normal\" telemetry level.", "gridPos": { "h": 10, "w": 8,