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] 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",