From ceea9e49dd54e62914da284e0f4a4790edd94455 Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Fri, 5 Jun 2026 15:06:52 +0100 Subject: [PATCH] fix(telemetry): standardize transaction-overview legends and cap tooltips Apply the dashboard legend convention across all panels now that the P50 series have been removed (P95-only): - Drop the redundant "P95 " / "P50 " prefix; the panel title already states the percentile. - Put every filter/dimension value inside [] comma-separated, ending with exported_instance, e.g. "AMMDeposit [Preclaim, xrpld-mainnet]". - Add exported_instance to the by() clause and legend of the three panels that filtered on $node but omitted it (Transaction Rate by Type, Transaction Results by Type, TxQ Accept Status), so per-node series are produced. - Title-case the stage value for display via label_replace in the four apply-pipeline panels; the span attribute stays lowercase (preflight/preclaim/apply) since legendFormat cannot change case. - Cap tooltip maxHeight at 500 on every panel. Co-Authored-By: Claude Opus 4.8 --- .../dashboards/transaction-overview.json | 96 +++++++++++-------- 1 file changed, 58 insertions(+), 38 deletions(-) diff --git a/docker/telemetry/grafana/dashboards/transaction-overview.json b/docker/telemetry/grafana/dashboards/transaction-overview.json index e969992f30..df172d104c 100644 --- a/docker/telemetry/grafana/dashboards/transaction-overview.json +++ b/docker/telemetry/grafana/dashboards/transaction-overview.json @@ -21,7 +21,8 @@ "options": { "tooltip": { "mode": "multi", - "sort": "desc" + "sort": "desc", + "maxHeight": 500 } }, "targets": [ @@ -67,7 +68,8 @@ "options": { "tooltip": { "mode": "multi", - "sort": "desc" + "sort": "desc", + "maxHeight": 500 }, "legend": { "displayMode": "table", @@ -81,7 +83,7 @@ "type": "prometheus" }, "expr": "histogram_quantile(0.95, sum by (le, tx_type, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=\"tx.process\", tx_type=~\"$tx_type\"}[5m])))", - "legendFormat": "P95 {{tx_type}} [{{exported_instance}}]" + "legendFormat": "{{tx_type}} [{{exported_instance}}]" } ], "fieldConfig": { @@ -111,7 +113,8 @@ "options": { "tooltip": { "mode": "multi", - "sort": "desc" + "sort": "desc", + "maxHeight": 500 } }, "targets": [ @@ -120,7 +123,7 @@ "type": "prometheus" }, "expr": "sum by (local, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", local=~\"$tx_origin\", span_name=\"tx.process\", tx_type=~\"$tx_type\"}[5m]))", - "legendFormat": "Local = {{local}} [{{exported_instance}}]" + "legendFormat": "Local [{{local}}, {{exported_instance}}]" } ] }, @@ -137,7 +140,8 @@ "options": { "tooltip": { "mode": "multi", - "sort": "desc" + "sort": "desc", + "maxHeight": 500 } }, "targets": [ @@ -146,7 +150,7 @@ "type": "prometheus" }, "expr": "sum by (suppressed, exported_instance) (rate(traces_span_metrics_calls_total{span_name=\"tx.receive\", tx_type=~\"$tx_type\", exported_instance=~\"$node\"}[$__rate_interval]))", - "legendFormat": "Suppressed={{suppressed}} [{{exported_instance}}]" + "legendFormat": "Suppressed [{{suppressed}}, {{exported_instance}}]" } ], "fieldConfig": { @@ -176,7 +180,8 @@ "options": { "tooltip": { "mode": "multi", - "sort": "desc" + "sort": "desc", + "maxHeight": 500 }, "yAxis": { "axisLabel": "Duration (ms)", @@ -212,7 +217,8 @@ "options": { "tooltip": { "mode": "multi", - "sort": "desc" + "sort": "desc", + "maxHeight": 500 } }, "targets": [ @@ -221,7 +227,7 @@ "type": "prometheus" }, "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=\"tx.apply\"}[5m])))", - "legendFormat": "P95 tx.apply [{{exported_instance}}]" + "legendFormat": "tx.apply [{{exported_instance}}]" } ], "fieldConfig": { @@ -251,7 +257,8 @@ "options": { "tooltip": { "mode": "multi", - "sort": "desc" + "sort": "desc", + "maxHeight": 500 } }, "targets": [ @@ -290,7 +297,8 @@ "options": { "tooltip": { "mode": "multi", - "sort": "desc" + "sort": "desc", + "maxHeight": 500 } }, "targets": [ @@ -338,7 +346,8 @@ "options": { "tooltip": { "mode": "multi", - "sort": "desc" + "sort": "desc", + "maxHeight": 500 }, "legend": { "displayMode": "table", @@ -351,8 +360,8 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (tx_type) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"tx.process\", tx_type=~\"$tx_type\"}[5m]))", - "legendFormat": "{{tx_type}}" + "expr": "sum by (tx_type, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"tx.process\", tx_type=~\"$tx_type\"}[5m]))", + "legendFormat": "{{tx_type}} [{{exported_instance}}]" } ], "fieldConfig": { @@ -382,7 +391,8 @@ "options": { "tooltip": { "mode": "multi", - "sort": "desc" + "sort": "desc", + "maxHeight": 500 }, "legend": { "displayMode": "table", @@ -395,8 +405,8 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (tx_type, ter_result) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"tx.process\", tx_type=~\"$tx_type\", ter_result=~\"$ter_result\", ter_result!=\"tesSUCCESS\"}[5m]))", - "legendFormat": "{{tx_type}}: {{ter_result}}" + "expr": "sum by (tx_type, ter_result, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"tx.process\", tx_type=~\"$tx_type\", ter_result=~\"$ter_result\", ter_result!=\"tesSUCCESS\"}[5m]))", + "legendFormat": "{{tx_type}} [{{ter_result}}, {{exported_instance}}]" } ], "fieldConfig": { @@ -430,7 +440,8 @@ "values": ["value", "percent"] }, "tooltip": { - "mode": "multi" + "mode": "multi", + "maxHeight": 500 } }, "targets": [ @@ -438,8 +449,8 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (txq_status) (increase(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"txq.accept_tx\", txq_status=~\"$txq_status\"}[5m]))", - "legendFormat": "{{txq_status}}" + "expr": "sum by (txq_status, exported_instance) (increase(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"txq.accept_tx\", txq_status=~\"$txq_status\"}[5m]))", + "legendFormat": "{{txq_status}} [{{exported_instance}}]" } ], "fieldConfig": { @@ -462,7 +473,8 @@ "options": { "tooltip": { "mode": "multi", - "sort": "desc" + "sort": "desc", + "maxHeight": 500 }, "legend": { "displayMode": "table", @@ -476,7 +488,7 @@ "type": "prometheus" }, "expr": "histogram_quantile(0.95, sum by (le, tx_type, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=\"tx.transactor\", tx_type=~\"$tx_type\"}[5m])))", - "legendFormat": "P95 {{tx_type}} [{{exported_instance}}]" + "legendFormat": "{{tx_type}} [{{exported_instance}}]" } ], "fieldConfig": { @@ -506,7 +518,8 @@ "options": { "tooltip": { "mode": "multi", - "sort": "desc" + "sort": "desc", + "maxHeight": 500 } }, "targets": [ @@ -545,7 +558,8 @@ "options": { "tooltip": { "mode": "multi", - "sort": "desc" + "sort": "desc", + "maxHeight": 500 } }, "targets": [ @@ -584,7 +598,8 @@ "options": { "tooltip": { "mode": "multi", - "sort": "desc" + "sort": "desc", + "maxHeight": 500 } }, "targets": [ @@ -593,7 +608,7 @@ "type": "prometheus" }, "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=\"txq.accept\"}[5m])))", - "legendFormat": "P95 Drain [{{exported_instance}}]" + "legendFormat": "Drain [{{exported_instance}}]" } ], "fieldConfig": { @@ -623,7 +638,8 @@ "options": { "tooltip": { "mode": "multi", - "sort": "desc" + "sort": "desc", + "maxHeight": 500 } }, "targets": [ @@ -662,7 +678,8 @@ "options": { "tooltip": { "mode": "multi", - "sort": "desc" + "sort": "desc", + "maxHeight": 500 }, "legend": { "displayMode": "table", @@ -675,7 +692,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (stage, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=~\"tx.preflight|tx.preclaim|tx.transactor\", stage=~\"$stage\"}[5m]))", + "expr": "label_replace(label_replace(label_replace(sum by (stage, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=~\"tx.preflight|tx.preclaim|tx.transactor\", stage=~\"$stage\"}[5m])), \"stage\", \"Preflight\", \"stage\", \"preflight\"), \"stage\", \"Preclaim\", \"stage\", \"preclaim\"), \"stage\", \"Apply\", \"stage\", \"apply\")", "legendFormat": "{{stage}} [{{exported_instance}}]" } ], @@ -706,7 +723,8 @@ "options": { "tooltip": { "mode": "multi", - "sort": "desc" + "sort": "desc", + "maxHeight": 500 }, "legend": { "displayMode": "table", @@ -719,8 +737,8 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.95, sum by (le, stage, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=~\"tx.preflight|tx.preclaim|tx.transactor\", stage=~\"$stage\"}[5m])))", - "legendFormat": "P95 {{stage}} [{{exported_instance}}]" + "expr": "label_replace(label_replace(label_replace(histogram_quantile(0.95, sum by (le, stage, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=~\"tx.preflight|tx.preclaim|tx.transactor\", stage=~\"$stage\"}[5m]))), \"stage\", \"Preflight\", \"stage\", \"preflight\"), \"stage\", \"Preclaim\", \"stage\", \"preclaim\"), \"stage\", \"Apply\", \"stage\", \"apply\")", + "legendFormat": "{{stage}} [{{exported_instance}}]" } ], "fieldConfig": { @@ -750,7 +768,8 @@ "options": { "tooltip": { "mode": "multi", - "sort": "desc" + "sort": "desc", + "maxHeight": 500 }, "legend": { "displayMode": "table", @@ -763,7 +782,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (stage, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=~\"tx.preflight|tx.preclaim|tx.transactor\", stage=~\"$stage\", ter_result!~\"tesSUCCESS|\"}[5m]))", + "expr": "label_replace(label_replace(label_replace(sum by (stage, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=~\"tx.preflight|tx.preclaim|tx.transactor\", stage=~\"$stage\", ter_result!~\"tesSUCCESS|\"}[5m])), \"stage\", \"Preflight\", \"stage\", \"preflight\"), \"stage\", \"Preclaim\", \"stage\", \"preclaim\"), \"stage\", \"Apply\", \"stage\", \"apply\")", "legendFormat": "{{stage}} [{{exported_instance}}]" } ], @@ -794,7 +813,8 @@ "options": { "tooltip": { "mode": "multi", - "sort": "desc" + "sort": "desc", + "maxHeight": 500 }, "legend": { "displayMode": "table", @@ -807,8 +827,8 @@ "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}}]" + "expr": "label_replace(label_replace(label_replace(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]))), \"stage\", \"Preflight\", \"stage\", \"preflight\"), \"stage\", \"Preclaim\", \"stage\", \"preclaim\"), \"stage\", \"Apply\", \"stage\", \"apply\")", + "legendFormat": "{{tx_type}} [{{stage}}, {{exported_instance}}]" } ], "fieldConfig": {