From 6f403fdd1b9fb936bf0703fe75ce7149effb5a96 Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Thu, 14 May 2026 13:58:13 +0100 Subject: [PATCH 1/4] fix(telemetry): align Tempo search tags with C++ span attribute names RPC span attributes use bare names (command, rpc_status, rpc_role) per the naming convention in SpanNames.h, not xrpl.rpc.* qualified names. Node health attributes (amendment_blocked, server_state) are resource attributes set at Tracer init, not span attributes. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../grafana/provisioning/datasources/tempo.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docker/telemetry/grafana/provisioning/datasources/tempo.yaml b/docker/telemetry/grafana/provisioning/datasources/tempo.yaml index 198c2550d3..7f4bd3684f 100644 --- a/docker/telemetry/grafana/provisioning/datasources/tempo.yaml +++ b/docker/telemetry/grafana/provisioning/datasources/tempo.yaml @@ -92,28 +92,28 @@ datasources: type: static # Phase 2: RPC tracing filters - id: rpc-command - tag: xrpl.rpc.command + tag: command operator: "=" scope: span type: static - id: rpc-status - tag: xrpl.rpc.status + tag: rpc_status operator: "=" scope: span type: dynamic - id: rpc-role - tag: xrpl.rpc.role + tag: rpc_role operator: "=" scope: span type: dynamic - # Phase 2: Node health filters (Task 2.8) + # Phase 2: Node health filters (Task 2.8) — resource attributes - id: node-amendment-blocked tag: xrpl.node.amendment_blocked operator: "=" - scope: span + scope: resource type: static - id: node-server-state tag: xrpl.node.server_state operator: "=" - scope: span + scope: resource type: dynamic From b3920355444269410a800a513b13b7fab141f6e7 Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Thu, 14 May 2026 13:58:31 +0100 Subject: [PATCH 2/4] fix(telemetry): align Tempo TX search tags with C++ attribute names Transaction span attributes use bare names (local, tx_status) per SpanNames.h convention, not xrpl.tx.* qualified names. xrpl.tx.hash is correct (shared canonical attr defined in SpanNames.h). Co-Authored-By: Claude Opus 4.6 (1M context) --- docker/telemetry/grafana/provisioning/datasources/tempo.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/telemetry/grafana/provisioning/datasources/tempo.yaml b/docker/telemetry/grafana/provisioning/datasources/tempo.yaml index 7f1265bf28..542d7ddb7d 100644 --- a/docker/telemetry/grafana/provisioning/datasources/tempo.yaml +++ b/docker/telemetry/grafana/provisioning/datasources/tempo.yaml @@ -125,12 +125,12 @@ datasources: scope: span type: static - id: tx-origin - tag: xrpl.tx.local + tag: local operator: "=" scope: span type: dynamic - id: tx-status - tag: xrpl.tx.status + tag: tx_status operator: "=" scope: span type: dynamic From 61ab5c6fe3c9cb64e9dce1b6ede8805160185a19 Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Thu, 14 May 2026 13:59:08 +0100 Subject: [PATCH 3/4] fix(telemetry): align Tempo consensus search tags with C++ attribute names Consensus span attributes use bare names (close_time_correct, consensus_state, close_resolution_ms) and shared canonical attrs (xrpl.ledger.seq) per SpanNames.h. xrpl.consensus.mode and xrpl.consensus.round are correct (domain-qualified to avoid collision). Co-Authored-By: Claude Opus 4.6 (1M context) --- .../telemetry/grafana/provisioning/datasources/tempo.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docker/telemetry/grafana/provisioning/datasources/tempo.yaml b/docker/telemetry/grafana/provisioning/datasources/tempo.yaml index 0e45ae1c87..03b232c000 100644 --- a/docker/telemetry/grafana/provisioning/datasources/tempo.yaml +++ b/docker/telemetry/grafana/provisioning/datasources/tempo.yaml @@ -147,22 +147,22 @@ datasources: scope: span type: dynamic - id: consensus-ledger-seq - tag: xrpl.consensus.ledger.seq + tag: xrpl.ledger.seq operator: "=" scope: span type: static - id: consensus-close-time-correct - tag: xrpl.consensus.close_time_correct + tag: close_time_correct operator: "=" scope: span type: dynamic - id: consensus-state - tag: xrpl.consensus.state + tag: consensus_state operator: "=" scope: span type: dynamic - id: consensus-close-resolution - tag: xrpl.consensus.close_resolution_ms + tag: close_resolution_ms operator: "=" scope: span type: dynamic From b449db0434f6b212be9c133c804d345981e7c26a Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Thu, 14 May 2026 14:01:12 +0100 Subject: [PATCH 4/4] fix(telemetry): align spanmetrics dimensions, Tempo tags, and dashboard queries with C++ attribute names Spanmetrics dimensions used xrpl.rpc.command etc. but C++ emits bare "command". Tempo tags for phase6-added consensus/tx/peer filters used qualified names but C++ uses bare names. Dashboard panel referenced xrpl_tx_suppressed (never populated) instead of suppressed. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../dashboards/transaction-overview.json | 4 ++-- .../provisioning/datasources/tempo.yaml | 18 +++++++++--------- docker/telemetry/otel-collector-config.yaml | 14 +++++++------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/docker/telemetry/grafana/dashboards/transaction-overview.json b/docker/telemetry/grafana/dashboards/transaction-overview.json index 1d6a4c0dd0..edcb4d872e 100644 --- a/docker/telemetry/grafana/dashboards/transaction-overview.json +++ b/docker/telemetry/grafana/dashboards/transaction-overview.json @@ -147,8 +147,8 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (xrpl_tx_suppressed, exported_instance) (rate(traces_span_metrics_calls_total{span_name=\"tx.receive\", exported_instance=~\"$node\"}[$__rate_interval]))", - "legendFormat": "Suppressed={{xrpl_tx_suppressed}} [{{exported_instance}}]" + "expr": "sum by (suppressed, exported_instance) (rate(traces_span_metrics_calls_total{span_name=\"tx.receive\", exported_instance=~\"$node\"}[$__rate_interval]))", + "legendFormat": "Suppressed={{suppressed}} [{{exported_instance}}]" } ], "fieldConfig": { diff --git a/docker/telemetry/grafana/provisioning/datasources/tempo.yaml b/docker/telemetry/grafana/provisioning/datasources/tempo.yaml index 343d863928..dac00303a7 100644 --- a/docker/telemetry/grafana/provisioning/datasources/tempo.yaml +++ b/docker/telemetry/grafana/provisioning/datasources/tempo.yaml @@ -167,22 +167,22 @@ datasources: scope: span type: dynamic - id: consensus-proposers - tag: xrpl.consensus.proposers + tag: proposers operator: "=" scope: span type: dynamic - id: consensus-result - tag: xrpl.consensus.result + tag: consensus_result operator: "=" scope: span type: dynamic - id: consensus-mode-old - tag: xrpl.consensus.mode.old + tag: mode_old operator: "=" scope: span type: dynamic - id: consensus-mode-new - tag: xrpl.consensus.mode.new + tag: mode_new operator: "=" scope: span type: dynamic @@ -193,27 +193,27 @@ datasources: type: static # Phase 3/4: Additional transaction and queue filters - id: tx-path - tag: xrpl.tx.path + tag: path operator: "=" scope: span type: dynamic - id: tx-suppressed - tag: xrpl.tx.suppressed + tag: suppressed operator: "=" scope: span type: dynamic - id: peer-version - tag: xrpl.peer.version + tag: peer_version operator: "=" scope: span type: dynamic - id: txq-status - tag: xrpl.txq.status + tag: txq_status operator: "=" scope: span type: dynamic - id: txq-ter-code - tag: xrpl.txq.ter_code + tag: ter_code operator: "=" scope: span type: dynamic diff --git a/docker/telemetry/otel-collector-config.yaml b/docker/telemetry/otel-collector-config.yaml index bfe782ffd5..1c7b184772 100644 --- a/docker/telemetry/otel-collector-config.yaml +++ b/docker/telemetry/otel-collector-config.yaml @@ -49,14 +49,14 @@ connectors: explicit: buckets: [1ms, 5ms, 10ms, 25ms, 50ms, 100ms, 250ms, 500ms, 1s, 5s] dimensions: - - name: xrpl.rpc.command - - name: xrpl.rpc.status + - name: command + - name: rpc_status - name: xrpl.consensus.mode - - name: xrpl.consensus.close_time_correct - - name: xrpl.tx.local - - name: xrpl.tx.suppressed - - name: xrpl.peer.proposal.trusted - - name: xrpl.peer.validation.trusted + - name: close_time_correct + - name: local + - name: suppressed + - name: proposal_trusted + - name: validation_trusted exporters: debug: