From 266b8db897939f2ce59427d36d488228eddfe270 Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Fri, 3 Jul 2026 19:03:53 +0100 Subject: [PATCH 1/7] fix(telemetry): widen remaining right-side table-legend timeseries to full width Apply the same width rule from the earlier transaction-overview fix to the job-queue, rpc-perf-otel, and rpc-performance dashboards. Timeseries panels whose legend is a right-side table need the horizontal room, so they go to full width (w=24); each stacks onto its own row and panels below shift down. Pie charts, heatmaps, and bottom-legend panels stay half width. Co-Authored-By: Claude Opus 4.8 --- .../grafana/dashboards/rpc-performance.json | 6 +++--- .../grafana/dashboards/xrpld-job-queue.json | 16 +++++++-------- .../dashboards/xrpld-rpc-perf-otel.json | 20 +++++++++---------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/docker/telemetry/grafana/dashboards/rpc-performance.json b/docker/telemetry/grafana/dashboards/rpc-performance.json index 45074c0eac..283fab1d2e 100644 --- a/docker/telemetry/grafana/dashboards/rpc-performance.json +++ b/docker/telemetry/grafana/dashboards/rpc-performance.json @@ -332,7 +332,7 @@ "type": "timeseries", "gridPos": { "h": 8, - "w": 12, + "w": 24, "x": 0, "y": 32 }, @@ -377,8 +377,8 @@ "gridPos": { "h": 8, "w": 12, - "x": 12, - "y": 32 + "x": 0, + "y": 40 }, "options": { "tooltip": { diff --git a/docker/telemetry/grafana/dashboards/xrpld-job-queue.json b/docker/telemetry/grafana/dashboards/xrpld-job-queue.json index f19fdedce1..1c84c021ca 100644 --- a/docker/telemetry/grafana/dashboards/xrpld-job-queue.json +++ b/docker/telemetry/grafana/dashboards/xrpld-job-queue.json @@ -137,7 +137,7 @@ "type": "timeseries", "gridPos": { "h": 8, - "w": 12, + "w": 24, "x": 0, "y": 16 }, @@ -188,9 +188,9 @@ "type": "timeseries", "gridPos": { "h": 8, - "w": 12, - "x": 12, - "y": 16 + "w": 24, + "x": 0, + "y": 24 }, "options": { "tooltip": { @@ -241,7 +241,7 @@ "h": 8, "w": 12, "x": 0, - "y": 24 + "y": 32 }, "options": { "tooltip": { @@ -294,7 +294,7 @@ "h": 8, "w": 12, "x": 12, - "y": 24 + "y": 32 }, "options": { "tooltip": { @@ -347,7 +347,7 @@ "h": 8, "w": 24, "x": 0, - "y": 32 + "y": 40 }, "options": { "tooltip": { @@ -398,7 +398,7 @@ "h": 8, "w": 24, "x": 0, - "y": 40 + "y": 48 }, "options": { "tooltip": { diff --git a/docker/telemetry/grafana/dashboards/xrpld-rpc-perf-otel.json b/docker/telemetry/grafana/dashboards/xrpld-rpc-perf-otel.json index b7fc34fde1..fec0a5e6f9 100644 --- a/docker/telemetry/grafana/dashboards/xrpld-rpc-perf-otel.json +++ b/docker/telemetry/grafana/dashboards/xrpld-rpc-perf-otel.json @@ -74,7 +74,7 @@ "type": "timeseries", "gridPos": { "h": 8, - "w": 12, + "w": 24, "x": 0, "y": 8 }, @@ -124,9 +124,9 @@ "type": "timeseries", "gridPos": { "h": 8, - "w": 12, - "x": 12, - "y": 8 + "w": 24, + "x": 0, + "y": 16 }, "options": { "tooltip": { @@ -176,7 +176,7 @@ "h": 8, "w": 12, "x": 0, - "y": 16 + "y": 24 }, "options": { "tooltip": { @@ -226,9 +226,9 @@ "type": "timeseries", "gridPos": { "h": 8, - "w": 12, - "x": 12, - "y": 16 + "w": 24, + "x": 0, + "y": 32 }, "options": { "tooltip": { @@ -278,7 +278,7 @@ "h": 8, "w": 24, "x": 0, - "y": 24 + "y": 40 }, "options": { "tooltip": { @@ -346,7 +346,7 @@ "h": 8, "w": 12, "x": 0, - "y": 32 + "y": 48 }, "options": { "reduceOptions": { From ffafa801f6768c72f8fc741b975ee0cc384a1a39 Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Fri, 3 Jul 2026 19:09:30 +0100 Subject: [PATCH 2/7] ignore .env.* type files Signed-off-by: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 6bd34ece04..de59dd3712 100644 --- a/.gitignore +++ b/.gitignore @@ -86,3 +86,6 @@ __pycache__ # clangd cache /.cache + +# Env. file carrying environmental setup data for local or cloud runs. +.env.* From ebc355a4656bab5aa08249a638e3c06fd48c1403 Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Fri, 3 Jul 2026 19:10:56 +0100 Subject: [PATCH 3/7] feat(telemetry): tag traces with deployment tier at the collector Add a resource/tier processor so each collector stamps the deployment tier onto the signals it forwards, enabling a single Grafana stack to hold data from many collectors and filter by tier: - deployment.environment (upsert): the collector is authoritative for its environment (local/ci/test/prod). - xrpl.network.type (insert): the xrpld node already stamps its own chain, so the collector only fills this when absent, never overwriting a node's real network. Wired into the traces pipeline (the only pipeline on this branch); later phases extend it to metrics and logs as those pipelines appear. Co-Authored-By: Claude Opus 4.8 --- docker/telemetry/otel-collector-config.yaml | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/docker/telemetry/otel-collector-config.yaml b/docker/telemetry/otel-collector-config.yaml index 104f03dd7c..bb1b81e737 100644 --- a/docker/telemetry/otel-collector-config.yaml +++ b/docker/telemetry/otel-collector-config.yaml @@ -17,6 +17,25 @@ processors: batch: timeout: 1s send_batch_size: 100 + # Deployment-tier tagging. Each collector serves ONE environment and ONE + # network, so it stamps both onto every signal it forwards. This lets a + # single Grafana stack hold data from many collectors and filter by tier. + # - deployment.environment: the collector IS the environment (local, ci, + # test, prod), so it is authoritative -> upsert (overwrite). + # - xrpl.network.type: the xrpld node knows its own chain and already + # stamps this, so the collector only fills it when absent -> insert. + # This keeps a node's real network (e.g. a local node on mainnet) + # from being overwritten by a collector's default. + # Replace the placeholder values per collector; see docker/telemetry + # tier examples. + resource/tier: + attributes: + - key: deployment.environment + value: local + action: upsert + - key: xrpl.network.type + value: mainnet + action: insert exporters: debug: @@ -35,5 +54,5 @@ service: pipelines: traces: receivers: [otlp] - processors: [batch] + processors: [resource/tier, batch] exporters: [debug, otlp/tempo] From 3d4119a3ba08f16b750ef3840c5ec8544e999caf Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Fri, 3 Jul 2026 19:30:53 +0100 Subject: [PATCH 4/7] feat(telemetry): filter metrics by deployment tier across dashboards Extend the deployment-tier tagging to the metrics path and expose it in the dashboards so a single Grafana stack can be sliced by environment, network, and service: Collector (otel-collector-config.yaml): - prometheus exporter: enable resource_to_telemetry_conversion so resource attributes (deployment.environment, xrpl.network.type, service.name, service.instance.id) become Prometheus labels. - metrics pipeline: run resource/tier so statsd metrics are tagged too. - spanmetrics: add the tier keys to the resource-metrics grouping key so per-tier series stay grouped separately. Dashboards (5 files): - add $service_name, $deployment_environment, $xrpl_network_type template variables, named to match their Prometheus labels. - inject the matching label filters into every panel query that already filters by $node. Co-Authored-By: Claude Opus 4.8 --- .../grafana/dashboards/consensus-health.json | 112 ++++++++++++++---- .../grafana/dashboards/ledger-operations.json | 82 +++++++++++-- .../grafana/dashboards/peer-network.json | 68 ++++++++++- .../grafana/dashboards/rpc-performance.json | 86 ++++++++++++-- .../dashboards/transaction-overview.json | 108 +++++++++++++---- docker/telemetry/otel-collector-config.yaml | 17 ++- 6 files changed, 393 insertions(+), 80 deletions(-) diff --git a/docker/telemetry/grafana/dashboards/consensus-health.json b/docker/telemetry/grafana/dashboards/consensus-health.json index 5bb3a0796d..8fd4470100 100644 --- a/docker/telemetry/grafana/dashboards/consensus-health.json +++ b/docker/telemetry/grafana/dashboards/consensus-health.json @@ -29,14 +29,14 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", consensus_mode=~\"$consensus_mode\", span_name=\"consensus.accept\"}[5m])))", + "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", consensus_mode=~\"$consensus_mode\", span_name=\"consensus.accept\"}[5m])))", "legendFormat": "P95 Round Duration [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", consensus_mode=~\"$consensus_mode\", span_name=\"consensus.accept\"}[5m])))", + "expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", consensus_mode=~\"$consensus_mode\", span_name=\"consensus.accept\"}[5m])))", "legendFormat": "P50 Round Duration [{{exported_instance}}]" } ], @@ -75,7 +75,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", consensus_mode=~\"$consensus_mode\", span_name=\"consensus.proposal.send\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", consensus_mode=~\"$consensus_mode\", span_name=\"consensus.proposal.send\"}[5m]))", "legendFormat": "Proposals / Sec [{{exported_instance}}]" } ], @@ -114,7 +114,7 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", consensus_mode=~\"$consensus_mode\", span_name=\"consensus.ledger_close\"}[5m])))", + "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", consensus_mode=~\"$consensus_mode\", span_name=\"consensus.ledger_close\"}[5m])))", "legendFormat": "P95 Close Duration [{{exported_instance}}]" } ], @@ -153,7 +153,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", consensus_mode=~\"$consensus_mode\", span_name=\"consensus.validation.send\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", consensus_mode=~\"$consensus_mode\", span_name=\"consensus.validation.send\"}[5m]))", "legendFormat": "Validations / Sec [{{exported_instance}}]" } ], @@ -179,14 +179,14 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", consensus_mode=~\"$consensus_mode\", span_name=\"consensus.accept.apply\"}[5m])))", + "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", consensus_mode=~\"$consensus_mode\", span_name=\"consensus.accept.apply\"}[5m])))", "legendFormat": "P95 Apply Duration [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", consensus_mode=~\"$consensus_mode\", span_name=\"consensus.accept.apply\"}[5m])))", + "expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", consensus_mode=~\"$consensus_mode\", span_name=\"consensus.accept.apply\"}[5m])))", "legendFormat": "P50 Apply Duration [{{exported_instance}}]" } ], @@ -219,7 +219,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (close_time_correct, exported_instance) (rate(traces_span_metrics_calls_total{span_name=\"consensus.accept.apply\", consensus_mode=~\"$consensus_mode\", exported_instance=~\"$node\"}[$__rate_interval]))", + "expr": "sum by (close_time_correct, exported_instance) (rate(traces_span_metrics_calls_total{span_name=\"consensus.accept.apply\", consensus_mode=~\"$consensus_mode\", exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[$__rate_interval]))", "legendFormat": "Close Time Correct={{close_time_correct}} [{{exported_instance}}]" } ], @@ -258,7 +258,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (consensus_mode, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", consensus_mode=~\"$consensus_mode\", span_name=\"consensus.ledger_close\"}[5m]))", + "expr": "sum by (consensus_mode, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", consensus_mode=~\"$consensus_mode\", span_name=\"consensus.ledger_close\"}[5m]))", "legendFormat": "{{consensus_mode}} [{{exported_instance}}]" } ], @@ -297,14 +297,14 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"consensus.accept\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"consensus.accept\"}[5m]))", "legendFormat": "Accepts / Sec [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"consensus.ledger_close\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"consensus.ledger_close\"}[5m]))", "legendFormat": "Closes / Sec [{{exported_instance}}]" } ], @@ -343,14 +343,14 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"consensus.validation.send\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"consensus.validation.send\"}[5m]))", "legendFormat": "Validations / Sec [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"consensus.ledger_close\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"consensus.ledger_close\"}[5m]))", "legendFormat": "Closes / Sec [{{exported_instance}}]" } ], @@ -393,7 +393,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum(increase(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=\"consensus.accept\"}[5m])) by (le)", + "expr": "sum(increase(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"consensus.accept\"}[5m])) by (le)", "legendFormat": "{{le}}", "format": "heatmap" } @@ -686,7 +686,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (consensus_state) (increase(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"consensus.accept\", consensus_state!=\"\"}[5m]))", + "expr": "sum by (consensus_state) (increase(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"consensus.accept\", consensus_state!=\"\"}[5m]))", "legendFormat": "{{consensus_state}}" } ], @@ -718,14 +718,14 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"consensus.accept\", consensus_state=\"moved_on\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"consensus.accept\", consensus_state=\"moved_on\"}[5m]))", "legendFormat": "moved_on [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"consensus.accept\", consensus_state=\"expired\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"consensus.accept\", consensus_state=\"expired\"}[5m]))", "legendFormat": "expired [{{exported_instance}}]" } ], @@ -764,14 +764,14 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", consensus_mode=~\"$consensus_mode\", span_name=\"consensus.round\"}[5m])))", + "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", consensus_mode=~\"$consensus_mode\", span_name=\"consensus.round\"}[5m])))", "legendFormat": "P95 Round [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", consensus_mode=~\"$consensus_mode\", span_name=\"consensus.round\"}[5m])))", + "expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", consensus_mode=~\"$consensus_mode\", span_name=\"consensus.round\"}[5m])))", "legendFormat": "P50 Round [{{exported_instance}}]" } ], @@ -810,14 +810,14 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=\"consensus.phase.open\"}[5m])))", + "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"consensus.phase.open\"}[5m])))", "legendFormat": "P95 Open Phase [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=\"consensus.establish\"}[5m])))", + "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"consensus.establish\"}[5m])))", "legendFormat": "P95 Establish Phase [{{exported_instance}}]" } ], @@ -856,14 +856,14 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=\"consensus.update_positions\"}[5m])))", + "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"consensus.update_positions\"}[5m])))", "legendFormat": "P95 Update [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=\"consensus.update_positions\"}[5m])))", + "expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"consensus.update_positions\"}[5m])))", "legendFormat": "P50 Update [{{exported_instance}}]" } ], @@ -902,14 +902,14 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"consensus.check\", consensus_stalled=\"true\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"consensus.check\", consensus_stalled=\"true\"}[5m]))", "legendFormat": "Stalled [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"consensus.check\", consensus_stalled=\"false\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"consensus.check\", consensus_stalled=\"false\"}[5m]))", "legendFormat": "Not Stalled [{{exported_instance}}]" } ], @@ -948,7 +948,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (mode_new, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"consensus.mode_change\"}[5m]))", + "expr": "sum by (mode_new, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"consensus.mode_change\"}[5m]))", "legendFormat": "{{mode_new}} [{{exported_instance}}]" } ], @@ -971,6 +971,66 @@ "tags": ["rippled", "consensus", "telemetry"], "templating": { "list": [ + { + "name": "service_name", + "label": "Service", + "description": "Filter by service.name (e.g. xrpld, pratik-xrpld)", + "type": "query", + "query": "label_values(service_name)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "deployment_environment", + "label": "Environment", + "description": "Filter by deployment tier (local/ci/test/prod)", + "type": "query", + "query": "label_values(deployment_environment)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "xrpl_network_type", + "label": "Network", + "description": "Filter by XRPL network (mainnet/testnet/devnet)", + "type": "query", + "query": "label_values(xrpl_network_type)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, { "name": "node", "label": "Node", diff --git a/docker/telemetry/grafana/dashboards/ledger-operations.json b/docker/telemetry/grafana/dashboards/ledger-operations.json index 55e5de7716..2b09b084b6 100644 --- a/docker/telemetry/grafana/dashboards/ledger-operations.json +++ b/docker/telemetry/grafana/dashboards/ledger-operations.json @@ -29,7 +29,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"ledger.build\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"ledger.build\"}[5m]))", "legendFormat": "Builds / Sec [{{exported_instance}}]" } ], @@ -61,14 +61,14 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=\"ledger.build\"}[5m])))", + "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"ledger.build\"}[5m])))", "legendFormat": "P95 Build Duration [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=\"ledger.build\"}[5m])))", + "expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"ledger.build\"}[5m])))", "legendFormat": "P50 Build Duration [{{exported_instance}}]" } ], @@ -107,7 +107,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"ledger.validate\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"ledger.validate\"}[5m]))", "legendFormat": "Validations / Sec [{{exported_instance}}]" } ], @@ -142,7 +142,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum(increase(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=\"ledger.build\"}[5m])) by (le)", + "expr": "sum(increase(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"ledger.build\"}[5m])) by (le)", "legendFormat": "{{le}}", "format": "heatmap" } @@ -175,14 +175,14 @@ "datasource": { "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])))", + "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"tx.apply\"}[5m])))", "legendFormat": "P95 tx.apply [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=\"tx.apply\"}[5m])))", + "expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"tx.apply\"}[5m])))", "legendFormat": "P50 tx.apply [{{exported_instance}}]" } ], @@ -221,7 +221,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"tx.apply\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"tx.apply\"}[5m]))", "legendFormat": "tx.apply / Sec [{{exported_instance}}]" } ], @@ -260,7 +260,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"ledger.store\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"ledger.store\"}[5m]))", "legendFormat": "Stores / Sec [{{exported_instance}}]" } ], @@ -292,14 +292,14 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=\"ledger.build\"}[5m])))", + "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"ledger.build\"}[5m])))", "legendFormat": "P95 ledger.build [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=\"consensus.ledger_close\"}[5m])))", + "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"consensus.ledger_close\"}[5m])))", "legendFormat": "P95 consensus.ledger_close [{{exported_instance}}]" } ], @@ -322,6 +322,66 @@ "tags": ["rippled", "ledger", "telemetry"], "templating": { "list": [ + { + "name": "service_name", + "label": "Service", + "description": "Filter by service.name (e.g. xrpld, pratik-xrpld)", + "type": "query", + "query": "label_values(service_name)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "deployment_environment", + "label": "Environment", + "description": "Filter by deployment tier (local/ci/test/prod)", + "type": "query", + "query": "label_values(deployment_environment)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "xrpl_network_type", + "label": "Network", + "description": "Filter by XRPL network (mainnet/testnet/devnet)", + "type": "query", + "query": "label_values(xrpl_network_type)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, { "name": "node", "label": "Node", diff --git a/docker/telemetry/grafana/dashboards/peer-network.json b/docker/telemetry/grafana/dashboards/peer-network.json index 9907efd46d..597fed1e55 100644 --- a/docker/telemetry/grafana/dashboards/peer-network.json +++ b/docker/telemetry/grafana/dashboards/peer-network.json @@ -30,7 +30,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"peer.proposal.receive\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"peer.proposal.receive\"}[5m]))", "legendFormat": "Proposals Received / Sec [{{exported_instance}}]" } ], @@ -69,7 +69,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"peer.validation.receive\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"peer.validation.receive\"}[5m]))", "legendFormat": "Validations Received / Sec [{{exported_instance}}]" } ], @@ -108,7 +108,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (proposal_trusted, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", proposal_trusted=~\"$proposal_trusted\", span_name=\"peer.proposal.receive\"}[5m]))", + "expr": "sum by (proposal_trusted, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", proposal_trusted=~\"$proposal_trusted\", span_name=\"peer.proposal.receive\"}[5m]))", "legendFormat": "Trusted = {{proposal_trusted}} [{{exported_instance}}]" } ], @@ -140,7 +140,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (validation_trusted, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", validation_trusted=~\"$validation_trusted\", span_name=\"peer.validation.receive\"}[5m]))", + "expr": "sum by (validation_trusted, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", validation_trusted=~\"$validation_trusted\", span_name=\"peer.validation.receive\"}[5m]))", "legendFormat": "Trusted = {{validation_trusted}} [{{exported_instance}}]" } ], @@ -156,6 +156,66 @@ "tags": ["rippled", "peer", "telemetry"], "templating": { "list": [ + { + "name": "service_name", + "label": "Service", + "description": "Filter by service.name (e.g. xrpld, pratik-xrpld)", + "type": "query", + "query": "label_values(service_name)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "deployment_environment", + "label": "Environment", + "description": "Filter by deployment tier (local/ci/test/prod)", + "type": "query", + "query": "label_values(deployment_environment)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "xrpl_network_type", + "label": "Network", + "description": "Filter by XRPL network (mainnet/testnet/devnet)", + "type": "query", + "query": "label_values(xrpl_network_type)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, { "name": "node", "label": "Node", diff --git a/docker/telemetry/grafana/dashboards/rpc-performance.json b/docker/telemetry/grafana/dashboards/rpc-performance.json index 8931a025cf..b495146e2f 100644 --- a/docker/telemetry/grafana/dashboards/rpc-performance.json +++ b/docker/telemetry/grafana/dashboards/rpc-performance.json @@ -29,7 +29,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (command, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", command=~\"$command\", span_name=~\"rpc.command.*\"}[5m]))", + "expr": "sum by (command, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", command=~\"$command\", span_name=~\"rpc.command.*\"}[5m]))", "legendFormat": "{{command}} [{{exported_instance}}]" } ], @@ -68,7 +68,7 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.95, sum by (le, command, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", command=~\"$command\", span_name=~\"rpc.command.*\"}[5m])))", + "expr": "histogram_quantile(0.95, sum by (le, command, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", command=~\"$command\", span_name=~\"rpc.command.*\"}[5m])))", "legendFormat": "P95 {{command}} [{{exported_instance}}]" } ], @@ -107,7 +107,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (command, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", command=~\"$command\", span_name=~\"rpc.command.*\", status_code=\"STATUS_CODE_ERROR\"}[5m])) / sum by (command, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", command=~\"$command\", span_name=~\"rpc.command.*\"}[5m])) * 100", + "expr": "sum by (command, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", command=~\"$command\", span_name=~\"rpc.command.*\", status_code=\"STATUS_CODE_ERROR\"}[5m])) / sum by (command, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", command=~\"$command\", span_name=~\"rpc.command.*\"}[5m])) * 100", "legendFormat": "{{command}} [{{exported_instance}}]" } ], @@ -159,7 +159,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum(increase(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", command=~\"$command\", span_name=~\"rpc.command.*\"}[5m])) by (le)", + "expr": "sum(increase(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", command=~\"$command\", span_name=~\"rpc.command.*\"}[5m])) by (le)", "legendFormat": "{{le}}", "format": "heatmap" } @@ -191,14 +191,14 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", command=~\"$command\", span_name=\"rpc.http_request\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", command=~\"$command\", span_name=\"rpc.http_request\"}[5m]))", "legendFormat": "rpc.http_request / Sec [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", command=~\"$command\", span_name=\"rpc.process\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", command=~\"$command\", span_name=\"rpc.process\"}[5m]))", "legendFormat": "rpc.process / Sec [{{exported_instance}}]" } ], @@ -237,14 +237,14 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", command=~\"$command\", span_name=~\"rpc.command.*\", status_code=\"STATUS_CODE_UNSET\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", command=~\"$command\", span_name=~\"rpc.command.*\", status_code=\"STATUS_CODE_UNSET\"}[5m]))", "legendFormat": "Success [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", command=~\"$command\", span_name=~\"rpc.command.*\", status_code=\"STATUS_CODE_ERROR\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", command=~\"$command\", span_name=~\"rpc.command.*\", status_code=\"STATUS_CODE_ERROR\"}[5m]))", "legendFormat": "Error [{{exported_instance}}]" } ], @@ -283,7 +283,7 @@ "datasource": { "type": "prometheus" }, - "expr": "topk(10, sum by (command, exported_instance) (increase(traces_span_metrics_calls_total{exported_instance=~\"$node\", command=~\"$command\", span_name=~\"rpc.command.*\"}[5m])))", + "expr": "topk(10, sum by (command, exported_instance) (increase(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", command=~\"$command\", span_name=~\"rpc.command.*\"}[5m])))", "legendFormat": "{{command}} [{{exported_instance}}]" } ], @@ -315,7 +315,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", command=~\"$command\", span_name=\"rpc.ws_message\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", command=~\"$command\", span_name=\"rpc.ws_message\"}[5m]))", "legendFormat": "WS Messages / Sec [{{exported_instance}}]" } ], @@ -352,7 +352,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (load_type) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=~\"rpc.command.*\", load_type!=\"\"}[5m]))", + "expr": "sum by (load_type) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=~\"rpc.command.*\", load_type!=\"\"}[5m]))", "legendFormat": "{{load_type}}" } ], @@ -391,14 +391,14 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"rpc.process\", is_batch=\"true\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"rpc.process\", is_batch=\"true\"}[5m]))", "legendFormat": "Batch [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"rpc.process\", is_batch=\"false\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"rpc.process\", is_batch=\"false\"}[5m]))", "legendFormat": "Single [{{exported_instance}}]" } ], @@ -421,6 +421,66 @@ "tags": ["rippled", "rpc", "telemetry"], "templating": { "list": [ + { + "name": "service_name", + "label": "Service", + "description": "Filter by service.name (e.g. xrpld, pratik-xrpld)", + "type": "query", + "query": "label_values(service_name)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "deployment_environment", + "label": "Environment", + "description": "Filter by deployment tier (local/ci/test/prod)", + "type": "query", + "query": "label_values(deployment_environment)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "xrpl_network_type", + "label": "Network", + "description": "Filter by XRPL network (mainnet/testnet/devnet)", + "type": "query", + "query": "label_values(xrpl_network_type)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, { "name": "node", "label": "Node", diff --git a/docker/telemetry/grafana/dashboards/transaction-overview.json b/docker/telemetry/grafana/dashboards/transaction-overview.json index 405e1564e8..f142f682a7 100644 --- a/docker/telemetry/grafana/dashboards/transaction-overview.json +++ b/docker/telemetry/grafana/dashboards/transaction-overview.json @@ -29,14 +29,14 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"tx.process\", tx_type=~\"$tx_type\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"tx.process\", tx_type=~\"$tx_type\"}[5m]))", "legendFormat": "tx.process / Sec [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"tx.receive\", tx_type=~\"$tx_type\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"tx.receive\", tx_type=~\"$tx_type\"}[5m]))", "legendFormat": "tx.receive / Sec [{{exported_instance}}]" } ], @@ -80,14 +80,14 @@ "datasource": { "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])))", + "expr": "histogram_quantile(0.95, sum by (le, tx_type, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"tx.process\", tx_type=~\"$tx_type\"}[5m])))", "legendFormat": "P95 {{tx_type}} [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.50, 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])))", + "expr": "histogram_quantile(0.50, sum by (le, tx_type, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"tx.process\", tx_type=~\"$tx_type\"}[5m])))", "legendFormat": "P50 {{tx_type}} [{{exported_instance}}]" } ], @@ -126,7 +126,7 @@ "datasource": { "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]))", + "expr": "sum by (local, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", local=~\"$tx_origin\", span_name=\"tx.process\", tx_type=~\"$tx_type\"}[5m]))", "legendFormat": "Local = {{local}} [{{exported_instance}}]" } ] @@ -152,7 +152,7 @@ "datasource": { "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]))", + "expr": "sum by (suppressed, exported_instance) (rate(traces_span_metrics_calls_total{span_name=\"tx.receive\", tx_type=~\"$tx_type\", exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[$__rate_interval]))", "legendFormat": "Suppressed={{suppressed}} [{{exported_instance}}]" } ], @@ -195,7 +195,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum(increase(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=\"tx.process\", tx_type=~\"$tx_type\"}[5m])) by (le)", + "expr": "sum(increase(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"tx.process\", tx_type=~\"$tx_type\"}[5m])) by (le)", "legendFormat": "{{le}}", "format": "heatmap" } @@ -227,14 +227,14 @@ "datasource": { "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])))", + "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"tx.apply\"}[5m])))", "legendFormat": "P95 tx.apply [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=\"tx.apply\"}[5m])))", + "expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"tx.apply\"}[5m])))", "legendFormat": "P50 tx.apply [{{exported_instance}}]" } ], @@ -273,7 +273,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"tx.receive\", tx_type=~\"$tx_type\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"tx.receive\", tx_type=~\"$tx_type\"}[5m]))", "legendFormat": "tx.receive / Sec [{{exported_instance}}]" } ], @@ -312,7 +312,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"tx.apply\", status_code=\"STATUS_CODE_ERROR\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"tx.apply\", status_code=\"STATUS_CODE_ERROR\"}[5m]))", "legendFormat": "Failed / Sec [{{exported_instance}}]" } ], @@ -365,7 +365,7 @@ "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]))", + "expr": "sum by (tx_type) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"tx.process\", tx_type=~\"$tx_type\"}[5m]))", "legendFormat": "{{tx_type}}" } ], @@ -409,7 +409,7 @@ "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]))", + "expr": "sum by (tx_type, ter_result) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"tx.process\", tx_type=~\"$tx_type\", ter_result=~\"$ter_result\", ter_result!=\"tesSUCCESS\"}[5m]))", "legendFormat": "{{tx_type}}: {{ter_result}}" } ], @@ -452,7 +452,7 @@ "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]))", + "expr": "sum by (txq_status) (increase(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"txq.accept_tx\", txq_status=~\"$txq_status\"}[5m]))", "legendFormat": "{{txq_status}}" } ], @@ -489,7 +489,7 @@ "datasource": { "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])))", + "expr": "histogram_quantile(0.95, sum by (le, tx_type, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"tx.transactor\", tx_type=~\"$tx_type\"}[5m])))", "legendFormat": "P95 {{tx_type}} [{{exported_instance}}]" } ], @@ -528,7 +528,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (tx_type, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"txq.enqueue\"}[5m]))", + "expr": "sum by (tx_type, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"txq.enqueue\"}[5m]))", "legendFormat": "{{tx_type}} [{{exported_instance}}]" } ], @@ -567,7 +567,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"txq.apply_direct\"}[5m])) / clamp_min(sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"txq.apply_direct\"}[5m])) + sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"txq.enqueue\"}[5m])), 1)", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"txq.apply_direct\"}[5m])) / clamp_min(sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"txq.apply_direct\"}[5m])) + sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"txq.enqueue\"}[5m])), 1)", "legendFormat": "Direct-Apply Fraction [{{exported_instance}}]" } ], @@ -606,14 +606,14 @@ "datasource": { "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])))", + "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"txq.accept\"}[5m])))", "legendFormat": "P95 Drain [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=\"txq.accept\"}[5m])))", + "expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"txq.accept\"}[5m])))", "legendFormat": "P50 Drain [{{exported_instance}}]" } ], @@ -652,7 +652,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"txq.cleanup\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"txq.cleanup\"}[5m]))", "legendFormat": "Cleanups / Sec [{{exported_instance}}]" } ], @@ -696,7 +696,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": "sum by (stage, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=~\"tx.preflight|tx.preclaim|tx.transactor\", stage=~\"$stage\"}[5m]))", "legendFormat": "{{stage}} [{{exported_instance}}]" } ], @@ -740,7 +740,7 @@ "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])))", + "expr": "histogram_quantile(0.95, sum by (le, stage, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=~\"tx.preflight|tx.preclaim|tx.transactor\", stage=~\"$stage\"}[5m])))", "legendFormat": "P95 {{stage}} [{{exported_instance}}]" } ], @@ -784,7 +784,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": "sum by (stage, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=~\"tx.preflight|tx.preclaim|tx.transactor\", stage=~\"$stage\", ter_result!~\"tesSUCCESS|\"}[5m]))", "legendFormat": "{{stage}} [{{exported_instance}}]" } ], @@ -828,7 +828,7 @@ "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])))", + "expr": "histogram_quantile(0.95, sum by (le, tx_type, stage, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=~\"tx.preflight|tx.preclaim|tx.transactor\", tx_type=~\"$tx_type\", stage=~\"$stage\"}[5m])))", "legendFormat": "P95 {{tx_type}} {{stage}} [{{exported_instance}}]" } ], @@ -851,6 +851,66 @@ "tags": ["rippled", "transactions", "telemetry"], "templating": { "list": [ + { + "name": "service_name", + "label": "Service", + "description": "Filter by service.name (e.g. xrpld, pratik-xrpld)", + "type": "query", + "query": "label_values(service_name)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "deployment_environment", + "label": "Environment", + "description": "Filter by deployment tier (local/ci/test/prod)", + "type": "query", + "query": "label_values(deployment_environment)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "xrpl_network_type", + "label": "Network", + "description": "Filter by XRPL network (mainnet/testnet/devnet)", + "type": "query", + "query": "label_values(xrpl_network_type)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, { "name": "node", "label": "Node", diff --git a/docker/telemetry/otel-collector-config.yaml b/docker/telemetry/otel-collector-config.yaml index e956f1017f..049670476e 100644 --- a/docker/telemetry/otel-collector-config.yaml +++ b/docker/telemetry/otel-collector-config.yaml @@ -60,10 +60,16 @@ processors: connectors: spanmetrics: - # Expose service.instance.id (node public key) as a Prometheus label so - # Grafana dashboards can filter metrics by individual node. + # Resource attributes that define the resource-metrics grouping key. + # All resource attributes are propagated onto the output metrics + # regardless; promotion to Prometheus labels is handled by the + # prometheus exporter's resource_to_telemetry_conversion. Listing the + # per-node id and the deployment-tier keys keeps series from distinct + # nodes/tiers grouped separately. resource_metrics_key_attributes: - service.instance.id + - deployment.environment + - xrpl.network.type histogram: explicit: buckets: [1ms, 5ms, 10ms, 25ms, 50ms, 100ms, 250ms, 500ms, 1s, 5s] @@ -100,6 +106,12 @@ exporters: insecure: true prometheus: endpoint: 0.0.0.0:8889 + # Promote resource attributes (deployment.environment, xrpl.network.type, + # service.name, service.instance.id) to Prometheus labels. Without this + # the tier attributes stamped by resource/tier stay on the resource and + # never reach the metric series, so dashboards could not filter by them. + resource_to_telemetry_conversion: + enabled: true extensions: health_check: @@ -114,4 +126,5 @@ service: exporters: [debug, otlp/tempo, spanmetrics] metrics: receivers: [spanmetrics, statsd] + processors: [resource/tier] exporters: [prometheus] From f55f8c59fc4083b67bc12db18363739e6a11db24 Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Fri, 3 Jul 2026 19:40:59 +0100 Subject: [PATCH 5/7] feat(telemetry): stamp service.name and network on native metrics The native OTel metrics path hard-coded service.name="xrpld" and stamped no network attribute, while traces stamped a configurable service.name and xrpl.network.type. Metrics therefore could not be filtered by service or network. Align the two paths: - OTelCollector::New / OTelCollectorImp gain serviceName + networkType params. service.name uses the configured value (default "xrpld" when unset, preserving today's behavior); xrpl.network.type is stamped when provided. The key is a string literal because beast/insight sits below the telemetry module and cannot include its SpanNames const. - CollectorManager reads service_name from [insight], falling back to the [telemetry] value, and receives the network type from the caller. - Application derives the network type once via the shared telemetry::networkTypeFromId, now declared in Telemetry.h and moved out of an anonymous namespace so the trace and metric paths reuse a single 0/1/2 -> mainnet/testnet/devnet mapping (no duplication). Dashboards (5 system-* files): add $service_name, $deployment_environment, $xrpl_network_type template variables and wire them into every panel query that filters by $node. Co-Authored-By: Claude Opus 4.8 --- .../dashboards/system-ledger-data-sync.json | 138 +++++++++++----- .../dashboards/system-network-traffic.json | 112 ++++++++++--- .../dashboards/system-node-health.json | 152 ++++++++++++------ .../system-overlay-traffic-detail.json | 132 ++++++++++----- .../dashboards/system-rpc-pathfinding.json | 104 +++++++++--- include/xrpl/beast/insight/OTelCollector.h | 10 ++ include/xrpl/telemetry/Telemetry.h | 11 ++ src/libxrpl/beast/insight/OTelCollector.cpp | 35 +++- src/libxrpl/telemetry/TelemetryConfig.cpp | 10 +- src/xrpld/app/main/Application.cpp | 6 + src/xrpld/app/main/CollectorManager.cpp | 26 ++- src/xrpld/app/main/CollectorManager.h | 18 ++- 12 files changed, 568 insertions(+), 186 deletions(-) diff --git a/docker/telemetry/grafana/dashboards/system-ledger-data-sync.json b/docker/telemetry/grafana/dashboards/system-ledger-data-sync.json index 02e6083dea..28610ecc40 100644 --- a/docker/telemetry/grafana/dashboards/system-ledger-data-sync.json +++ b/docker/telemetry/grafana/dashboards/system-ledger-data-sync.json @@ -30,56 +30,56 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_ledger_data_get_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_ledger_data_get_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Ledger Data Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_ledger_data_share_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_ledger_data_share_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Ledger Data Share [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_ledger_data_Transaction_Set_candidate_get_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_ledger_data_Transaction_Set_candidate_get_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "TX Set Candidate Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_ledger_data_Transaction_Set_candidate_share_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_ledger_data_Transaction_Set_candidate_share_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "TX Set Candidate Share [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_ledger_data_Transaction_Node_get_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_ledger_data_Transaction_Node_get_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "TX Node Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_ledger_data_Transaction_Node_share_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_ledger_data_Transaction_Node_share_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "TX Node Share [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_ledger_data_Account_State_Node_get_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_ledger_data_Account_State_Node_get_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Account State Node Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_ledger_data_Account_State_Node_share_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_ledger_data_Account_State_Node_share_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Account State Node Share [{{exported_instance}}]" } ], @@ -118,56 +118,56 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_ledger_share_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_ledger_share_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Ledger Share In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_ledger_get_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_ledger_get_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Ledger Get In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_ledger_Transaction_Set_candidate_share_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_ledger_Transaction_Set_candidate_share_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "TX Set Candidate Share [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_ledger_Transaction_Set_candidate_get_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_ledger_Transaction_Set_candidate_get_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "TX Set Candidate Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_ledger_Transaction_node_share_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_ledger_Transaction_node_share_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "TX Node Share [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_ledger_Transaction_node_get_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_ledger_Transaction_node_get_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "TX Node Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_ledger_Account_State_node_share_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_ledger_Account_State_node_share_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Account State Share [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_ledger_Account_State_node_get_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_ledger_Account_State_node_get_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Account State Get [{{exported_instance}}]" } ], @@ -206,56 +206,56 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_Ledger_get_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_Ledger_get_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Ledger Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_Ledger_share_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_Ledger_share_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Ledger Share [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_Transaction_get_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_Transaction_get_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Transaction Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_Transaction_share_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_Transaction_share_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Transaction Share [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_Transaction_node_get_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_Transaction_node_get_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "TX Node Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_Transaction_node_share_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_Transaction_node_share_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "TX Node Share [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_Account_State_node_get_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_Account_State_node_get_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Account State Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_Account_State_node_share_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_Account_State_node_share_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Account State Share [{{exported_instance}}]" } ], @@ -294,49 +294,49 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_CAS_get_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_CAS_get_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "CAS Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_CAS_share_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_CAS_share_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "CAS Share [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_Fetch_Pack_share_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_Fetch_Pack_share_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Fetch Pack Share [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_Fetch_Pack_get_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_Fetch_Pack_get_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Fetch Pack Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_Transactions_get_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_Transactions_get_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Transactions Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_get_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_get_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Aggregate Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_share_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_share_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Aggregate Share [{{exported_instance}}]" } ], @@ -375,49 +375,49 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_Ledger_get_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_Ledger_get_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Ledger Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_Transaction_get_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_Transaction_get_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Transaction Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_Transaction_node_get_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_Transaction_node_get_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "TX Node Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_Account_State_node_get_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_Account_State_node_get_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Account State Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_CAS_get_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_CAS_get_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "CAS Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_Fetch_Pack_get_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_Fetch_Pack_get_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Fetch Pack Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_getobject_Transactions_get_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_getobject_Transactions_get_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Transactions Get [{{exported_instance}}]" } ], @@ -463,7 +463,7 @@ "datasource": { "type": "prometheus" }, - "expr": "topk(20, {exported_instance=~\"$node\", __name__=~\"xrpld_.*_Bytes_In\", __name__!~\"xrpld_total_.*\"})", + "expr": "topk(20, {exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", __name__=~\"xrpld_.*_Bytes_In\", __name__!~\"xrpld_total_.*\"})", "legendFormat": "{{__name__}} [{{exported_instance}}]" } ], @@ -496,6 +496,66 @@ "tags": ["rippled", "statsd", "ledger", "sync", "telemetry"], "templating": { "list": [ + { + "name": "service_name", + "label": "Service", + "description": "Filter by service.name (e.g. xrpld, pratik-xrpld)", + "type": "query", + "query": "label_values(service_name)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "deployment_environment", + "label": "Environment", + "description": "Filter by deployment tier (local/ci/test/prod)", + "type": "query", + "query": "label_values(deployment_environment)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "xrpl_network_type", + "label": "Network", + "description": "Filter by XRPL network (mainnet/testnet/devnet)", + "type": "query", + "query": "label_values(xrpl_network_type)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, { "name": "node", "label": "Node", diff --git a/docker/telemetry/grafana/dashboards/system-network-traffic.json b/docker/telemetry/grafana/dashboards/system-network-traffic.json index d915e766e6..b63901ed7f 100644 --- a/docker/telemetry/grafana/dashboards/system-network-traffic.json +++ b/docker/telemetry/grafana/dashboards/system-network-traffic.json @@ -30,14 +30,14 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_Peer_Finder_Active_Inbound_Peers{exported_instance=~\"$node\"}", + "expr": "xrpld_Peer_Finder_Active_Inbound_Peers{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Inbound Peers [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_Peer_Finder_Active_Outbound_Peers{exported_instance=~\"$node\"}", + "expr": "xrpld_Peer_Finder_Active_Outbound_Peers{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Outbound Peers [{{exported_instance}}]" } ], @@ -76,7 +76,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_Overlay_Peer_Disconnects{exported_instance=~\"$node\"}", + "expr": "xrpld_Overlay_Peer_Disconnects{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Disconnects [{{exported_instance}}]" } ], @@ -115,14 +115,14 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_total_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_total_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Bytes In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_total_Bytes_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_total_Bytes_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Bytes Out [{{exported_instance}}]" } ], @@ -161,14 +161,14 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_total_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_total_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Messages In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_total_Messages_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_total_Messages_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Messages Out [{{exported_instance}}]" } ], @@ -207,21 +207,21 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_transactions_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_transactions_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "TX Messages In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_transactions_Messages_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_transactions_Messages_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "TX Messages Out [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_transactions_duplicate_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_transactions_duplicate_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "TX Duplicate In [{{exported_instance}}]" } ], @@ -260,28 +260,28 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_proposals_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_proposals_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Proposals In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_proposals_Messages_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_proposals_Messages_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Proposals Out [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_proposals_untrusted_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_proposals_untrusted_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Untrusted In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_proposals_duplicate_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_proposals_duplicate_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Duplicate In [{{exported_instance}}]" } ], @@ -320,28 +320,28 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_validations_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_validations_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Validations In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_validations_Messages_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_validations_Messages_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Validations Out [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_validations_untrusted_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_validations_untrusted_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Untrusted In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_validations_duplicate_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_validations_duplicate_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Duplicate In [{{exported_instance}}]" } ], @@ -380,7 +380,7 @@ "datasource": { "type": "prometheus" }, - "expr": "topk(10, {exported_instance=~\"$node\", __name__=~\"xrpld_.*_Bytes_In\", __name__!~\"xrpld_total_.*\"})", + "expr": "topk(10, {exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", __name__=~\"xrpld_.*_Bytes_In\", __name__!~\"xrpld_total_.*\"})", "legendFormat": "{{__name__}} [{{exported_instance}}]" } ], @@ -677,42 +677,42 @@ "datasource": { "type": "prometheus" }, - "expr": "rate(xrpld_transactions_duplicate_Bytes_In{exported_instance=~\"$node\"}[5m])", + "expr": "rate(xrpld_transactions_duplicate_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])", "legendFormat": "TX Duplicate In" }, { "datasource": { "type": "prometheus" }, - "expr": "rate(xrpld_transactions_duplicate_Bytes_Out{exported_instance=~\"$node\"}[5m])", + "expr": "rate(xrpld_transactions_duplicate_Bytes_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])", "legendFormat": "TX Duplicate Out" }, { "datasource": { "type": "prometheus" }, - "expr": "rate(xrpld_proposals_duplicate_Bytes_In{exported_instance=~\"$node\"}[5m])", + "expr": "rate(xrpld_proposals_duplicate_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])", "legendFormat": "Proposals Duplicate In" }, { "datasource": { "type": "prometheus" }, - "expr": "rate(xrpld_proposals_duplicate_Bytes_Out{exported_instance=~\"$node\"}[5m])", + "expr": "rate(xrpld_proposals_duplicate_Bytes_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])", "legendFormat": "Proposals Duplicate Out" }, { "datasource": { "type": "prometheus" }, - "expr": "rate(xrpld_validations_duplicate_Bytes_In{exported_instance=~\"$node\"}[5m])", + "expr": "rate(xrpld_validations_duplicate_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])", "legendFormat": "Validations Duplicate In" }, { "datasource": { "type": "prometheus" }, - "expr": "rate(xrpld_validations_duplicate_Bytes_Out{exported_instance=~\"$node\"}[5m])", + "expr": "rate(xrpld_validations_duplicate_Bytes_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])", "legendFormat": "Validations Duplicate Out" } ], @@ -751,7 +751,7 @@ "datasource": { "type": "prometheus" }, - "expr": "topk(15, rate({__name__=~\"xrpld_.*_Bytes_In\", __name__!~\"xrpld_total_{exported_instance=~\"$node\"}.*\"}[5m]))", + "expr": "topk(15, rate({__name__=~\"xrpld_.*_Bytes_In\", __name__!~\"xrpld_total_{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}.*\"}[5m]))", "legendFormat": "{{__name__}}" } ], @@ -774,6 +774,66 @@ "tags": ["rippled", "statsd", "network", "telemetry"], "templating": { "list": [ + { + "name": "service_name", + "label": "Service", + "description": "Filter by service.name (e.g. xrpld, pratik-xrpld)", + "type": "query", + "query": "label_values(service_name)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "deployment_environment", + "label": "Environment", + "description": "Filter by deployment tier (local/ci/test/prod)", + "type": "query", + "query": "label_values(deployment_environment)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "xrpl_network_type", + "label": "Network", + "description": "Filter by XRPL network (mainnet/testnet/devnet)", + "type": "query", + "query": "label_values(xrpl_network_type)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, { "name": "node", "label": "Node", diff --git a/docker/telemetry/grafana/dashboards/system-node-health.json b/docker/telemetry/grafana/dashboards/system-node-health.json index e82643f347..1ee48df3a3 100644 --- a/docker/telemetry/grafana/dashboards/system-node-health.json +++ b/docker/telemetry/grafana/dashboards/system-node-health.json @@ -30,7 +30,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_LedgerMaster_Validated_Ledger_Age{exported_instance=~\"$node\"}", + "expr": "xrpld_LedgerMaster_Validated_Ledger_Age{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Validated Age [{{exported_instance}}]" } ], @@ -78,7 +78,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_LedgerMaster_Published_Ledger_Age{exported_instance=~\"$node\"}", + "expr": "xrpld_LedgerMaster_Published_Ledger_Age{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Published Age [{{exported_instance}}]" } ], @@ -126,35 +126,35 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_State_Accounting_Full_duration{exported_instance=~\"$node\"}", + "expr": "xrpld_State_Accounting_Full_duration{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Full [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_State_Accounting_Tracking_duration{exported_instance=~\"$node\"}", + "expr": "xrpld_State_Accounting_Tracking_duration{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Tracking [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_State_Accounting_Syncing_duration{exported_instance=~\"$node\"}", + "expr": "xrpld_State_Accounting_Syncing_duration{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Syncing [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_State_Accounting_Connected_duration{exported_instance=~\"$node\"}", + "expr": "xrpld_State_Accounting_Connected_duration{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Connected [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_State_Accounting_Disconnected_duration{exported_instance=~\"$node\"}", + "expr": "xrpld_State_Accounting_Disconnected_duration{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Disconnected [{{exported_instance}}]" } ], @@ -193,35 +193,35 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_State_Accounting_Full_transitions{exported_instance=~\"$node\"}", + "expr": "xrpld_State_Accounting_Full_transitions{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Full [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_State_Accounting_Tracking_transitions{exported_instance=~\"$node\"}", + "expr": "xrpld_State_Accounting_Tracking_transitions{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Tracking [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_State_Accounting_Syncing_transitions{exported_instance=~\"$node\"}", + "expr": "xrpld_State_Accounting_Syncing_transitions{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Syncing [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_State_Accounting_Connected_transitions{exported_instance=~\"$node\"}", + "expr": "xrpld_State_Accounting_Connected_transitions{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Connected [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_State_Accounting_Disconnected_transitions{exported_instance=~\"$node\"}", + "expr": "xrpld_State_Accounting_Disconnected_transitions{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Disconnected [{{exported_instance}}]" } ], @@ -260,14 +260,14 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_ios_latency_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_ios_latency_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "P95 I/O Latency [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(xrpld_ios_latency_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(xrpld_ios_latency_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "P50 I/O Latency [{{exported_instance}}]" } ], @@ -306,7 +306,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_job_count{exported_instance=~\"$node\"}", + "expr": "xrpld_job_count{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Job Queue Depth [{{exported_instance}}]" } ], @@ -345,7 +345,7 @@ "datasource": { "type": "prometheus" }, - "expr": "rate(xrpld_ledger_fetches_total{exported_instance=~\"$node\"}[5m])", + "expr": "rate(xrpld_ledger_fetches_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])", "legendFormat": "Fetches / Sec [{{exported_instance}}]" } ], @@ -377,7 +377,7 @@ "datasource": { "type": "prometheus" }, - "expr": "rate(xrpld_ledger_history_mismatch_total{exported_instance=~\"$node\"}[5m])", + "expr": "rate(xrpld_ledger_history_mismatch_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])", "legendFormat": "Mismatches / Sec [{{exported_instance}}]" } ], @@ -433,77 +433,77 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_acceptLedger_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_acceptLedger_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Accept Ledger [{{quantile}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_advanceLedger_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_advanceLedger_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Advance Ledger [{{quantile}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_transaction_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_transaction_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Transaction [{{quantile}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_writeObjects_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_writeObjects_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Write Objects [{{quantile}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_heartbeat_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_heartbeat_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Heartbeat [{{quantile}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_sweep_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_sweep_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Sweep [{{quantile}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_trustedValidation_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_trustedValidation_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Trusted Validation [{{quantile}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_trustedProposal_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_trustedProposal_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Trusted Proposal [{{quantile}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_publishNewLedger_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_publishNewLedger_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Publish New Ledger [{{quantile}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_clientRPC_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_clientRPC_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Client RPC [{{quantile}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_ledgerData_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_ledgerData_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Ledger Data [{{quantile}}]" } ], @@ -542,77 +542,77 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_acceptLedger_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_acceptLedger_q_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Accept Ledger [{{quantile}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_advanceLedger_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_advanceLedger_q_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Advance Ledger [{{quantile}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_transaction_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_transaction_q_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Transaction [{{quantile}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_writeObjects_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_writeObjects_q_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Write Objects [{{quantile}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_heartbeat_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_heartbeat_q_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Heartbeat [{{quantile}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_sweep_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_sweep_q_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Sweep [{{quantile}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_trustedValidation_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_trustedValidation_q_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Trusted Validation [{{quantile}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_trustedProposal_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_trustedProposal_q_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Trusted Proposal [{{quantile}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_publishNewLedger_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_publishNewLedger_q_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Publish New Ledger [{{quantile}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_clientRPC_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_clientRPC_q_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Client RPC [{{quantile}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_ledgerData_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_ledgerData_q_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "Ledger Data [{{quantile}}]" } ], @@ -651,7 +651,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_Node_family_full_below_cache_size{exported_instance=~\"$node\"}", + "expr": "xrpld_Node_family_full_below_cache_size{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "FullBelowCache Size" } ], @@ -690,7 +690,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_Node_family_full_below_cache_hit_rate{exported_instance=~\"$node\"}", + "expr": "xrpld_Node_family_full_below_cache_hit_rate{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Hit Rate" } ], @@ -740,7 +740,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_LedgerMaster_Published_Ledger_Age{exported_instance=~\"$node\"} - xrpld_LedgerMaster_Validated_Ledger_Age{exported_instance=~\"$node\"}", + "expr": "xrpld_LedgerMaster_Published_Ledger_Age{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"} - xrpld_LedgerMaster_Validated_Ledger_Age{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Publish Gap" } ], @@ -788,14 +788,14 @@ "datasource": { "type": "prometheus" }, - "expr": "rate(xrpld_State_Accounting_Full_duration{exported_instance=~\"$node\"}[5m]) / 1000000", + "expr": "rate(xrpld_State_Accounting_Full_duration{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m]) / 1000000", "legendFormat": "Full Mode Rate" }, { "datasource": { "type": "prometheus" }, - "expr": "rate(xrpld_State_Accounting_Tracking_duration{exported_instance=~\"$node\"}[5m]) / 1000000", + "expr": "rate(xrpld_State_Accounting_Tracking_duration{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m]) / 1000000", "legendFormat": "Tracking Mode Rate" } ], @@ -834,7 +834,7 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, __name__) (rate({__name__=~\"xrpld_(makeFetchPack|publishAcqLedger|untrustedValidation|manifest|localTransaction|ledgerReplayRequest|ledgerRequest|untrustedProposal|ledgerReplayTask|ledgerData|clientCommand|clientSubscribe|clientFeeChange|clientConsensus|clientAccountHistory|clientRPC|clientWebsocket|RPC|updatePaths|transaction|batch|advanceLedger|publishNewLedger|fetchTxnData|writeAhead|trustedValidation|writeObjects|acceptLedger|trustedProposal|sweep|clusterReport|heartbeat|administration|handleHaveTransactions|doTransactions)_milliseconds_bucket\", exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, __name__) (rate({__name__=~\"xrpld_(makeFetchPack|publishAcqLedger|untrustedValidation|manifest|localTransaction|ledgerReplayRequest|ledgerRequest|untrustedProposal|ledgerReplayTask|ledgerData|clientCommand|clientSubscribe|clientFeeChange|clientConsensus|clientAccountHistory|clientRPC|clientWebsocket|RPC|updatePaths|transaction|batch|advanceLedger|publishNewLedger|fetchTxnData|writeAhead|trustedValidation|writeObjects|acceptLedger|trustedProposal|sweep|clusterReport|heartbeat|administration|handleHaveTransactions|doTransactions)_milliseconds_bucket\", exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "{{__name__}}" } ], @@ -873,7 +873,7 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile($quantile, sum by (le, __name__) (rate({__name__=~\"xrpld_(makeFetchPack_q|publishAcqLedger_q|untrustedValidation_q|manifest_q|localTransaction_q|ledgerReplayRequest_q|ledgerRequest_q|untrustedProposal_q|ledgerReplayTask_q|ledgerData_q|clientCommand_q|clientSubscribe_q|clientFeeChange_q|clientConsensus_q|clientAccountHistory_q|clientRPC_q|clientWebsocket_q|RPC_q|updatePaths_q|transaction_q|batch_q|advanceLedger_q|publishNewLedger_q|fetchTxnData_q|writeAhead_q|trustedValidation_q|writeObjects_q|acceptLedger_q|trustedProposal_q|sweep_q|clusterReport_q|heartbeat_q|administration_q|handleHaveTransactions_q|doTransactions_q)_milliseconds_bucket\", exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile($quantile, sum by (le, __name__) (rate({__name__=~\"xrpld_(makeFetchPack_q|publishAcqLedger_q|untrustedValidation_q|manifest_q|localTransaction_q|ledgerReplayRequest_q|ledgerRequest_q|untrustedProposal_q|ledgerReplayTask_q|ledgerData_q|clientCommand_q|clientSubscribe_q|clientFeeChange_q|clientConsensus_q|clientAccountHistory_q|clientRPC_q|clientWebsocket_q|RPC_q|updatePaths_q|transaction_q|batch_q|advanceLedger_q|publishNewLedger_q|fetchTxnData_q|writeAhead_q|trustedValidation_q|writeObjects_q|acceptLedger_q|trustedProposal_q|sweep_q|clusterReport_q|heartbeat_q|administration_q|handleHaveTransactions_q|doTransactions_q)_milliseconds_bucket\", exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "{{__name__}}" } ], @@ -896,6 +896,66 @@ "tags": ["rippled", "statsd", "node-health", "telemetry"], "templating": { "list": [ + { + "name": "service_name", + "label": "Service", + "description": "Filter by service.name (e.g. xrpld, pratik-xrpld)", + "type": "query", + "query": "label_values(service_name)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "deployment_environment", + "label": "Environment", + "description": "Filter by deployment tier (local/ci/test/prod)", + "type": "query", + "query": "label_values(deployment_environment)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "xrpl_network_type", + "label": "Network", + "description": "Filter by XRPL network (mainnet/testnet/devnet)", + "type": "query", + "query": "label_values(xrpl_network_type)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, { "name": "node", "label": "Node", diff --git a/docker/telemetry/grafana/dashboards/system-overlay-traffic-detail.json b/docker/telemetry/grafana/dashboards/system-overlay-traffic-detail.json index 0650b4bbed..8fde032271 100644 --- a/docker/telemetry/grafana/dashboards/system-overlay-traffic-detail.json +++ b/docker/telemetry/grafana/dashboards/system-overlay-traffic-detail.json @@ -30,42 +30,42 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_squelch_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_squelch_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Squelch In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_squelch_Messages_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_squelch_Messages_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Squelch Out [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_squelch_suppressed_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_squelch_suppressed_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Suppressed In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_squelch_suppressed_Messages_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_squelch_suppressed_Messages_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Suppressed Out [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_squelch_ignored_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_squelch_ignored_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Ignored In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_squelch_ignored_Messages_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_squelch_ignored_Messages_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Ignored Out [{{exported_instance}}]" } ], @@ -104,42 +104,42 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_overhead_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_overhead_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Base Overhead In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_overhead_Bytes_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_overhead_Bytes_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Base Overhead Out [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_overhead_cluster_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_overhead_cluster_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Cluster In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_overhead_cluster_Bytes_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_overhead_cluster_Bytes_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Cluster Out [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_overhead_manifest_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_overhead_manifest_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Manifest In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_overhead_manifest_Bytes_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_overhead_manifest_Bytes_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Manifest Out [{{exported_instance}}]" } ], @@ -178,28 +178,28 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_validator_lists_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_validator_lists_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Bytes In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_validator_lists_Bytes_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_validator_lists_Bytes_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Bytes Out [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_validator_lists_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_validator_lists_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Messages In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_validator_lists_Messages_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_validator_lists_Messages_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Messages Out [{{exported_instance}}]" } ], @@ -255,28 +255,28 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_set_get_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_set_get_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Set Get In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_set_get_Bytes_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_set_get_Bytes_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Set Get Out [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_set_share_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_set_share_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Set Share In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_set_share_Bytes_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_set_share_Bytes_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Set Share Out [{{exported_instance}}]" } ], @@ -315,28 +315,28 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_have_transactions_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_have_transactions_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Have TX In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_have_transactions_Messages_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_have_transactions_Messages_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Have TX Out [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_requested_transactions_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_requested_transactions_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Requested TX In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_requested_transactions_Messages_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_requested_transactions_Messages_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Requested TX Out [{{exported_instance}}]" } ], @@ -375,28 +375,28 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_unknown_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_unknown_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Unknown Bytes In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_unknown_Bytes_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_unknown_Bytes_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Unknown Bytes Out [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_unknown_Messages_In{exported_instance=~\"$node\"}", + "expr": "xrpld_unknown_Messages_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Unknown Messages In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_unknown_Messages_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_unknown_Messages_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Unknown Messages Out [{{exported_instance}}]" } ], @@ -452,28 +452,28 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_proof_path_request_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_proof_path_request_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Request Bytes In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_proof_path_request_Bytes_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_proof_path_request_Bytes_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Request Bytes Out [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_proof_path_response_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_proof_path_response_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Response Bytes In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_proof_path_response_Bytes_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_proof_path_response_Bytes_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Response Bytes Out [{{exported_instance}}]" } ], @@ -512,28 +512,28 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_replay_delta_request_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_replay_delta_request_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Request Bytes In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_replay_delta_request_Bytes_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_replay_delta_request_Bytes_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Request Bytes Out [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_replay_delta_response_Bytes_In{exported_instance=~\"$node\"}", + "expr": "xrpld_replay_delta_response_Bytes_In{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Response Bytes In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_replay_delta_response_Bytes_Out{exported_instance=~\"$node\"}", + "expr": "xrpld_replay_delta_response_Bytes_Out{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Response Bytes Out [{{exported_instance}}]" } ], @@ -556,6 +556,66 @@ "tags": ["rippled", "statsd", "overlay", "network", "telemetry"], "templating": { "list": [ + { + "name": "service_name", + "label": "Service", + "description": "Filter by service.name (e.g. xrpld, pratik-xrpld)", + "type": "query", + "query": "label_values(service_name)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "deployment_environment", + "label": "Environment", + "description": "Filter by deployment tier (local/ci/test/prod)", + "type": "query", + "query": "label_values(deployment_environment)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "xrpl_network_type", + "label": "Network", + "description": "Filter by XRPL network (mainnet/testnet/devnet)", + "type": "query", + "query": "label_values(xrpl_network_type)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, { "name": "node", "label": "Node", diff --git a/docker/telemetry/grafana/dashboards/system-rpc-pathfinding.json b/docker/telemetry/grafana/dashboards/system-rpc-pathfinding.json index d2e001e1cc..2786548b78 100644 --- a/docker/telemetry/grafana/dashboards/system-rpc-pathfinding.json +++ b/docker/telemetry/grafana/dashboards/system-rpc-pathfinding.json @@ -30,7 +30,7 @@ "datasource": { "type": "prometheus" }, - "expr": "rate(xrpld_rpc_requests_total{exported_instance=~\"$node\"}[5m])", + "expr": "rate(xrpld_rpc_requests_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])", "legendFormat": "Requests / Sec [{{exported_instance}}]" } ], @@ -62,14 +62,14 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_rpc_time_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_rpc_time_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "P95 Response Time [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(xrpld_rpc_time_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(xrpld_rpc_time_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "P50 Response Time [{{exported_instance}}]" } ], @@ -108,14 +108,14 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_rpc_size_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_rpc_size_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "P95 Response Size [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(xrpld_rpc_size_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(xrpld_rpc_size_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "P50 Response Size [{{exported_instance}}]" } ], @@ -154,28 +154,28 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(xrpld_rpc_time_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(xrpld_rpc_time_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "P50 [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.9, sum by (le, exported_instance) (rate(xrpld_rpc_time_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile(0.9, sum by (le, exported_instance) (rate(xrpld_rpc_time_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "P90 [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_rpc_time_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_rpc_time_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "P95 [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.99, sum by (le, exported_instance) (rate(xrpld_rpc_time_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile(0.99, sum by (le, exported_instance) (rate(xrpld_rpc_time_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "P99 [{{exported_instance}}]" } ], @@ -214,14 +214,14 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_pathfind_fast_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_pathfind_fast_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "P95 Fast Pathfind [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(xrpld_pathfind_fast_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(xrpld_pathfind_fast_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "P50 Fast Pathfind [{{exported_instance}}]" } ], @@ -260,14 +260,14 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_pathfind_full_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_pathfind_full_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "P95 Full Pathfind [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(xrpld_pathfind_full_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))", + "expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(xrpld_pathfind_full_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])))", "legendFormat": "P50 Full Pathfind [{{exported_instance}}]" } ], @@ -306,7 +306,7 @@ "datasource": { "type": "prometheus" }, - "expr": "rate(xrpld_warn_total{exported_instance=~\"$node\"}[5m])", + "expr": "rate(xrpld_warn_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])", "legendFormat": "Warnings / Sec [{{exported_instance}}]" } ], @@ -354,7 +354,7 @@ "datasource": { "type": "prometheus" }, - "expr": "rate(xrpld_drop_total{exported_instance=~\"$node\"}[5m])", + "expr": "rate(xrpld_drop_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m])", "legendFormat": "Drops / Sec [{{exported_instance}}]" } ], @@ -402,7 +402,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (method, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", method=~\"$grpc_method\", span_name=~\"grpc\\\\..*\"}[5m]))", + "expr": "sum by (method, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", method=~\"$grpc_method\", span_name=~\"grpc\\\\..*\"}[5m]))", "legendFormat": "{{method}} [{{exported_instance}}]" } ], @@ -441,7 +441,7 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.95, sum by (le, method, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", method=~\"$grpc_method\", span_name=~\"grpc\\\\..*\"}[5m])))", + "expr": "histogram_quantile(0.95, sum by (le, method, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", method=~\"$grpc_method\", span_name=~\"grpc\\\\..*\"}[5m])))", "legendFormat": "{{method}} [{{exported_instance}}]" } ], @@ -480,7 +480,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (grpc_status, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=~\"grpc\\\\..*\", grpc_status!=\"\"}[5m]))", + "expr": "sum by (grpc_status, exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=~\"grpc\\\\..*\", grpc_status!=\"\"}[5m]))", "legendFormat": "{{grpc_status}} [{{exported_instance}}]" } ], @@ -519,14 +519,14 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=\"pathfind.compute\"}[5m])))", + "expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"pathfind.compute\"}[5m])))", "legendFormat": "P95 Compute [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", span_name=\"pathfind.compute\"}[5m])))", + "expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(traces_span_metrics_duration_milliseconds_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"pathfind.compute\"}[5m])))", "legendFormat": "P50 Compute [{{exported_instance}}]" } ], @@ -565,14 +565,14 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"pathfind.request\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"pathfind.request\"}[5m]))", "legendFormat": "Requests / Sec [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", span_name=\"pathfind.discover\"}[5m]))", + "expr": "sum by (exported_instance) (rate(traces_span_metrics_calls_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", span_name=\"pathfind.discover\"}[5m]))", "legendFormat": "Discoveries / Sec [{{exported_instance}}]" } ], @@ -595,6 +595,66 @@ "tags": ["rippled", "statsd", "rpc", "pathfinding", "telemetry"], "templating": { "list": [ + { + "name": "service_name", + "label": "Service", + "description": "Filter by service.name (e.g. xrpld, pratik-xrpld)", + "type": "query", + "query": "label_values(service_name)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "deployment_environment", + "label": "Environment", + "description": "Filter by deployment tier (local/ci/test/prod)", + "type": "query", + "query": "label_values(deployment_environment)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "xrpl_network_type", + "label": "Network", + "description": "Filter by XRPL network (mainnet/testnet/devnet)", + "type": "query", + "query": "label_values(xrpl_network_type)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, { "name": "node", "label": "Node", diff --git a/include/xrpl/beast/insight/OTelCollector.h b/include/xrpl/beast/insight/OTelCollector.h index 32a7fc621c..f3387614a8 100644 --- a/include/xrpl/beast/insight/OTelCollector.h +++ b/include/xrpl/beast/insight/OTelCollector.h @@ -77,6 +77,14 @@ public: * emitted as the `service.instance.id` OTel * resource attribute. Defaults to empty string * (attribute omitted when empty). + * @param serviceName Value for the `service.name` OTel resource + * attribute. When empty, defaults to "xrpld". + * Matches the trace exporter's service.name so + * metrics and traces share one service identity. + * @param networkType Value for the `xrpl.network.type` OTel resource + * attribute (e.g. "mainnet"). When empty, the + * attribute is omitted. Supplied by the node so + * metrics carry the same network label as traces. * @param journal Journal for logging. * @return Shared pointer to the created Collector. */ @@ -85,6 +93,8 @@ public: New(std::string const& endpoint, std::string const& prefix, std::string const& instanceId, + std::string const& serviceName, + std::string const& networkType, Journal journal); }; diff --git a/include/xrpl/telemetry/Telemetry.h b/include/xrpl/telemetry/Telemetry.h index 471fe0b93e..d998450066 100644 --- a/include/xrpl/telemetry/Telemetry.h +++ b/include/xrpl/telemetry/Telemetry.h @@ -364,4 +364,15 @@ makeTelemetrySetup( std::string const& version, std::uint32_t networkId); +/** Derive a human-readable network type label from the numeric network ID. + + Shared by the trace and metric export paths so both stamp the same + `xrpl.network.type` resource attribute value. + + @param networkId The network identifier from [network_id] config. + @return "mainnet" (0), "testnet" (1), "devnet" (2), or "unknown". +*/ +std::string +networkTypeFromId(std::uint32_t networkId); + } // namespace xrpl::telemetry diff --git a/src/libxrpl/beast/insight/OTelCollector.cpp b/src/libxrpl/beast/insight/OTelCollector.cpp index b42972b54f..9893fbedef 100644 --- a/src/libxrpl/beast/insight/OTelCollector.cpp +++ b/src/libxrpl/beast/insight/OTelCollector.cpp @@ -371,7 +371,8 @@ private: * Example usage: * @code * auto collector = OTelCollector::New( - * "http://localhost:4318/v1/metrics", "xrpld", journal); + * "http://localhost:4318/v1/metrics", "xrpld", + * "node-1", "xrpld", "mainnet", journal); * auto counter = collector->makeCounter("rpc.requests"); * counter.increment(1); * // Metric "xrpld_rpc_requests" exported via OTLP every 1s. @@ -387,12 +388,18 @@ public: * @param prefix Prefix for all metric names. * @param instanceId Value for the service.instance.id resource attribute. * When empty, the attribute is omitted. + * @param serviceName Value for the service.name resource attribute. + * When empty, defaults to "xrpld". + * @param networkType Value for the xrpl.network.type resource attribute. + * When empty, the attribute is omitted. * @param journal Journal for logging. */ OTelCollectorImp( std::string const& endpoint, std::string prefix, std::string const& instanceId, + std::string const& serviceName, + std::string const& networkType, Journal journal); /** @@ -662,6 +669,8 @@ OTelCollectorImp::OTelCollectorImp( std::string const& endpoint, std::string prefix, std::string const& instanceId, + std::string const& serviceName, + std::string const& networkType, Journal journal) : journal_(journal), prefix_(std::move(prefix)) { @@ -684,15 +693,24 @@ OTelCollectorImp::OTelCollectorImp( auto reader = metrics_sdk::PeriodicExportingMetricReaderFactory::Create(std::move(exporter), readerOpts); - // Configure resource attributes matching the trace exporter. - // Include service.instance.id when provided so Prometheus - // exported_instance labels distinguish multi-node deployments. + // Configure resource attributes matching the trace exporter so metrics + // and traces share one identity. service.name defaults to "xrpld" when + // unset. service.instance.id and xrpl.network.type are added when + // provided so Prometheus labels distinguish node and network. + // "xrpl.network.type" is a string literal (not the telemetry SpanNames + // const) because beast/insight sits below the telemetry module and + // cannot include it; the value must match the trace exporter's key. resource::ResourceAttributes attrs; - attrs[opentelemetry::semconv::service::kServiceName] = "xrpld"; + attrs[opentelemetry::semconv::service::kServiceName] = + serviceName.empty() ? "xrpld" : serviceName; if (!instanceId.empty()) { attrs[opentelemetry::semconv::service::kServiceInstanceId] = instanceId; } + if (!networkType.empty()) + { + attrs["xrpl.network.type"] = networkType; + } auto resourceAttrs = resource::Resource::Create(attrs); // Create MeterProvider with resource, then attach the metric reader. @@ -859,9 +877,12 @@ OTelCollector::New( std::string const& endpoint, std::string const& prefix, std::string const& instanceId, + std::string const& serviceName, + std::string const& networkType, Journal journal) { - return std::make_shared(endpoint, prefix, instanceId, journal); + return std::make_shared( + endpoint, prefix, instanceId, serviceName, networkType, journal); } } // namespace beast::insight @@ -883,6 +904,8 @@ OTelCollector::New( std::string const& /* endpoint */, std::string const& /* prefix */, std::string const& /* instanceId */, + std::string const& /* serviceName */, + std::string const& /* networkType */, Journal /* journal */) { return NullCollector::make(); diff --git a/src/libxrpl/telemetry/TelemetryConfig.cpp b/src/libxrpl/telemetry/TelemetryConfig.cpp index 66de3933b7..00705aa4ed 100644 --- a/src/libxrpl/telemetry/TelemetryConfig.cpp +++ b/src/libxrpl/telemetry/TelemetryConfig.cpp @@ -61,10 +61,10 @@ constexpr std::uint32_t batchDelayMs = 5000u; constexpr std::uint32_t maxQueueSize = 2048u; } // namespace dflt -/** Derive a human-readable network type label from the numeric network ID. - @param networkId The network identifier from [network_id] config. - @return "mainnet", "testnet", "devnet", or "unknown" for other values. -*/ +} // namespace + +// Declared in Telemetry.h; shared by the trace and metric export paths so +// both stamp the same xrpl.network.type resource attribute value. std::string networkTypeFromId(std::uint32_t networkId) { @@ -81,8 +81,6 @@ networkTypeFromId(std::uint32_t networkId) } } -} // namespace - Telemetry::Setup makeTelemetrySetup( Section const& section, diff --git a/src/xrpld/app/main/Application.cpp b/src/xrpld/app/main/Application.cpp index e02a433824..39c2027b90 100644 --- a/src/xrpld/app/main/Application.cpp +++ b/src/xrpld/app/main/Application.cpp @@ -340,6 +340,12 @@ public: , txMaster_(*this) , collectorManager_(makeCollectorManager( config_->section(Sections::kInsight), + // Fall back to [telemetry] service_name so metrics inherit the + // same service.name as traces when [insight] omits it. Network + // type is derived from [network_id] via the shared telemetry + // helper, keeping metrics and traces on one network label. + config_->section("telemetry").valueOr("service_name", ""), + telemetry::networkTypeFromId(config_->networkId), logs_->journal("Collector"))) , jobQueue_( std::make_unique( diff --git a/src/xrpld/app/main/CollectorManager.cpp b/src/xrpld/app/main/CollectorManager.cpp index c65f48720d..065d620838 100644 --- a/src/xrpld/app/main/CollectorManager.cpp +++ b/src/xrpld/app/main/CollectorManager.cpp @@ -25,7 +25,12 @@ public: std::unique_ptr groups_; // NOLINTEND(readability-identifier-naming) - CollectorManagerImp(Section const& params, beast::Journal journal) : journal_(journal) + CollectorManagerImp( + Section const& params, + std::string const& serviceName, + std::string const& networkType, + beast::Journal journal) + : journal_(journal) { std::string const& server = get(params, Keys::kServer); @@ -52,7 +57,16 @@ public: // metric sources via the exported_instance Prometheus label. std::string const instanceId = get(params, "service_instance_id"); - collector_ = beast::insight::OTelCollector::New(endpoint, prefix, instanceId, journal); + // service.name from [insight] (falls back to the value the + // caller derived from [telemetry]); network type derived from + // [network_id]. Both mirror the trace exporter so metrics and + // traces carry the same service and network identity. + std::string serviceNameCfg = get(params, "service_name"); + if (serviceNameCfg.empty()) + serviceNameCfg = serviceName; + + collector_ = beast::insight::OTelCollector::New( + endpoint, prefix, instanceId, serviceNameCfg, networkType, journal); } // LCOV_EXCL_STOP else @@ -81,9 +95,13 @@ public: //------------------------------------------------------------------------------ std::unique_ptr -makeCollectorManager(Section const& params, beast::Journal journal) +makeCollectorManager( + Section const& params, + std::string const& serviceName, + std::string const& networkType, + beast::Journal journal) { - return std::make_unique(params, journal); + return std::make_unique(params, serviceName, networkType, journal); } } // namespace xrpl diff --git a/src/xrpld/app/main/CollectorManager.h b/src/xrpld/app/main/CollectorManager.h index d07da15353..bf41425ad4 100644 --- a/src/xrpld/app/main/CollectorManager.h +++ b/src/xrpld/app/main/CollectorManager.h @@ -3,6 +3,9 @@ #include #include +#include +#include + namespace xrpl { /** Provides the beast::insight::Collector service. */ @@ -18,7 +21,20 @@ public: group(std::string const& name) = 0; }; +/** Construct the collector manager. + + @param params The [insight] config section. + @param serviceName service.name resource attribute for OTel metrics + (empty -> the collector defaults it to "xrpld"). + @param networkType xrpl.network.type resource attribute for OTel + metrics (e.g. "mainnet"), derived from [network_id]. + @param journal Journal for logging. +*/ std::unique_ptr -makeCollectorManager(Section const& params, beast::Journal journal); +makeCollectorManager( + Section const& params, + std::string const& serviceName, + std::string const& networkType, + beast::Journal journal); } // namespace xrpl From 20179dc0edfdb8300d41c57012da5b1fd5fe761e Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Fri, 3 Jul 2026 19:42:41 +0100 Subject: [PATCH 6/7] feat(telemetry): tag logs with deployment tier at the collector Add resource/tier to the logs pipeline so log records carry the same deployment.environment and xrpl.network.type attributes as traces and metrics. This lets a single Grafana stack filter logs by tier alongside the other signals. resource/logs still runs first to set service.name and the job label; resource/tier then adds the tier attributes. Co-Authored-By: Claude Opus 4.8 --- docker/telemetry/otel-collector-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/telemetry/otel-collector-config.yaml b/docker/telemetry/otel-collector-config.yaml index fc7eac4a50..eeebb35b76 100644 --- a/docker/telemetry/otel-collector-config.yaml +++ b/docker/telemetry/otel-collector-config.yaml @@ -167,5 +167,5 @@ service: # batches entries, and exports to Loki for log-trace correlation. logs: receivers: [filelog] - processors: [resource/logs, batch] + processors: [resource/logs, resource/tier, batch] exporters: [otlphttp/loki] From 55404b7011bf44fa86e6f63ece24d5bb03f503fd Mon Sep 17 00:00:00 2001 From: Pratik Mankawde <3397372+pratikmankawde@users.noreply.github.com> Date: Fri, 3 Jul 2026 19:44:05 +0100 Subject: [PATCH 7/7] feat(telemetry): add deployment-tier filters to phase 9 dashboards Add $service_name, $deployment_environment, $xrpl_network_type template variables to the metric-gap-fill dashboards and wire them into every panel query that filters by $node, so these dashboards can be sliced by tier like the rest of the set. Co-Authored-By: Claude Opus 4.8 --- .../grafana/dashboards/xrpld-fee-market.json | 104 ++++++++++++++---- .../grafana/dashboards/xrpld-job-queue.json | 86 ++++++++++++--- .../dashboards/xrpld-peer-quality.json | 74 +++++++++++-- .../dashboards/xrpld-rpc-perf-otel.json | 80 ++++++++++++-- .../dashboards/xrpld-validator-health.json | 102 +++++++++++++---- 5 files changed, 373 insertions(+), 73 deletions(-) diff --git a/docker/telemetry/grafana/dashboards/xrpld-fee-market.json b/docker/telemetry/grafana/dashboards/xrpld-fee-market.json index dfeac283e7..c8f6ccd13d 100644 --- a/docker/telemetry/grafana/dashboards/xrpld-fee-market.json +++ b/docker/telemetry/grafana/dashboards/xrpld-fee-market.json @@ -30,14 +30,14 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_txq_metrics{exported_instance=~\"$node\", metric=\"txq_count\"}", + "expr": "xrpld_txq_metrics{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", metric=\"txq_count\"}", "legendFormat": "Queue Depth [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_txq_metrics{exported_instance=~\"$node\", metric=\"txq_max_size\"}", + "expr": "xrpld_txq_metrics{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", metric=\"txq_max_size\"}", "legendFormat": "Max Capacity [{{exported_instance}}]" } ], @@ -78,14 +78,14 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_txq_metrics{exported_instance=~\"$node\", metric=\"txq_in_ledger\"}", + "expr": "xrpld_txq_metrics{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", metric=\"txq_in_ledger\"}", "legendFormat": "In Ledger [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_txq_metrics{exported_instance=~\"$node\", metric=\"txq_per_ledger\"}", + "expr": "xrpld_txq_metrics{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", metric=\"txq_per_ledger\"}", "legendFormat": "Expected Per Ledger [{{exported_instance}}]" } ], @@ -126,28 +126,28 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_txq_metrics{exported_instance=~\"$node\", metric=\"txq_reference_fee_level\"}", + "expr": "xrpld_txq_metrics{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", metric=\"txq_reference_fee_level\"}", "legendFormat": "Reference Fee Level [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_txq_metrics{exported_instance=~\"$node\", metric=\"txq_min_processing_fee_level\"}", + "expr": "xrpld_txq_metrics{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", metric=\"txq_min_processing_fee_level\"}", "legendFormat": "Min Processing Fee Level [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_txq_metrics{exported_instance=~\"$node\", metric=\"txq_med_fee_level\"}", + "expr": "xrpld_txq_metrics{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", metric=\"txq_med_fee_level\"}", "legendFormat": "Median Fee Level [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_txq_metrics{exported_instance=~\"$node\", metric=\"txq_open_ledger_fee_level\"}", + "expr": "xrpld_txq_metrics{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", metric=\"txq_open_ledger_fee_level\"}", "legendFormat": "Open Ledger Fee Level [{{exported_instance}}]" } ], @@ -192,28 +192,28 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_load_factor_metrics{exported_instance=~\"$node\", metric=\"load_factor\"}", + "expr": "xrpld_load_factor_metrics{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", metric=\"load_factor\"}", "legendFormat": "Combined Load Factor [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_load_factor_metrics{exported_instance=~\"$node\", metric=\"load_factor_server\"}", + "expr": "xrpld_load_factor_metrics{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", metric=\"load_factor_server\"}", "legendFormat": "Server [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_load_factor_metrics{exported_instance=~\"$node\", metric=\"load_factor_fee_escalation\"}", + "expr": "xrpld_load_factor_metrics{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", metric=\"load_factor_fee_escalation\"}", "legendFormat": "Fee Escalation [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_load_factor_metrics{exported_instance=~\"$node\", metric=\"load_factor_fee_queue\"}", + "expr": "xrpld_load_factor_metrics{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", metric=\"load_factor_fee_queue\"}", "legendFormat": "Fee Queue [{{exported_instance}}]" } ], @@ -270,21 +270,21 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_load_factor_metrics{exported_instance=~\"$node\", metric=\"load_factor_local\"}", + "expr": "xrpld_load_factor_metrics{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", metric=\"load_factor_local\"}", "legendFormat": "Local [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_load_factor_metrics{exported_instance=~\"$node\", metric=\"load_factor_net\"}", + "expr": "xrpld_load_factor_metrics{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", metric=\"load_factor_net\"}", "legendFormat": "Network [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_load_factor_metrics{exported_instance=~\"$node\", metric=\"load_factor_cluster\"}", + "expr": "xrpld_load_factor_metrics{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", metric=\"load_factor_cluster\"}", "legendFormat": "Cluster [{{exported_instance}}]" } ], @@ -325,35 +325,35 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_load_factor_metrics{metric=\"load_factor_fee_escalation\",exported_instance=~\"$node\"}", + "expr": "xrpld_load_factor_metrics{metric=\"load_factor_fee_escalation\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Fee Escalation [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_load_factor_metrics{metric=\"load_factor_fee_queue\",exported_instance=~\"$node\"}", + "expr": "xrpld_load_factor_metrics{metric=\"load_factor_fee_queue\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Fee Queue [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_load_factor_metrics{metric=\"load_factor_local\",exported_instance=~\"$node\"}", + "expr": "xrpld_load_factor_metrics{metric=\"load_factor_local\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Local [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_load_factor_metrics{metric=\"load_factor_net\",exported_instance=~\"$node\"}", + "expr": "xrpld_load_factor_metrics{metric=\"load_factor_net\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Net [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_load_factor_metrics{metric=\"load_factor_cluster\",exported_instance=~\"$node\"}", + "expr": "xrpld_load_factor_metrics{metric=\"load_factor_cluster\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Cluster [{{exported_instance}}]" } ], @@ -397,7 +397,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(xrpld_txq_expired_total{exported_instance=~\"$node\"}[5m]))", + "expr": "sum by (exported_instance) (rate(xrpld_txq_expired_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m]))", "legendFormat": "Expired / Sec [{{exported_instance}}]" } ], @@ -436,7 +436,7 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (reason, exported_instance) (rate(xrpld_txq_dropped_total{exported_instance=~\"$node\"}[5m]))", + "expr": "sum by (reason, exported_instance) (rate(xrpld_txq_dropped_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m]))", "legendFormat": "{{reason}} [{{exported_instance}}]" } ], @@ -459,6 +459,66 @@ "tags": ["xrpld", "fee-market"], "templating": { "list": [ + { + "name": "service_name", + "label": "Service", + "description": "Filter by service.name (e.g. xrpld, pratik-xrpld)", + "type": "query", + "query": "label_values(service_name)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "deployment_environment", + "label": "Environment", + "description": "Filter by deployment tier (local/ci/test/prod)", + "type": "query", + "query": "label_values(deployment_environment)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "xrpl_network_type", + "label": "Network", + "description": "Filter by XRPL network (mainnet/testnet/devnet)", + "type": "query", + "query": "label_values(xrpl_network_type)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, { "name": "node", "label": "Node", diff --git a/docker/telemetry/grafana/dashboards/xrpld-job-queue.json b/docker/telemetry/grafana/dashboards/xrpld-job-queue.json index 1c84c021ca..8def65fb43 100644 --- a/docker/telemetry/grafana/dashboards/xrpld-job-queue.json +++ b/docker/telemetry/grafana/dashboards/xrpld-job-queue.json @@ -34,14 +34,14 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.99, sum by (le) (rate(xrpld_job_queued_duration_us_bucket{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m])))", + "expr": "histogram_quantile(0.99, sum by (le) (rate(xrpld_job_queued_duration_us_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", job_type=~\"$job_type\"}[5m])))", "legendFormat": "p99 Wait" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.99, sum by (le) (rate(xrpld_job_running_duration_us_bucket{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m])))", + "expr": "histogram_quantile(0.99, sum by (le) (rate(xrpld_job_running_duration_us_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", job_type=~\"$job_type\"}[5m])))", "legendFormat": "p99 Exec" } ], @@ -92,21 +92,21 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(xrpld_job_queued_total{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m]))", + "expr": "sum by (exported_instance) (rate(xrpld_job_queued_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", job_type=~\"$job_type\"}[5m]))", "legendFormat": "Queued/s [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(xrpld_job_started_total{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m]))", + "expr": "sum by (exported_instance) (rate(xrpld_job_started_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", job_type=~\"$job_type\"}[5m]))", "legendFormat": "Started/s [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(xrpld_job_finished_total{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m]))", + "expr": "sum by (exported_instance) (rate(xrpld_job_finished_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", job_type=~\"$job_type\"}[5m]))", "legendFormat": "Finished/s [{{exported_instance}}]" } ], @@ -157,7 +157,7 @@ "datasource": { "type": "prometheus" }, - "expr": "topk(10, rate(xrpld_job_queued_total{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m]))", + "expr": "topk(10, rate(xrpld_job_queued_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", job_type=~\"$job_type\"}[5m]))", "legendFormat": "{{job_type}} [{{exported_instance}}]" } ], @@ -208,7 +208,7 @@ "datasource": { "type": "prometheus" }, - "expr": "topk(10, rate(xrpld_job_finished_total{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m]))", + "expr": "topk(10, rate(xrpld_job_finished_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", job_type=~\"$job_type\"}[5m]))", "legendFormat": "{{job_type}} [{{exported_instance}}]" } ], @@ -254,14 +254,14 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.75, sum by (le, exported_instance) (rate(xrpld_job_queued_duration_us_bucket{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m])))", + "expr": "histogram_quantile(0.75, sum by (le, exported_instance) (rate(xrpld_job_queued_duration_us_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", job_type=~\"$job_type\"}[5m])))", "legendFormat": "p75 Wait [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.99, sum by (le, exported_instance) (rate(xrpld_job_queued_duration_us_bucket{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m])))", + "expr": "histogram_quantile(0.99, sum by (le, exported_instance) (rate(xrpld_job_queued_duration_us_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", job_type=~\"$job_type\"}[5m])))", "legendFormat": "p99 Wait [{{exported_instance}}]" } ], @@ -307,14 +307,14 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.75, sum by (le, exported_instance) (rate(xrpld_job_running_duration_us_bucket{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m])))", + "expr": "histogram_quantile(0.75, sum by (le, exported_instance) (rate(xrpld_job_running_duration_us_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", job_type=~\"$job_type\"}[5m])))", "legendFormat": "p75 Exec [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.99, sum by (le, exported_instance) (rate(xrpld_job_running_duration_us_bucket{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m])))", + "expr": "histogram_quantile(0.99, sum by (le, exported_instance) (rate(xrpld_job_running_duration_us_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", job_type=~\"$job_type\"}[5m])))", "legendFormat": "p99 Exec [{{exported_instance}}]" } ], @@ -365,7 +365,7 @@ "datasource": { "type": "prometheus" }, - "expr": "topk(10, histogram_quantile(0.99, sum by (le, job_type, exported_instance) (rate(xrpld_job_running_duration_us_bucket{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m]))))", + "expr": "topk(10, histogram_quantile(0.99, sum by (le, job_type, exported_instance) (rate(xrpld_job_running_duration_us_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", job_type=~\"$job_type\"}[5m]))))", "legendFormat": "{{job_type}} [{{exported_instance}}]" } ], @@ -411,7 +411,7 @@ "datasource": { "type": "prometheus" }, - "expr": "rate(xrpld_jq_trans_overflow_total{exported_instance=~\"$node\"}[5m]) * 60", + "expr": "rate(xrpld_jq_trans_overflow_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m]) * 60", "legendFormat": "Overflows/min [{{exported_instance}}]" } ], @@ -457,6 +457,66 @@ "tags": ["xrpld", "job-queue"], "templating": { "list": [ + { + "name": "service_name", + "label": "Service", + "description": "Filter by service.name (e.g. xrpld, pratik-xrpld)", + "type": "query", + "query": "label_values(service_name)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "deployment_environment", + "label": "Environment", + "description": "Filter by deployment tier (local/ci/test/prod)", + "type": "query", + "query": "label_values(deployment_environment)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "xrpl_network_type", + "label": "Network", + "description": "Filter by XRPL network (mainnet/testnet/devnet)", + "type": "query", + "query": "label_values(xrpl_network_type)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, { "name": "node", "label": "Node", diff --git a/docker/telemetry/grafana/dashboards/xrpld-peer-quality.json b/docker/telemetry/grafana/dashboards/xrpld-peer-quality.json index 72995c7996..f576de0f9c 100644 --- a/docker/telemetry/grafana/dashboards/xrpld-peer-quality.json +++ b/docker/telemetry/grafana/dashboards/xrpld-peer-quality.json @@ -30,7 +30,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_peer_quality{metric=\"peer_latency_p90_ms\",exported_instance=~\"$node\"}", + "expr": "xrpld_peer_quality{metric=\"peer_latency_p90_ms\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "P90 Latency [{{exported_instance}}]" } ], @@ -91,7 +91,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_peer_quality{metric=\"peers_insane_count\",exported_instance=~\"$node\"}", + "expr": "xrpld_peer_quality{metric=\"peers_insane_count\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Insane Peers [{{exported_instance}}]" } ], @@ -140,7 +140,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_peer_quality{metric=\"peers_higher_version_pct\",exported_instance=~\"$node\"}", + "expr": "xrpld_peer_quality{metric=\"peers_higher_version_pct\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Higher Version % [{{exported_instance}}]" } ], @@ -191,7 +191,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_peer_quality{metric=\"upgrade_recommended\",exported_instance=~\"$node\"}", + "expr": "xrpld_peer_quality{metric=\"upgrade_recommended\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Upgrade [{{exported_instance}}]" } ], @@ -256,7 +256,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_server_info{metric=\"peer_disconnects_resources\",exported_instance=~\"$node\"}", + "expr": "xrpld_server_info{metric=\"peer_disconnects_resources\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Disconnects [{{exported_instance}}]" } ], @@ -303,14 +303,14 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_Peer_Finder_Active_Inbound_Peers{exported_instance=~\"$node\"}", + "expr": "xrpld_Peer_Finder_Active_Inbound_Peers{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Inbound [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_Peer_Finder_Active_Outbound_Peers{exported_instance=~\"$node\"}", + "expr": "xrpld_Peer_Finder_Active_Outbound_Peers{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Outbound [{{exported_instance}}]" } ], @@ -366,6 +366,66 @@ "tags": ["xrpld", "peer", "network"], "templating": { "list": [ + { + "name": "service_name", + "label": "Service", + "description": "Filter by service.name (e.g. xrpld, pratik-xrpld)", + "type": "query", + "query": "label_values(service_name)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "deployment_environment", + "label": "Environment", + "description": "Filter by deployment tier (local/ci/test/prod)", + "type": "query", + "query": "label_values(deployment_environment)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "xrpl_network_type", + "label": "Network", + "description": "Filter by XRPL network (mainnet/testnet/devnet)", + "type": "query", + "query": "label_values(xrpl_network_type)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, { "name": "node", "label": "Node", diff --git a/docker/telemetry/grafana/dashboards/xrpld-rpc-perf-otel.json b/docker/telemetry/grafana/dashboards/xrpld-rpc-perf-otel.json index fec0a5e6f9..d50e209cae 100644 --- a/docker/telemetry/grafana/dashboards/xrpld-rpc-perf-otel.json +++ b/docker/telemetry/grafana/dashboards/xrpld-rpc-perf-otel.json @@ -30,21 +30,21 @@ "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(xrpld_rpc_method_started_total{exported_instance=~\"$node\", method=~\"$method\"}[5m]))", + "expr": "sum by (exported_instance) (rate(xrpld_rpc_method_started_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", method=~\"$method\"}[5m]))", "legendFormat": "Started/s [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(xrpld_rpc_method_finished_total{exported_instance=~\"$node\", method=~\"$method\"}[5m]))", + "expr": "sum by (exported_instance) (rate(xrpld_rpc_method_finished_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", method=~\"$method\"}[5m]))", "legendFormat": "Finished/s [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "sum by (exported_instance) (rate(xrpld_rpc_method_errored_total{exported_instance=~\"$node\", method=~\"$method\"}[5m]))", + "expr": "sum by (exported_instance) (rate(xrpld_rpc_method_errored_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", method=~\"$method\"}[5m]))", "legendFormat": "Errored/s [{{exported_instance}}]" } ], @@ -94,7 +94,7 @@ "datasource": { "type": "prometheus" }, - "expr": "topk(10, rate(xrpld_rpc_method_started_total{exported_instance=~\"$node\", method=~\"$method\"}[5m]))", + "expr": "topk(10, rate(xrpld_rpc_method_started_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", method=~\"$method\"}[5m]))", "legendFormat": "{{method}} [{{exported_instance}}]" } ], @@ -144,7 +144,7 @@ "datasource": { "type": "prometheus" }, - "expr": "topk(10, rate(xrpld_rpc_method_errored_total{exported_instance=~\"$node\", method=~\"$method\"}[5m]))", + "expr": "topk(10, rate(xrpld_rpc_method_errored_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", method=~\"$method\"}[5m]))", "legendFormat": "{{method}} [{{exported_instance}}]" } ], @@ -189,14 +189,14 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.75, sum by (le, exported_instance) (rate(xrpld_rpc_method_duration_us_bucket{exported_instance=~\"$node\", method=~\"$method\"}[5m])))", + "expr": "histogram_quantile(0.75, sum by (le, exported_instance) (rate(xrpld_rpc_method_duration_us_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", method=~\"$method\"}[5m])))", "legendFormat": "p75 [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.99, sum by (le, exported_instance) (rate(xrpld_rpc_method_duration_us_bucket{exported_instance=~\"$node\", method=~\"$method\"}[5m])))", + "expr": "histogram_quantile(0.99, sum by (le, exported_instance) (rate(xrpld_rpc_method_duration_us_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", method=~\"$method\"}[5m])))", "legendFormat": "p99 [{{exported_instance}}]" } ], @@ -246,7 +246,7 @@ "datasource": { "type": "prometheus" }, - "expr": "topk(10, histogram_quantile(0.99, sum by (le, method, exported_instance) (rate(xrpld_rpc_method_duration_us_bucket{exported_instance=~\"$node\", method=~\"$method\"}[5m]))))", + "expr": "topk(10, histogram_quantile(0.99, sum by (le, method, exported_instance) (rate(xrpld_rpc_method_duration_us_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", method=~\"$method\"}[5m]))))", "legendFormat": "{{method}} [{{exported_instance}}]" } ], @@ -296,7 +296,7 @@ "datasource": { "type": "prometheus" }, - "expr": "topk(10, rate(xrpld_rpc_method_errored_total{exported_instance=~\"$node\", method=~\"$method\"}[5m]) / (rate(xrpld_rpc_method_started_total{exported_instance=~\"$node\", method=~\"$method\"}[5m]) > 0))", + "expr": "topk(10, rate(xrpld_rpc_method_errored_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", method=~\"$method\"}[5m]) / (rate(xrpld_rpc_method_started_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", method=~\"$method\"}[5m]) > 0))", "legendFormat": "{{method}} [{{exported_instance}}]" } ], @@ -363,7 +363,7 @@ "datasource": { "type": "prometheus" }, - "expr": "histogram_quantile(0.99, sum by (le) (rate(xrpld_rpc_method_duration_us_bucket{exported_instance=~\"$node\", method=~\"$method\"}[5m])))", + "expr": "histogram_quantile(0.99, sum by (le) (rate(xrpld_rpc_method_duration_us_bucket{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\", method=~\"$method\"}[5m])))", "legendFormat": "p99 Latency" } ], @@ -397,6 +397,66 @@ "tags": ["xrpld", "rpc"], "templating": { "list": [ + { + "name": "service_name", + "label": "Service", + "description": "Filter by service.name (e.g. xrpld, pratik-xrpld)", + "type": "query", + "query": "label_values(service_name)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "deployment_environment", + "label": "Environment", + "description": "Filter by deployment tier (local/ci/test/prod)", + "type": "query", + "query": "label_values(deployment_environment)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "xrpl_network_type", + "label": "Network", + "description": "Filter by XRPL network (mainnet/testnet/devnet)", + "type": "query", + "query": "label_values(xrpl_network_type)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, { "name": "node", "label": "Node", diff --git a/docker/telemetry/grafana/dashboards/xrpld-validator-health.json b/docker/telemetry/grafana/dashboards/xrpld-validator-health.json index 439eb1bf43..c16c1c4050 100644 --- a/docker/telemetry/grafana/dashboards/xrpld-validator-health.json +++ b/docker/telemetry/grafana/dashboards/xrpld-validator-health.json @@ -42,7 +42,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_validation_agreement{metric=\"agreement_pct_1h\",exported_instance=~\"$node\"}", + "expr": "xrpld_validation_agreement{metric=\"agreement_pct_1h\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Agreement 1h [{{exported_instance}}]" } ], @@ -93,7 +93,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_validation_agreement{metric=\"agreement_pct_24h\",exported_instance=~\"$node\"}", + "expr": "xrpld_validation_agreement{metric=\"agreement_pct_24h\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Agreement 24h [{{exported_instance}}]" } ], @@ -146,14 +146,14 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_validation_agreement{metric=\"agreements_1h\",exported_instance=~\"$node\"}", + "expr": "xrpld_validation_agreement{metric=\"agreements_1h\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Agreements 1h [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_validation_agreement{metric=\"missed_1h\",exported_instance=~\"$node\"}", + "expr": "xrpld_validation_agreement{metric=\"missed_1h\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Missed 1h [{{exported_instance}}]" } ], @@ -212,14 +212,14 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_validation_agreement{metric=\"agreements_24h\",exported_instance=~\"$node\"}", + "expr": "xrpld_validation_agreement{metric=\"agreements_24h\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Agreements 24h [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_validation_agreement{metric=\"missed_24h\",exported_instance=~\"$node\"}", + "expr": "xrpld_validation_agreement{metric=\"missed_24h\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Missed 24h [{{exported_instance}}]" } ], @@ -288,7 +288,7 @@ "datasource": { "type": "prometheus" }, - "expr": "rate(xrpld_validations_sent_total{exported_instance=~\"$node\"}[5m]) * 60", + "expr": "rate(xrpld_validations_sent_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m]) * 60", "legendFormat": "Sent/min [{{exported_instance}}]" } ], @@ -337,7 +337,7 @@ "datasource": { "type": "prometheus" }, - "expr": "rate(xrpld_validations_checked_total{exported_instance=~\"$node\"}[5m]) * 60", + "expr": "rate(xrpld_validations_checked_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m]) * 60", "legendFormat": "Checked/min [{{exported_instance}}]" } ], @@ -370,7 +370,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_validator_health{metric=\"amendment_blocked\",exported_instance=~\"$node\"}", + "expr": "xrpld_validator_health{metric=\"amendment_blocked\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Blocked [{{exported_instance}}]" } ], @@ -435,7 +435,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_validator_health{metric=\"unl_expiry_days\",exported_instance=~\"$node\"}", + "expr": "xrpld_validator_health{metric=\"unl_expiry_days\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "UNL Expiry [{{exported_instance}}]" } ], @@ -484,7 +484,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_validator_health{metric=\"unl_blocked\",exported_instance=~\"$node\"}", + "expr": "xrpld_validator_health{metric=\"unl_blocked\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "UNL Blocked [{{exported_instance}}]" } ], @@ -549,14 +549,14 @@ "datasource": { "type": "prometheus" }, - "expr": "rate(xrpld_validation_agreements_total{exported_instance=~\"$node\"}[5m]) * 60", + "expr": "rate(xrpld_validation_agreements_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m]) * 60", "legendFormat": "Agreements/min [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "rate(xrpld_validation_missed_total{exported_instance=~\"$node\"}[5m]) * 60", + "expr": "rate(xrpld_validation_missed_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m]) * 60", "legendFormat": "Missed/min [{{exported_instance}}]" } ], @@ -629,7 +629,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_validator_health{metric=\"validation_quorum\",exported_instance=~\"$node\"}", + "expr": "xrpld_validator_health{metric=\"validation_quorum\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Quorum [{{exported_instance}}]" } ], @@ -662,7 +662,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_state_tracking{metric=\"state_value\",exported_instance=~\"$node\"}", + "expr": "xrpld_state_tracking{metric=\"state_value\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "State [{{exported_instance}}]" } ], @@ -707,7 +707,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_state_tracking{metric=\"time_in_current_state_seconds\",exported_instance=~\"$node\"}", + "expr": "xrpld_state_tracking{metric=\"time_in_current_state_seconds\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Time in State [{{exported_instance}}]" } ], @@ -740,7 +740,7 @@ "datasource": { "type": "prometheus" }, - "expr": "rate(xrpld_state_changes_total{exported_instance=~\"$node\"}[1h])", + "expr": "rate(xrpld_state_changes_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[1h])", "legendFormat": "Changes/hr [{{exported_instance}}]" } ], @@ -789,7 +789,7 @@ "datasource": { "type": "prometheus" }, - "expr": "rate(xrpld_ledgers_closed_total{exported_instance=~\"$node\"}[5m]) * 60", + "expr": "rate(xrpld_ledgers_closed_total{exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}[5m]) * 60", "legendFormat": "Closed/min [{{exported_instance}}]" } ], @@ -838,7 +838,7 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_validation_agreement{metric=\"agreement_pct_7d\",exported_instance=~\"$node\"}", + "expr": "xrpld_validation_agreement{metric=\"agreement_pct_7d\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Agreement 7d [{{exported_instance}}]" } ], @@ -889,14 +889,14 @@ "datasource": { "type": "prometheus" }, - "expr": "xrpld_validation_agreement{metric=\"agreements_7d\",exported_instance=~\"$node\"}", + "expr": "xrpld_validation_agreement{metric=\"agreements_7d\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Agreements 7d [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, - "expr": "xrpld_validation_agreement{metric=\"missed_7d\",exported_instance=~\"$node\"}", + "expr": "xrpld_validation_agreement{metric=\"missed_7d\",exported_instance=~\"$node\", deployment_environment=~\"$deployment_environment\", xrpl_network_type=~\"$xrpl_network_type\", service_name=~\"$service_name\"}", "legendFormat": "Missed 7d [{{exported_instance}}]" } ], @@ -919,6 +919,66 @@ "tags": ["xrpld", "validator", "health"], "templating": { "list": [ + { + "name": "service_name", + "label": "Service", + "description": "Filter by service.name (e.g. xrpld, pratik-xrpld)", + "type": "query", + "query": "label_values(service_name)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "deployment_environment", + "label": "Environment", + "description": "Filter by deployment tier (local/ci/test/prod)", + "type": "query", + "query": "label_values(deployment_environment)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, + { + "name": "xrpl_network_type", + "label": "Network", + "description": "Filter by XRPL network (mainnet/testnet/devnet)", + "type": "query", + "query": "label_values(xrpl_network_type)", + "datasource": { + "type": "prometheus", + "uid": "prometheus" + }, + "includeAll": true, + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "multi": true, + "refresh": 2, + "sort": 1 + }, { "name": "node", "label": "Node",