style(telemetry): uniform dashboard layout, stable panel ids, row grouping

These dashboards were hand-authored over time and had drifted apart: panel
heights spanned ten different values, nine dashboards had no row grouping,
line-chart styling was inconsistent, and no panel carried an id, so Grafana
assigned them positionally at load and every panelId deep link was only as
stable as the panel order.

Per panel, in document order:
  - id           written as 1..N so panelId links address a specific panel
  - gridPos      quantized to at most two panels across: charts h=8,
                 stats/gauges h=4, tables/logs h=12 full width. Panels are
                 paired only with an equal-height neighbour, so no row is left
                 with a ragged half-empty cell.
  - line charts  lineWidth=1, fillOpacity=0, pointSize=5, gradientMode=none
  - repeat       xrpl_network_type (horizontal, maxPerRow=2) with a
                 [$xrpl_network_type] title suffix, on the panel types where
                 overlaying two networks in one panel reads as noise
                 (stat/gauge/bargauge/table/state-timeline). Line charts keep
                 their networks as separate series, which is the point of a
                 line chart.
  - decimals     0 where the value counts discrete things (threads, peers,
                 queue depths); a fractional thread count is meaningless.
  - rows         category rows added where a dashboard had none

Panels whose legend sits on the right stay full width: a side legend needs the
horizontal room, and squeezing it to half width clips the series names.

Edits were made as raw-text replacements, not a json.dump round-trip, so
formatting and escaping of untouched lines are byte-identical. Verified per
dashboard: panel count unchanged, every targets block byte-identical, all
descriptions unchanged, ids exactly 1..N, and no two panels overlapping on the
grid. The repo dashboard lint and the OTel naming check both pass.
This commit is contained in:
Pratik Mankawde
2026-08-07 11:31:54 +01:00
parent 79a0193854
commit 1d5697d7d3
10 changed files with 1179 additions and 440 deletions

View File

@@ -8,6 +8,19 @@
"id": null,
"links": [],
"panels": [
{
"title": "Consensus Rounds",
"type": "row",
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 0
},
"collapsed": false,
"panels": [],
"id": 1
},
{
"title": "Consensus Round Duration",
"description": "**What:** Time to process an accepted ledger, from the moment consensus is reached through applying the transaction set and finalising state.\n**How it's computed:** 95th and 50th percentile of per-round durations over a 5-minute window, per node.\n**Reading it:** Flat p50 with a modest p95 gap is normal; both track network transaction load.\n**Healthy range:** Roughly 3-6 seconds on mainnet.\n**Watch for:** A rising p95 that pulls away from p50 means occasional slow rounds; sustained growth precedes ledger-age alarms.\n**Source:** src/xrpld/app/consensus/RCLConsensus.cpp:RCLConsensus::Adaptor::makeAcceptSpan",
@@ -16,7 +29,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 0
"y": 1
},
"options": {
"tooltip": {
@@ -51,11 +64,28 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 2
},
{
"title": "Proposals & Validations",
"type": "row",
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 9
},
"collapsed": false,
"panels": [],
"id": 3
},
{
"title": "Consensus Proposals Sent Rate",
@@ -64,8 +94,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 0
"x": 0,
"y": 10
},
"options": {
"tooltip": {
@@ -92,11 +122,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 4
},
{
"title": "Ledger Close Duration",
@@ -105,8 +139,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 8
"x": 12,
"y": 10
},
"options": {
"tooltip": {
@@ -133,21 +167,25 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 5
},
{
"title": "Validation Send Rate",
"title": "Validation Send Rate [$xrpl_network_type]",
"description": "**What:** How often this node issues a validation confirming it has fully validated a ledger.\n**How it's computed:** Per-second rate over a 5-minute window, per node.\n**Reading it:** Should closely track the ledger close rate on a healthy validator.\n**Healthy range:** About one per ledger (~0.25/s on mainnet).\n**Watch for:** Validations lagging closes suggests the node is falling behind on validation.\n**Source:** src/xrpld/app/consensus/RCLConsensus.cpp:RCLConsensus::Adaptor::createValidationSpan",
"type": "stat",
"gridPos": {
"h": 8,
"h": 4,
"w": 12,
"x": 12,
"y": 8
"x": 0,
"y": 18
},
"options": {
"tooltip": {
@@ -170,7 +208,11 @@
"unit": "suffix: validations/s"
},
"overrides": []
}
},
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2,
"id": 6
},
{
"title": "Ledger Apply Duration (doAccept)",
@@ -180,7 +222,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 16
"y": 22
},
"targets": [
{
@@ -215,11 +257,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 7
},
{
"title": "Close Time Agreement",
@@ -229,7 +275,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 16
"y": 22
},
"targets": [
{
@@ -256,11 +302,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 8
},
{
"title": "Consensus Mode Over Time",
@@ -270,7 +320,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 24
"y": 30
},
"options": {
"tooltip": {
@@ -297,11 +347,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 9
},
{
"title": "Accept vs Close Rate",
@@ -311,7 +365,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 24
"y": 30
},
"options": {
"tooltip": {
@@ -346,11 +400,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 10
},
{
"title": "Validation vs Close Rate",
@@ -360,7 +418,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 32
"y": 38
},
"options": {
"tooltip": {
@@ -395,11 +453,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 11
},
{
"title": "Consensus Accept Duration Heatmap",
@@ -409,7 +471,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 32
"y": 38
},
"options": {
"tooltip": {
@@ -440,7 +502,21 @@
"spanNulls": 1800000
}
}
}
},
"id": 12
},
{
"title": "Close Time Analysis",
"type": "row",
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 46
},
"collapsed": false,
"panels": [],
"id": 13
},
{
"title": "Close Time: Raw Proposals (Per Node)",
@@ -450,7 +526,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 40
"y": 47
},
"fieldConfig": {
"defaults": {
@@ -458,8 +534,11 @@
"custom": {
"spanNulls": 1800000,
"drawStyle": "points",
"pointSize": 6,
"showPoints": "always"
"pointSize": 5,
"showPoints": "always",
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
@@ -485,7 +564,8 @@
"query": "{name=\"consensus.accept.apply\" && resource.service.instance.id=~\"$node\" && span.close_time_correct=~\"$close_time_correct\"} | select(span.close_time_self)",
"refId": "A"
}
]
],
"id": 14
},
{
"title": "Close Time: Effective / Quantized",
@@ -495,7 +575,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 40
"y": 47
},
"fieldConfig": {
"defaults": {
@@ -503,8 +583,11 @@
"custom": {
"spanNulls": 1800000,
"drawStyle": "points",
"pointSize": 6,
"showPoints": "always"
"pointSize": 5,
"showPoints": "always",
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
@@ -530,7 +613,8 @@
"query": "{name=\"consensus.accept.apply\" && resource.service.instance.id=~\"$node\" && span.close_time_correct=~\"$close_time_correct\"} | select(span.close_time)",
"refId": "A"
}
]
],
"id": 15
},
{
"title": "Close Time Vote Bins & Resolution",
@@ -540,7 +624,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 48
"y": 55
},
"fieldConfig": {
"defaults": {
@@ -549,7 +633,10 @@
"drawStyle": "line",
"lineInterpolation": "stepAfter",
"pointSize": 5,
"showPoints": "auto"
"showPoints": "auto",
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": [
@@ -616,7 +703,8 @@
"query": "{name=\"consensus.accept.apply\" && resource.service.instance.id=~\"$node\" && span.close_time_correct=~\"$close_time_correct\"} | select(span.close_resolution_ms)",
"refId": "B"
}
]
],
"id": 16
},
{
"title": "Close Time Resolution Direction",
@@ -626,16 +714,18 @@
"h": 8,
"w": 12,
"x": 12,
"y": 48
"y": 55
},
"fieldConfig": {
"defaults": {
"custom": {
"spanNulls": 1800000,
"drawStyle": "bars",
"fillOpacity": 40,
"fillOpacity": 0,
"pointSize": 5,
"showPoints": "auto"
"showPoints": "auto",
"lineWidth": 1,
"gradientMode": "none"
}
},
"overrides": []
@@ -661,7 +751,8 @@
"query": "{name=\"consensus.accept.apply\" && resource.service.instance.id=~\"$node\" && span.close_time_correct=~\"$close_time_correct\" && span.resolution_direction=~\"$resolution_direction\"} | select(span.resolution_direction)",
"refId": "A"
}
]
],
"id": 17
},
{
"title": "Close Time Bin Distribution",
@@ -669,9 +760,9 @@
"type": "barchart",
"gridPos": {
"h": 8,
"w": 24,
"w": 12,
"x": 0,
"y": 56
"y": 63
},
"fieldConfig": {
"defaults": {
@@ -707,7 +798,21 @@
"query": "{name=\"consensus.accept.apply\" && resource.service.instance.id=~\"$node\" && span.close_time_correct=~\"$close_time_correct\"} | select(span.close_time, span.close_time_vote_bins)",
"refId": "A"
}
]
],
"id": 18
},
{
"title": "Outcomes & Failures",
"type": "row",
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 71
},
"collapsed": false,
"panels": [],
"id": 19
},
{
"title": "Consensus Outcome Distribution",
@@ -715,9 +820,9 @@
"type": "piechart",
"gridPos": {
"h": 8,
"w": 8,
"w": 24,
"x": 0,
"y": 64
"y": 72
},
"options": {
"legend": {
@@ -744,7 +849,8 @@
"unit": "short"
},
"overrides": []
}
},
"id": 20
},
{
"title": "Consensus Failures Over Time",
@@ -752,9 +858,9 @@
"type": "timeseries",
"gridPos": {
"h": 8,
"w": 16,
"x": 8,
"y": 64
"w": 12,
"x": 0,
"y": 80
},
"options": {
"tooltip": {
@@ -789,11 +895,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 21
},
{
"title": "Consensus Round Duration (Full Round)",
@@ -802,8 +912,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 72
"x": 12,
"y": 80
},
"options": {
"tooltip": {
@@ -838,11 +948,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 22
},
{
"title": "Consensus Phase Duration (Open vs Establish)",
@@ -851,8 +965,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 72
"x": 0,
"y": 88
},
"options": {
"tooltip": {
@@ -887,11 +1001,28 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 23
},
{
"title": "Timing",
"type": "row",
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 96
},
"collapsed": false,
"panels": [],
"id": 24
},
{
"title": "Position Update Duration",
@@ -901,7 +1032,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 80
"y": 97
},
"options": {
"tooltip": {
@@ -936,11 +1067,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 25
},
{
"title": "Consensus Stall Rate",
@@ -950,7 +1085,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 80
"y": 97
},
"options": {
"tooltip": {
@@ -985,11 +1120,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 26
},
{
"title": "Consensus Mode-Change Rate by Target Mode",
@@ -997,9 +1136,9 @@
"type": "timeseries",
"gridPos": {
"h": 8,
"w": 24,
"w": 12,
"x": 0,
"y": 88
"y": 105
},
"options": {
"tooltip": {
@@ -1026,11 +1165,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 27
}
],
"schemaVersion": 39,

View File

@@ -49,7 +49,10 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
@@ -108,7 +111,10 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
@@ -155,7 +161,10 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
@@ -202,7 +211,10 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
@@ -261,7 +273,10 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
@@ -308,7 +323,10 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
@@ -355,7 +373,10 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
@@ -414,7 +435,10 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
@@ -461,7 +485,10 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
@@ -502,7 +529,10 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
@@ -549,7 +579,10 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
@@ -590,7 +623,10 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
@@ -643,7 +679,10 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
@@ -720,7 +759,10 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
@@ -728,12 +770,12 @@
"id": 14
},
{
"title": "Overlay Traffic Heatmap (All Categories, Bytes In)",
"title": "Overlay Traffic Heatmap (All Categories, Bytes In) [$xrpl_network_type]",
"description": "###### What this is:\n*All overlay traffic categories ranked by inbound bytes, giving an at-a-glance view of which message types consume the most receive bandwidth.*\n\n###### How it's computed:\n*Top categories by latest inbound byte value across all traffic categories. Each bar is labelled with its traffic category followed by the node identity; the shared `_bytes_in` suffix is dropped from the category name because the panel already reports inbound bytes.*\n\n###### Reading it:\n*The longest bars are the biggest bandwidth consumers; on a synced node transactions, proposals, and validations usually lead.*\n\n###### Healthy range:\n*workload-dependent.*\n\n###### Watch for:\n*A single ledger-data or fetch category dominating (ongoing sync) or an unexpected category topping the list.*\n\n###### Source:\n[OverlayImpl.cpp](https://github.com/XRPLF/rippled/blob/develop/src/xrpld/overlay/detail/OverlayImpl.cpp)\n\n###### Function:\n`OverlayImpl ctor (TrafficGauges)`",
"type": "bargauge",
"gridPos": {
"h": 18,
"w": 24,
"h": 4,
"w": 12,
"x": 0,
"y": 56
},
@@ -783,7 +825,10 @@
},
"overrides": []
},
"id": 15
"id": 15,
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2
},
{
"title": "Sync Diagnostics",
@@ -793,7 +838,7 @@
"h": 1,
"w": 24,
"x": 0,
"y": 74
"y": 60
},
"id": 16,
"panels": []
@@ -806,7 +851,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 75
"y": 61
},
"options": {
"tooltip": {
@@ -833,7 +878,10 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
},
"mappings": [
{
@@ -928,7 +976,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 75
"y": 61
},
"options": {
"tooltip": {
@@ -962,7 +1010,10 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
@@ -970,14 +1021,14 @@
"id": 18
},
{
"title": "Time Spent Per State",
"title": "Time Spent Per State [$xrpl_network_type]",
"description": "###### What this is:\n*Operating mode as a colour-coded timeline. Each band's width is the time spent in that state, so short-lived states show as thin slivers instead of vanishing.*\n\n###### How it's computed:\n*server_info{metric=\"server_state\"} (gauge), the raw OperatingMode 0-4. Uses server_state rather than state_value because state_value folds 5 and 6 onto FULL, which would split one Full band into three colours.*\n\n###### Reading it:\n*One green band across the window = healthy. Red/orange/yellow bands show when and for how long the node was degraded.*\n\n###### Healthy range:\n*Continuously green (Full), brief orange/yellow/blue only after a restart.*\n\n###### Watch for:\n*Repeated thin bands = the node is oscillating. This is sampled every 10s, so a state shorter than one sample can still be missed.*\n\n###### Source:\n[app/misc/NetworkOPs.cpp](https://github.com/XRPLF/rippled/blob/develop/src/xrpld/app/misc/NetworkOPs.cpp)\n\n###### Function:\n`NetworkOPsImp::setMode`",
"type": "state-timeline",
"gridPos": {
"h": 6,
"w": 24,
"h": 8,
"w": 12,
"x": 0,
"y": 83
"y": 69
},
"options": {
"mergeValues": true,
@@ -1080,7 +1131,10 @@
},
"overrides": []
},
"id": 27
"id": 19,
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2
},
{
"title": "Ledger Close Rate",
@@ -1089,8 +1143,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 89
"x": 12,
"y": 69
},
"options": {
"tooltip": {
@@ -1124,7 +1178,10 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": [
@@ -1146,7 +1203,7 @@
}
]
},
"id": 19
"id": 20
},
{
"title": "Job Queue Wait p95 By Type",
@@ -1155,8 +1212,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 89
"x": 0,
"y": 77
},
"options": {
"tooltip": {
@@ -1218,12 +1275,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
},
"id": 20
"id": 21
},
{
"title": "NuDB Read Latency",
@@ -1232,8 +1292,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 97
"x": 12,
"y": 77
},
"options": {
"tooltip": {
@@ -1260,12 +1320,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
},
"id": 21
"id": 22
},
{
"title": "I/O Scheduler Latency p95",
@@ -1274,8 +1337,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 97
"x": 0,
"y": 85
},
"options": {
"tooltip": {
@@ -1302,12 +1365,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
},
"id": 22
"id": 23
},
{
"title": "NuDB Read Found Ratio",
@@ -1316,8 +1382,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 105
"x": 12,
"y": 85
},
"options": {
"tooltip": {
@@ -1344,12 +1410,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
},
"id": 23
"id": 24
},
{
"title": "NuDB Read Pressure",
@@ -1358,8 +1427,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 105
"x": 0,
"y": 93
},
"options": {
"tooltip": {
@@ -1400,7 +1469,10 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": [
@@ -1438,7 +1510,7 @@
}
]
},
"id": 24
"id": 25
},
{
"title": "Job Queue Depth",
@@ -1447,8 +1519,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 113
"x": 12,
"y": 93
},
"options": {
"tooltip": {
@@ -1475,12 +1547,16 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
}
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
},
"decimals": 0
},
"overrides": []
},
"id": 25
"id": 26
},
{
"title": "Load Factor & Peers",
@@ -1489,8 +1565,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 113
"x": 0,
"y": 101
},
"options": {
"tooltip": {
@@ -1531,12 +1607,16 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
}
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
},
"decimals": 0
},
"overrides": []
},
"id": 26
"id": 27
}
],
"schemaVersion": 39,

View File

@@ -9,14 +9,27 @@
"links": [],
"panels": [
{
"title": "Ledger Build Rate",
"title": "Ledger Build & Validate",
"type": "row",
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 0
},
"collapsed": false,
"panels": [],
"id": 1
},
{
"title": "Ledger Build Rate [$xrpl_network_type]",
"description": "**What:** How often the node constructs a new ledger from its parent, applying transactions and writing state.\n**How it's computed:** Per-second rate over a 5-minute window, per node.\n**Reading it:** Should match the consensus close cadence.\n**Healthy range:** About 0.25/s on mainnet (~4s rounds).\n**Watch for:** A drop below the close rate means the node is not keeping up with ledger construction.\n**Source:** src/xrpld/app/ledger/detail/BuildLedger.cpp:buildLedgerImpl",
"type": "stat",
"gridPos": {
"h": 8,
"w": 8,
"h": 4,
"w": 12,
"x": 0,
"y": 0
"y": 1
},
"options": {
"tooltip": {
@@ -39,7 +52,11 @@
"unit": "suffix: ledgers/s"
},
"overrides": []
}
},
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2,
"id": 2
},
{
"title": "Ledger Build Duration",
@@ -49,7 +66,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 8
"y": 5
},
"options": {
"tooltip": {
@@ -84,21 +101,25 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 3
},
{
"title": "Ledger Validation Rate",
"title": "Ledger Validation Rate [$xrpl_network_type]",
"description": "**What:** How often ledgers reach the trusted-validation quorum and become fully validated.\n**How it's computed:** Per-second rate over a 5-minute window, per node.\n**Reading it:** Should match the build and close rates on a healthy node.\n**Healthy range:** About 0.25/s on mainnet.\n**Watch for:** A shortfall means ledgers are not accumulating enough trusted validations to be accepted.\n**Source:** src/xrpld/app/ledger/detail/LedgerMaster.cpp:LedgerMaster::checkAccept",
"type": "stat",
"gridPos": {
"h": 8,
"w": 8,
"x": 8,
"y": 0
"h": 4,
"w": 12,
"x": 0,
"y": 13
},
"options": {
"tooltip": {
@@ -121,7 +142,11 @@
"unit": "suffix: ledgers/s"
},
"overrides": []
}
},
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2,
"id": 4
},
{
"title": "Ledger Build Duration Heatmap",
@@ -130,8 +155,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 8
"x": 0,
"y": 17
},
"options": {
"tooltip": {
@@ -162,7 +187,21 @@
}
},
"overrides": []
}
},
"id": 5
},
{
"title": "Transaction Apply",
"type": "row",
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 25
},
"collapsed": false,
"panels": [],
"id": 6
},
{
"title": "Transaction Apply Duration",
@@ -172,7 +211,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 16
"y": 26
},
"options": {
"tooltip": {
@@ -207,11 +246,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 7
},
{
"title": "Transaction Apply Rate",
@@ -221,7 +264,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 16
"y": 26
},
"options": {
"tooltip": {
@@ -248,21 +291,38 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 8
},
{
"title": "Ledger Store Rate",
"title": "Store & Close Timing",
"type": "row",
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 34
},
"collapsed": false,
"panels": [],
"id": 9
},
{
"title": "Ledger Store Rate [$xrpl_network_type]",
"description": "**What:** How often completed ledgers are written into the local ledger history.\n**How it's computed:** Per-second rate over a 5-minute window, per node.\n**Reading it:** Should match the build rate under normal operation.\n**Healthy range:** About 0.25/s on mainnet.\n**Watch for:** A store rate below the build rate means ledgers are being built but not persisted.\n**Source:** src/xrpld/app/ledger/detail/LedgerMaster.cpp:LedgerMaster::storeLedger",
"type": "stat",
"gridPos": {
"h": 8,
"w": 8,
"x": 16,
"y": 0
"h": 4,
"w": 12,
"x": 0,
"y": 35
},
"options": {
"tooltip": {
@@ -285,7 +345,11 @@
"unit": "suffix: ledgers/s"
},
"overrides": []
}
},
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2,
"id": 10
},
{
"title": "Build vs Close Duration",
@@ -293,9 +357,9 @@
"type": "timeseries",
"gridPos": {
"h": 8,
"w": 24,
"w": 12,
"x": 0,
"y": 24
"y": 39
},
"options": {
"tooltip": {
@@ -330,11 +394,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 11
}
],
"schemaVersion": 39,

View File

@@ -9,6 +9,19 @@
"id": null,
"links": [],
"panels": [
{
"title": "Peer Connectivity",
"type": "row",
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 0
},
"collapsed": false,
"panels": [],
"id": 1
},
{
"title": "Active Peers",
"description": "###### What this is:\n*Number of active inbound and outbound peer connections the node currently holds.*\n\n###### How it's computed:\n*Current value of the inbound and outbound active-peer counts per node.*\n\n###### Reading it:\n*Outbound is what the node dials out; inbound is what others open to it. Both should be stable.*\n\n###### Healthy range:\n*roughly 10-21 outbound and 0-85 inbound on mainnet, depending on config.*\n\n###### Watch for:\n*Outbound dropping toward zero (isolation) or inbound pinned at the limit with churn (connection pressure).*\n\n###### Source:\n[PeerfinderManager.cpp](https://github.com/XRPLF/rippled/blob/develop/src/xrpld/peerfinder/detail/PeerfinderManager.cpp)\n\n###### Function:\n`Logic Stats ctor`",
@@ -17,7 +30,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 0
"y": 1
},
"options": {
"tooltip": {
@@ -49,11 +62,16 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
}
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
},
"decimals": 0
},
"overrides": []
}
},
"id": 2
},
{
"title": "Peer Disconnects",
@@ -63,7 +81,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 24
"y": 1
},
"options": {
"tooltip": {
@@ -89,11 +107,16 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
}
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
},
"decimals": 0
},
"overrides": []
}
},
"id": 3
},
{
"title": "Total Network Bytes",
@@ -103,7 +126,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 8
"y": 9
},
"options": {
"tooltip": {
@@ -135,11 +158,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 4
},
{
"title": "Total Network Messages",
@@ -149,7 +176,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 8
"y": 9
},
"options": {
"tooltip": {
@@ -181,11 +208,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 5
},
{
"title": "Transaction Traffic",
@@ -195,7 +226,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 16
"y": 17
},
"options": {
"tooltip": {
@@ -233,11 +264,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 6
},
{
"title": "Proposal Traffic",
@@ -247,7 +282,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 16
"y": 17
},
"options": {
"tooltip": {
@@ -291,11 +326,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 7
},
{
"title": "Validation Traffic",
@@ -305,7 +344,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 24
"y": 25
},
"options": {
"tooltip": {
@@ -349,21 +388,38 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 8
},
{
"title": "Overlay Traffic by Category (Bytes In)",
"title": "Traffic by Category",
"type": "row",
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 33
},
"collapsed": false,
"panels": [],
"id": 9
},
{
"title": "Overlay Traffic by Category (Bytes In) [$xrpl_network_type]",
"description": "###### What this is:\n*Top overlay traffic categories ranked by inbound bytes, excluding the all-traffic total.*\n\n###### How it's computed:\n*Top categories by inbound byte rate per node.*\n\n###### Reading it:\n*Shows which message types dominate receive bandwidth right now.*\n\n###### Healthy range:\n*workload-dependent; transactions, proposals, and validations typically lead on a synced node.*\n\n###### Watch for:\n*A fetch or ledger-data category topping the list (sync activity) or an unexpected category dominating.*\n\n###### Source:\n[OverlayImpl.cpp](https://github.com/XRPLF/rippled/blob/develop/src/xrpld/overlay/detail/OverlayImpl.cpp)\n\n###### Function:\n`OverlayImpl ctor (TrafficGauges)`",
"type": "bargauge",
"gridPos": {
"h": 8,
"h": 4,
"w": 12,
"x": 12,
"y": 0
"x": 0,
"y": 34
},
"options": {
"tooltip": {
@@ -650,7 +706,11 @@
]
}
]
}
},
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2,
"id": 10
},
{
"title": "Duplicate Traffic (Wasted Bandwidth)",
@@ -660,7 +720,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 32
"y": 38
},
"options": {
"tooltip": {
@@ -716,11 +776,28 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 11
},
{
"title": "Detail",
"type": "row",
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 46
},
"collapsed": false,
"panels": [],
"id": 12
},
{
"title": "All Traffic Categories (Detail)",
@@ -729,8 +806,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 32
"x": 0,
"y": 47
},
"options": {
"tooltip": {
@@ -756,11 +833,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 13
}
],
"schemaVersion": 39,

View File

@@ -10,11 +10,11 @@
"links": [],
"panels": [
{
"title": "Validated Ledger Age",
"title": "Validated Ledger Age [$xrpl_network_type]",
"description": "**What:** Seconds since the most recently validated ledger, i.e. how far behind the network the node is.\n**How it's computed:** Current value of the validated-ledger-age gauge per node.\n**Reading it:** Lower is better; a healthy node stays within a few ledger-close intervals.\n**Healthy range:** under ~10s (the network closes a ledger every 3-5s).\n**Watch for:** Above 20s or climbing steadily (the node is falling behind or has lost sync).\n**Source:** src/xrpld/app/ledger/LedgerMaster.h LedgerMaster::Stats ctor",
"type": "stat",
"gridPos": {
"h": 8,
"h": 4,
"w": 12,
"x": 0,
"y": 0
@@ -55,14 +55,18 @@
}
},
"overrides": []
}
},
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2,
"id": 1
},
{
"title": "Published Ledger Age",
"title": "Published Ledger Age [$xrpl_network_type]",
"description": "**What:** Seconds since the most recently published ledger (the ledger exposed to clients and subscribers).\n**How it's computed:** Current value of the published-ledger-age gauge per node.\n**Reading it:** Should track validated-ledger age closely.\n**Healthy range:** under ~10s.\n**Watch for:** Published age growing while validated age stays low (publish-pipeline backlog).\n**Source:** src/xrpld/app/ledger/LedgerMaster.h LedgerMaster::Stats ctor",
"type": "stat",
"gridPos": {
"h": 8,
"h": 4,
"w": 12,
"x": 12,
"y": 0
@@ -103,7 +107,11 @@
}
},
"overrides": []
}
},
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2,
"id": 2
},
{
"title": "Operating Mode (Time Share)",
@@ -113,7 +121,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 24
"y": 4
},
"options": {
"tooltip": {
@@ -167,14 +175,18 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3,
"pointSize": 5,
"stacking": {
"mode": "normal"
}
},
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 3
},
{
"title": "Operating Mode Transitions",
@@ -184,7 +196,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 24
"y": 4
},
"options": {
"tooltip": {
@@ -238,11 +250,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 4
},
{
"title": "I/O Latency",
@@ -252,7 +268,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 16
"y": 12
},
"options": {
"tooltip": {
@@ -285,11 +301,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 5
},
{
"title": "Job Queue Depth",
@@ -299,7 +319,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 16
"y": 12
},
"options": {
"tooltip": {
@@ -325,21 +345,26 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
}
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
},
"decimals": 0
},
"overrides": []
}
},
"id": 6
},
{
"title": "Ledger Fetch Rate",
"title": "Ledger Fetch Rate [$xrpl_network_type]",
"description": "**What:** Rate at which the node requests ledgers from peers.\n**How it's computed:** Per-second rate of the ledger-fetches counter over 5 minutes.\n**Reading it:** Near zero when synced; rises when catching up or backfilling history.\n**Healthy range:** workload-dependent; low on a synced node.\n**Watch for:** Sustained high fetch rate on a node that should be current (repeatedly missing ledgers).\n**Source:** src/xrpld/app/ledger/detail/InboundLedgers.cpp InboundLedgersImp ctor",
"type": "stat",
"gridPos": {
"h": 8,
"h": 4,
"w": 12,
"x": 0,
"y": 8
"y": 20
},
"options": {
"tooltip": {
@@ -361,17 +386,21 @@
"unit": "suffix: fetches/s"
},
"overrides": []
}
},
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2,
"id": 7
},
{
"title": "Ledger History Mismatches",
"title": "Ledger History Mismatches [$xrpl_network_type]",
"description": "**What:** Rate of ledger-history hash mismatches: built ledgers whose hash disagrees with the validated hash.\n**How it's computed:** Per-second rate of the history-mismatch counter over 5 minutes.\n**Reading it:** Should be flat at zero.\n**Healthy range:** zero.\n**Watch for:** Any non-zero value (consensus divergence, corrupted history, or database issues).\n**Source:** src/xrpld/telemetry/MetricsRegistry.cpp incrementLedgerHistoryMismatch (caller LedgerHistory.cpp)",
"type": "stat",
"gridPos": {
"h": 8,
"h": 4,
"w": 12,
"x": 12,
"y": 8
"y": 20
},
"options": {
"tooltip": {
@@ -405,7 +434,11 @@
}
},
"overrides": []
}
},
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2,
"id": 8
},
{
"title": "--- Extended Metrics (Recovered from Phase 6) ---",
@@ -414,10 +447,11 @@
"h": 1,
"w": 24,
"x": 0,
"y": 32
"y": 24
},
"collapsed": false,
"panels": []
"panels": [],
"id": 9
},
{
"title": "Key Jobs Execution Time",
@@ -427,7 +461,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 33
"y": 25
},
"options": {
"tooltip": {
@@ -523,11 +557,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 10
},
{
"title": "Key Jobs Dequeue Wait Time",
@@ -537,7 +575,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 33
"y": 25
},
"options": {
"tooltip": {
@@ -633,11 +671,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 11
},
{
"title": "FullBelowCache Size",
@@ -647,7 +689,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 41
"y": 33
},
"options": {
"tooltip": {
@@ -673,20 +715,24 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 12
},
{
"title": "FullBelowCache Hit Rate",
"title": "FullBelowCache Hit Rate [$xrpl_network_type]",
"description": "**What:** Hit-rate percentage of the FullBelowCache.\n**How it's computed:** Current value of the cache hit-rate gauge (0-100%).\n**Reading it:** Higher is better; means the node reuses knowledge of complete subtrees.\n**Healthy range:** above ~50% in steady state.\n**Watch for:** Low hit rate during steady state (cache too small or constant re-acquisition).\n**Source:** include/xrpl/basics/TaggedCache.h TaggedCache::Stats ctor",
"type": "gauge",
"gridPos": {
"h": 8,
"h": 4,
"w": 12,
"x": 12,
"x": 0,
"y": 41
},
"options": {
@@ -727,17 +773,21 @@
}
},
"overrides": []
}
},
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2,
"id": 13
},
{
"title": "Ledger Publish Gap",
"title": "Ledger Publish Gap [$xrpl_network_type]",
"description": "**What:** Difference between published and validated ledger ages: how far the publish pipeline trails validation.\n**How it's computed:** Published-ledger age minus validated-ledger age, in seconds.\n**Reading it:** Near zero means publishing keeps up with validation.\n**Healthy range:** within a few seconds of zero.\n**Watch for:** A growing gap (publish backlog, stale data for subscribers).\n**Source:** src/xrpld/app/ledger/LedgerMaster.h LedgerMaster::Stats ctor",
"type": "stat",
"gridPos": {
"h": 8,
"h": 4,
"w": 12,
"x": 0,
"y": 49
"x": 12,
"y": 41
},
"options": {
"tooltip": {
@@ -775,7 +825,11 @@
}
},
"overrides": []
}
},
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2,
"id": 14
},
{
"title": "State Duration Rate (Full vs Tracking)",
@@ -784,8 +838,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 49
"x": 0,
"y": 45
},
"options": {
"tooltip": {
@@ -818,11 +872,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 15
},
{
"title": "All Jobs Execution Time (Detail)",
@@ -830,9 +888,9 @@
"type": "timeseries",
"gridPos": {
"h": 8,
"w": 24,
"x": 0,
"y": 57
"w": 12,
"x": 12,
"y": 45
},
"options": {
"tooltip": {
@@ -858,11 +916,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 16
},
{
"title": "All Jobs Dequeue Wait (Detail)",
@@ -870,9 +932,9 @@
"type": "timeseries",
"gridPos": {
"h": 8,
"w": 24,
"w": 12,
"x": 0,
"y": 65
"y": 53
},
"options": {
"tooltip": {
@@ -898,11 +960,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 17
}
],
"schemaVersion": 39,

View File

@@ -73,11 +73,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 1
},
{
"title": "Overhead Traffic Breakdown (Bytes)",
@@ -143,11 +147,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 2
},
{
"title": "Validator List Traffic",
@@ -201,7 +209,10 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": [
@@ -222,7 +233,8 @@
]
}
]
}
},
"id": 3
},
{
"title": "Set Get/Share Traffic (Bytes)",
@@ -276,11 +288,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 4
},
{
"title": "Have/Requested Transactions (Messages)",
@@ -334,11 +350,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 5
},
{
"title": "Unknown / Unclassified Traffic",
@@ -392,7 +412,10 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": [
@@ -413,7 +436,8 @@
]
}
]
}
},
"id": 6
},
{
"title": "Proof Path Traffic",
@@ -467,11 +491,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 7
},
{
"title": "Replay Delta Traffic",
@@ -525,11 +553,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 8
}
],
"schemaVersion": 39,

View File

@@ -9,6 +9,19 @@
"id": null,
"links": [],
"panels": [
{
"title": "Proposal & Validation Receive",
"type": "row",
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 0
},
"collapsed": false,
"panels": [],
"id": 1
},
{
"title": "Peer Proposal Receive Rate",
"description": "**What:** Rate of consensus proposals arriving from connected network peers.\n**How it's computed:** Per-second rate over a 5-minute window, per node.\n**Reading it:** Reflects how many validators' proposals reach this node each round.\n**Healthy range:** Workload-dependent; scales with peer count and network activity.\n**Watch for:** A sudden drop means loss of proposal flow; a sharp sustained spike from a single peer can indicate flooding.\n**Source:** src/xrpld/overlay/detail/PeerImp.cpp:PeerImp::onMessage(TMProposeSet)",
@@ -17,7 +30,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 0
"y": 1
},
"options": {
"tooltip": {
@@ -44,11 +57,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 2
},
{
"title": "Peer Validation Receive Rate",
@@ -58,7 +75,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 0
"y": 1
},
"options": {
"tooltip": {
@@ -85,11 +102,28 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 3
},
{
"title": "Trust Split",
"type": "row",
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 9
},
"collapsed": false,
"panels": [],
"id": 4
},
{
"title": "Proposals Trusted vs Untrusted",
@@ -99,7 +133,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 8
"y": 10
},
"options": {
"tooltip": {
@@ -122,7 +156,8 @@
"unit": "short"
},
"overrides": []
}
},
"id": 5
},
{
"title": "Validations Trusted vs Untrusted",
@@ -132,7 +167,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 8
"y": 10
},
"options": {
"tooltip": {
@@ -155,7 +190,8 @@
"unit": "short"
},
"overrides": []
}
},
"id": 6
}
],
"schemaVersion": 39,

View File

@@ -10,11 +10,11 @@
"links": [],
"panels": [
{
"title": "RPC Request Rate",
"title": "RPC Request Rate [$xrpl_network_type]",
"description": "**What:** Rate of RPC requests handled, counting every HTTP and WebSocket call.\n**How it's computed:** Per-second rate of the RPC-requests counter over 5 minutes.\n**Reading it:** Tracks client demand on the node.\n**Healthy range:** workload-dependent.\n**Watch for:** Sudden sustained spikes (client surge or abusive polling) or a drop to zero (endpoint unavailable).\n**Source:** src/xrpld/rpc/detail/ServerHandler.cpp ServerHandler ctor",
"type": "stat",
"gridPos": {
"h": 8,
"h": 4,
"w": 12,
"x": 0,
"y": 0
@@ -40,7 +40,24 @@
"unit": "reqps"
},
"overrides": []
}
},
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2,
"id": 1
},
{
"title": "RPC Response",
"type": "row",
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 4
},
"collapsed": false,
"panels": [],
"id": 2
},
{
"title": "RPC Response Time",
@@ -49,8 +66,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 0
"x": 0,
"y": 5
},
"options": {
"tooltip": {
@@ -85,11 +102,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 3
},
{
"title": "RPC Response Size",
@@ -98,8 +119,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 24
"x": 12,
"y": 5
},
"options": {
"tooltip": {
@@ -134,11 +155,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 4
},
{
"title": "RPC Response Time Distribution",
@@ -147,8 +172,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 24
"x": 0,
"y": 13
},
"options": {
"tooltip": {
@@ -199,11 +224,28 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 5
},
{
"title": "Pathfinding",
"type": "row",
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 21
},
"collapsed": false,
"panels": [],
"id": 6
},
{
"title": "Pathfinding Fast Duration",
@@ -213,7 +255,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 16
"y": 22
},
"options": {
"tooltip": {
@@ -248,11 +290,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 7
},
{
"title": "Pathfinding Full Duration",
@@ -262,7 +308,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 16
"y": 22
},
"options": {
"tooltip": {
@@ -297,21 +343,25 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 8
},
{
"title": "Resource Warnings Rate",
"title": "Resource Warnings Rate [$xrpl_network_type]",
"description": "**What:** Rate of resource-limit warnings raised when a peer or client exceeds its usage warning threshold.\n**How it's computed:** Per-second rate of the warn counter over 5 minutes.\n**Reading it:** Occasional warnings are normal under load; a rising rate flags aggressive clients.\n**Healthy range:** workload-dependent; low.\n**Watch for:** A climbing warning rate (clients approaching limits, a precursor to drops).\n**Source:** include/xrpl/resource/detail/Logic.h Logic::Stats ctor",
"type": "stat",
"gridPos": {
"h": 8,
"h": 4,
"w": 12,
"x": 0,
"y": 8
"y": 30
},
"options": {
"tooltip": {
@@ -350,17 +400,21 @@
}
},
"overrides": []
}
},
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2,
"id": 9
},
{
"title": "Resource Drops Rate",
"title": "Resource Drops Rate [$xrpl_network_type]",
"description": "**What:** Rate of resource drops: consumers disconnected or blocked for excessive usage.\n**How it's computed:** Per-second rate of the drop counter over 5 minutes.\n**Reading it:** Non-zero means the node is actively rejecting abusive connections.\n**Healthy range:** at or near zero.\n**Watch for:** Sustained non-zero drops (ongoing abuse or a misbehaving client/peer being throttled).\n**Source:** include/xrpl/resource/detail/Logic.h Logic::Stats ctor",
"type": "stat",
"gridPos": {
"h": 8,
"h": 4,
"w": 12,
"x": 12,
"y": 8
"y": 30
},
"options": {
"tooltip": {
@@ -399,7 +453,24 @@
}
},
"overrides": []
}
},
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2,
"id": 10
},
{
"title": "gRPC (Spans)",
"type": "row",
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 34
},
"collapsed": false,
"panels": [],
"id": 11
},
{
"title": "gRPC Request Rate by Method (Spans)",
@@ -409,7 +480,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 32
"y": 35
},
"options": {
"tooltip": {
@@ -436,11 +507,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 12
},
{
"title": "gRPC Latency P95 by Method (Spans)",
@@ -450,7 +525,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 32
"y": 35
},
"options": {
"tooltip": {
@@ -477,11 +552,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 13
},
{
"title": "gRPC Error Rate by Status (Spans)",
@@ -491,7 +570,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 40
"y": 43
},
"options": {
"tooltip": {
@@ -518,11 +597,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 14
},
{
"title": "Pathfinding Compute Duration (Spans)",
@@ -532,7 +615,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 40
"y": 43
},
"options": {
"tooltip": {
@@ -567,11 +650,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 15
},
{
"title": "Pathfinding Request & Discovery Rate (Spans)",
@@ -579,9 +666,9 @@
"type": "timeseries",
"gridPos": {
"h": 8,
"w": 24,
"w": 12,
"x": 0,
"y": 48
"y": 51
},
"options": {
"tooltip": {
@@ -616,11 +703,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 16
}
],
"schemaVersion": 39,

View File

@@ -16,7 +16,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 24
"y": 0
},
"options": {
"tooltip": {
@@ -43,11 +43,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 1
},
{
"title": "RPC Latency P95 by Command",
@@ -57,7 +61,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 24
"y": 0
},
"options": {
"tooltip": {
@@ -84,18 +88,22 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 2
},
{
"title": "RPC Error Rate",
"title": "RPC Error Rate [$xrpl_network_type]",
"description": "**What:** Percentage of each RPC command's calls that ended in an error.\n**How it's computed:** Error calls divided by total calls per command over a 5-minute window, per node.\n**Reading it:** Green below 1%, yellow 1-5%, red above 5%.\n**Healthy range:** Below 1% for healthy commands.\n**Watch for:** A sustained error spike on one command is consistent with a client probing or misusing that endpoint.\n**Source:** src/xrpld/rpc/detail/RPCHandler.cpp:callMethod",
"type": "bargauge",
"gridPos": {
"h": 8,
"h": 4,
"w": 12,
"x": 0,
"y": 8
@@ -137,7 +145,11 @@
}
},
"overrides": []
}
},
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2,
"id": 3
},
{
"title": "RPC Latency Heatmap",
@@ -146,8 +158,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 8
"x": 0,
"y": 12
},
"options": {
"tooltip": {
@@ -178,7 +190,8 @@
"spanNulls": 1800000
}
}
}
},
"id": 4
},
{
"title": "Overall RPC Throughput",
@@ -187,8 +200,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 16
"x": 12,
"y": 12
},
"options": {
"tooltip": {
@@ -223,11 +236,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 5
},
{
"title": "RPC Success vs Error",
@@ -236,8 +253,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 16
"x": 0,
"y": 20
},
"options": {
"tooltip": {
@@ -272,21 +289,25 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 6
},
{
"title": "Top Commands by Volume",
"title": "Top Commands by Volume [$xrpl_network_type]",
"description": "**What:** The ten most-called RPC commands by total invocations recently.\n**How it's computed:** Ranked total counts per command over a 5-minute window, per node.\n**Reading it:** Identifies the hottest API endpoints driving node load.\n**Healthy range:** Workload-dependent.\n**Watch for:** An unexpected command dominating the ranking can indicate scripted abuse or a misbehaving client.\n**Source:** src/xrpld/rpc/detail/RPCHandler.cpp:callMethod",
"type": "bargauge",
"gridPos": {
"h": 8,
"h": 4,
"w": 12,
"x": 0,
"y": 0
"y": 28
},
"options": {
"tooltip": {
@@ -309,17 +330,21 @@
"unit": "none"
},
"overrides": []
}
},
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2,
"id": 7
},
{
"title": "WebSocket Message Rate",
"title": "WebSocket Message Rate [$xrpl_network_type]",
"description": "**What:** Rate of incoming WebSocket RPC messages the server processes.\n**How it's computed:** Per-second rate over a 5-minute window, per node.\n**Reading it:** Non-zero only when clients connect over WebSocket rather than HTTP.\n**Healthy range:** Zero is normal for HTTP-only deployments; otherwise workload-dependent.\n**Watch for:** An unexpected surge points to a chatty or abusive WebSocket client.\n**Source:** src/xrpld/rpc/detail/ServerHandler.cpp:ServerHandler::processSession",
"type": "stat",
"gridPos": {
"h": 8,
"h": 4,
"w": 12,
"x": 12,
"y": 0
"y": 28
},
"options": {
"tooltip": {
@@ -342,7 +367,11 @@
"unit": "suffix: messages/s"
},
"overrides": []
}
},
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2,
"id": 8
},
{
"title": "RPC Resource Cost by Command",
@@ -350,7 +379,7 @@
"type": "timeseries",
"gridPos": {
"h": 8,
"w": 12,
"w": 24,
"x": 0,
"y": 32
},
@@ -384,11 +413,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 9
},
{
"title": "Batch vs Single RPC Requests",
@@ -397,8 +430,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 32
"x": 0,
"y": 40
},
"options": {
"tooltip": {
@@ -433,11 +466,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 10
}
],
"schemaVersion": 39,

View File

@@ -51,11 +51,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 1
},
{
"title": "Transaction Processing Latency by Type",
@@ -63,9 +67,9 @@
"type": "timeseries",
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 0
"w": 24,
"x": 0,
"y": 8
},
"options": {
"tooltip": {
@@ -105,11 +109,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 2
},
{
"title": "Transaction Path Distribution",
@@ -119,7 +127,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 8
"y": 16
},
"options": {
"tooltip": {
@@ -142,7 +150,8 @@
"unit": "short"
},
"overrides": []
}
},
"id": 3
},
{
"title": "Transaction Receive vs Suppressed",
@@ -152,7 +161,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 8
"y": 16
},
"options": {
"tooltip": {
@@ -179,11 +188,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 4
},
{
"title": "Transaction Processing Duration Heatmap",
@@ -193,7 +206,7 @@
"h": 8,
"w": 12,
"x": 0,
"y": 16
"y": 24
},
"options": {
"tooltip": {
@@ -224,7 +237,8 @@
"spanNulls": 1800000
}
}
}
},
"id": 5
},
{
"title": "Transaction Apply Duration per Ledger",
@@ -234,7 +248,7 @@
"h": 8,
"w": 12,
"x": 12,
"y": 16
"y": 24
},
"options": {
"tooltip": {
@@ -269,21 +283,25 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 6
},
{
"title": "Transaction Apply Failed Rate",
"title": "Transaction Apply Failed Rate [$xrpl_network_type]",
"description": "**What:** Rate of transactor-stage applies that returned a non-success result while building a ledger.\n**How it's computed:** Per-second rate of tx.transactor spans at stage=apply whose ter_result is not tesSUCCESS, per node.\n**Reading it:** Green below 1/s, yellow 1-5/s, red above 5/s.\n**Healthy range:** A steady low non-zero rate is normal (e.g. tefPAST_SEQ, tecUNFUNDED and other benign conflicts).\n**Watch for:** A sustained jump above the normal baseline can indicate malformed transaction floods or a systemic issue.\n**Source:** src/libxrpl/tx/Transactor.cpp:Transactor::operator()",
"type": "stat",
"gridPos": {
"h": 8,
"h": 4,
"w": 12,
"x": 0,
"y": 24
"y": 32
},
"options": {
"tooltip": {
@@ -323,7 +341,24 @@
}
},
"overrides": []
}
},
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2,
"id": 7
},
{
"title": "Throughput & Results",
"type": "row",
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 36
},
"collapsed": false,
"panels": [],
"id": 8
},
{
"title": "Transaction Rate by Type",
@@ -331,9 +366,9 @@
"type": "timeseries",
"gridPos": {
"h": 8,
"w": 12,
"w": 24,
"x": 0,
"y": 32
"y": 37
},
"options": {
"tooltip": {
@@ -365,11 +400,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 9
},
{
"title": "Transaction Results by Type",
@@ -377,9 +416,9 @@
"type": "timeseries",
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 32
"w": 24,
"x": 0,
"y": 45
},
"options": {
"tooltip": {
@@ -411,21 +450,25 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 10
},
{
"title": "TxQ Accept: Applied Ratio per Node (State Timeline)",
"title": "TxQ Accept: Applied Ratio per Node (State Timeline) [$xrpl_network_type]",
"description": "**What:** Applied fraction of TxQ accepts per node over time: the share of queued transactions that were included in a ledger versus removed on failure.\n**How it's computed:** Per node, applied accepts divided by applied-plus-failed accepts over a 5-minute window.\n**Reading it:** Green (>=90% applied) is a healthy drain; yellow is degraded; red means accepts are mostly failing.\n**Healthy range:** At or near 100% applied when the queue is draining healthily; workload-dependent.\n**Watch for:** A node dropping into yellow or red, which signals queue pressure, under-bidding, or fee escalation on that node.\n**Source:** src/xrpld/app/misc/detail/TxQ.cpp:TxQ::accept",
"type": "state-timeline",
"gridPos": {
"h": 8,
"w": 8,
"w": 12,
"x": 0,
"y": 40
"y": 53
},
"options": {
"mergeValues": true,
@@ -476,7 +519,11 @@
}
},
"overrides": []
}
},
"repeat": "xrpl_network_type",
"repeatDirection": "h",
"maxPerRow": 2,
"id": 11
},
{
"title": "Transactor Duration by Type (p95)",
@@ -484,9 +531,9 @@
"type": "timeseries",
"gridPos": {
"h": 8,
"w": 16,
"x": 8,
"y": 40
"w": 24,
"x": 0,
"y": 61
},
"options": {
"tooltip": {
@@ -518,11 +565,28 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 12
},
{
"title": "Transaction Queue",
"type": "row",
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 69
},
"collapsed": false,
"panels": [],
"id": 13
},
{
"title": "TxQ Enqueue Rate by Transaction Type",
@@ -530,9 +594,9 @@
"type": "timeseries",
"gridPos": {
"h": 8,
"w": 24,
"w": 12,
"x": 0,
"y": 48
"y": 70
},
"options": {
"tooltip": {
@@ -559,11 +623,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 14
},
{
"title": "Queue Accept (Drain) Duration per Ledger",
@@ -572,8 +640,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 56
"x": 12,
"y": 70
},
"options": {
"tooltip": {
@@ -608,11 +676,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 15
},
{
"title": "Queue Cleanup Rate (Expired Entries)",
@@ -621,8 +693,8 @@
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 56
"x": 0,
"y": 78
},
"options": {
"tooltip": {
@@ -649,11 +721,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 16
},
{
"title": "Tx Apply Pipeline Rate by Stage",
@@ -661,9 +737,9 @@
"type": "timeseries",
"gridPos": {
"h": 8,
"w": 12,
"w": 24,
"x": 0,
"y": 64
"y": 86
},
"options": {
"tooltip": {
@@ -695,11 +771,28 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 17
},
{
"title": "Apply Pipeline",
"type": "row",
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 94
},
"collapsed": false,
"panels": [],
"id": 18
},
{
"title": "Tx Apply Pipeline Latency by Stage (p95)",
@@ -707,9 +800,9 @@
"type": "timeseries",
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 64
"w": 24,
"x": 0,
"y": 95
},
"options": {
"tooltip": {
@@ -741,11 +834,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 19
},
{
"title": "Tx Apply Pipeline Failure Rate by Stage",
@@ -755,7 +852,7 @@
"h": 8,
"w": 24,
"x": 0,
"y": 80
"y": 103
},
"options": {
"tooltip": {
@@ -787,11 +884,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 20
},
{
"title": "Tx Apply Pipeline Latency by Type and Stage (p95)",
@@ -801,7 +902,7 @@
"h": 8,
"w": 24,
"x": 0,
"y": 72
"y": 111
},
"options": {
"tooltip": {
@@ -833,11 +934,15 @@
"spanNulls": 1800000,
"insertNulls": false,
"showPoints": "auto",
"pointSize": 3
"pointSize": 5,
"lineWidth": 1,
"fillOpacity": 0,
"gradientMode": "none"
}
},
"overrides": []
}
},
"id": 21
}
],
"schemaVersion": 39,