From 72642b5dc6b4c9226707cf553d5a3746cbd56642 Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Fri, 5 Jun 2026 13:39:59 +0100 Subject: [PATCH] feat(telemetry): add tx apply latency panel by type and stage The existing apply-pipeline panels show latency by stage (all types combined) or by type (single span). Neither answers "for a given transaction type, which stage dominates its latency". Add a p95 panel grouped by both tx_type and stage, filterable via the $tx_type and $stage variables. Both dimensions already exist in spanmetrics, so no collector change is needed. Reflow the section so the full-width failure panel sits below the new full-width panel. Co-Authored-By: Claude Opus 4.8 --- .../dashboards/transaction-overview.json | 46 ++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/docker/telemetry/grafana/dashboards/transaction-overview.json b/docker/telemetry/grafana/dashboards/transaction-overview.json index 5423a8e4fb..405e1564e8 100644 --- a/docker/telemetry/grafana/dashboards/transaction-overview.json +++ b/docker/telemetry/grafana/dashboards/transaction-overview.json @@ -766,7 +766,7 @@ "h": 8, "w": 24, "x": 0, - "y": 72 + "y": 80 }, "options": { "tooltip": { @@ -801,6 +801,50 @@ }, "overrides": [] } + }, + { + "title": "Tx Apply Pipeline Latency by Type and Stage (p95)", + "description": "95th-percentile duration broken down by both transaction type and apply-pipeline stage. Shows, for each transaction type, which stage (preflight, preclaim, apply) dominates its latency. Higher cardinality than the by-stage view; filter with the $tx_type and $stage variables.", + "type": "timeseries", + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 72 + }, + "options": { + "tooltip": { + "mode": "multi", + "sort": "desc" + }, + "legend": { + "displayMode": "table", + "placement": "right", + "calcs": ["mean", "max"] + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus" + }, + "expr": "histogram_quantile(0.95, sum by (le, tx_type, stage, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=~\"tx.preflight|tx.preclaim|tx.transactor\", tx_type=~\"$tx_type\", stage=~\"$stage\"}[5m])))", + "legendFormat": "P95 {{tx_type}} {{stage}} [{{exported_instance}}]" + } + ], + "fieldConfig": { + "defaults": { + "unit": "ms", + "custom": { + "axisLabel": "Duration (ms)", + "spanNulls": true, + "insertNulls": false, + "showPoints": "auto", + "pointSize": 3 + } + }, + "overrides": [] + } } ], "schemaVersion": 39,