Merge branch 'pratik/otel-phase7-native-metrics' into pratik/otel-phase8-log-correlation

This commit is contained in:
Pratik Mankawde
2026-08-07 11:32:13 +01:00
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,