Merge branch 'pratik/otel-phase9-metric-gap-fill' into pratik/otel-phase10-workload-validation

This commit is contained in:
Pratik Mankawde
2026-06-04 14:10:27 +01:00
8 changed files with 437 additions and 239 deletions

View File

@@ -30,56 +30,56 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_ledger_data_get_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_ledger_data_get_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Ledger Data Get [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_ledger_data_share_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_ledger_data_share_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Ledger Data Share [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_ledger_data_Transaction_Set_candidate_get_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_ledger_data_Transaction_Set_candidate_get_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "TX Set Candidate Get [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_ledger_data_Transaction_Set_candidate_share_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_ledger_data_Transaction_Set_candidate_share_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "TX Set Candidate Share [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_ledger_data_Transaction_Node_get_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_ledger_data_Transaction_Node_get_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "TX Node Get [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_ledger_data_Transaction_Node_share_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_ledger_data_Transaction_Node_share_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "TX Node Share [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_ledger_data_Account_State_Node_get_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_ledger_data_Account_State_Node_get_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Account State Node Get [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_ledger_data_Account_State_Node_share_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_ledger_data_Account_State_Node_share_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Account State Node Share [{{exported_instance}}]"
}
],
@@ -118,56 +118,56 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_ledger_share_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_ledger_share_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Ledger Share In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_ledger_get_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_ledger_get_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Ledger Get In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_ledger_Transaction_Set_candidate_share_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_ledger_Transaction_Set_candidate_share_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "TX Set Candidate Share [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_ledger_Transaction_Set_candidate_get_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_ledger_Transaction_Set_candidate_get_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "TX Set Candidate Get [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_ledger_Transaction_node_share_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_ledger_Transaction_node_share_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "TX Node Share [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_ledger_Transaction_node_get_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_ledger_Transaction_node_get_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "TX Node Get [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_ledger_Account_State_node_share_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_ledger_Account_State_node_share_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Account State Share [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_ledger_Account_State_node_get_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_ledger_Account_State_node_get_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Account State Get [{{exported_instance}}]"
}
],
@@ -206,56 +206,56 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_Ledger_get_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_Ledger_get_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Ledger Get [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_Ledger_share_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_Ledger_share_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Ledger Share [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_Transaction_get_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_Transaction_get_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Transaction Get [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_Transaction_share_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_Transaction_share_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Transaction Share [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_Transaction_node_get_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_Transaction_node_get_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "TX Node Get [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_Transaction_node_share_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_Transaction_node_share_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "TX Node Share [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_Account_State_node_get_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_Account_State_node_get_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Account State Get [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_Account_State_node_share_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_Account_State_node_share_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Account State Share [{{exported_instance}}]"
}
],
@@ -294,49 +294,49 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_CAS_get_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_CAS_get_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "CAS Get [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_CAS_share_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_CAS_share_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "CAS Share [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_Fetch_Pack_share_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_Fetch_Pack_share_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Fetch Pack Share [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_Fetch_Pack_get_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_Fetch_Pack_get_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Fetch Pack Get [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_Transactions_get_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_Transactions_get_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Transactions Get [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_get_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_get_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Aggregate Get [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_share_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_share_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Aggregate Share [{{exported_instance}}]"
}
],
@@ -375,49 +375,49 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_Ledger_get_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_Ledger_get_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "Ledger Get [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_Transaction_get_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_Transaction_get_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "Transaction Get [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_Transaction_node_get_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_Transaction_node_get_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "TX Node Get [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_Account_State_node_get_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_Account_State_node_get_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "Account State Get [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_CAS_get_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_CAS_get_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "CAS Get [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_Fetch_Pack_get_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_Fetch_Pack_get_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "Fetch Pack Get [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_getobject_Transactions_get_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_getobject_Transactions_get_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "Transactions Get [{{exported_instance}}]"
}
],
@@ -463,7 +463,7 @@
"datasource": {
"type": "prometheus"
},
"expr": "topk(20, {exported_instance=~\"$node\", __name__=~\"rippled_.*_Bytes_In\", __name__!~\"rippled_total_.*\"})",
"expr": "topk(20, {exported_instance=~\"$node\", __name__=~\"xrpld_.*_Bytes_In\", __name__!~\"xrpld_total_.*\"})",
"legendFormat": "{{__name__}} [{{exported_instance}}]"
}
],
@@ -501,7 +501,7 @@
"label": "Node",
"description": "Filter by rippled node (service.instance.id)",
"type": "query",
"query": "label_values(rippled_ledger_data_get_Bytes_In, exported_instance)",
"query": "label_values(xrpld_ledger_data_get_Bytes_In, exported_instance)",
"datasource": {
"type": "prometheus",
"uid": "prometheus"

View File

@@ -30,14 +30,14 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_Peer_Finder_Active_Inbound_Peers{exported_instance=~\"$node\"}",
"expr": "xrpld_Peer_Finder_Active_Inbound_Peers{exported_instance=~\"$node\"}",
"legendFormat": "Inbound Peers [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_Peer_Finder_Active_Outbound_Peers{exported_instance=~\"$node\"}",
"expr": "xrpld_Peer_Finder_Active_Outbound_Peers{exported_instance=~\"$node\"}",
"legendFormat": "Outbound Peers [{{exported_instance}}]"
}
],
@@ -76,7 +76,7 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_Overlay_Peer_Disconnects{exported_instance=~\"$node\"}",
"expr": "xrpld_Overlay_Peer_Disconnects{exported_instance=~\"$node\"}",
"legendFormat": "Disconnects [{{exported_instance}}]"
}
],
@@ -115,14 +115,14 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_total_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_total_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Bytes In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_total_Bytes_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_total_Bytes_Out{exported_instance=~\"$node\"}",
"legendFormat": "Bytes Out [{{exported_instance}}]"
}
],
@@ -161,14 +161,14 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_total_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_total_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "Messages In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_total_Messages_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_total_Messages_Out{exported_instance=~\"$node\"}",
"legendFormat": "Messages Out [{{exported_instance}}]"
}
],
@@ -207,21 +207,21 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_transactions_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_transactions_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "TX Messages In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_transactions_Messages_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_transactions_Messages_Out{exported_instance=~\"$node\"}",
"legendFormat": "TX Messages Out [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_transactions_duplicate_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_transactions_duplicate_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "TX Duplicate In [{{exported_instance}}]"
}
],
@@ -260,28 +260,28 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_proposals_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_proposals_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "Proposals In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_proposals_Messages_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_proposals_Messages_Out{exported_instance=~\"$node\"}",
"legendFormat": "Proposals Out [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_proposals_untrusted_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_proposals_untrusted_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "Untrusted In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_proposals_duplicate_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_proposals_duplicate_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "Duplicate In [{{exported_instance}}]"
}
],
@@ -320,28 +320,28 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_validations_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_validations_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "Validations In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_validations_Messages_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_validations_Messages_Out{exported_instance=~\"$node\"}",
"legendFormat": "Validations Out [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_validations_untrusted_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_validations_untrusted_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "Untrusted In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_validations_duplicate_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_validations_duplicate_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "Duplicate In [{{exported_instance}}]"
}
],
@@ -380,7 +380,7 @@
"datasource": {
"type": "prometheus"
},
"expr": "topk(10, {exported_instance=~\"$node\", __name__=~\"rippled_.*_Bytes_In\", __name__!~\"rippled_total_.*\"})",
"expr": "topk(10, {exported_instance=~\"$node\", __name__=~\"xrpld_.*_Bytes_In\", __name__!~\"xrpld_total_.*\"})",
"legendFormat": "{{__name__}} [{{exported_instance}}]"
}
],
@@ -392,7 +392,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_transactions_Bytes_In"
"options": "xrpld_transactions_Bytes_In"
},
"properties": [
{
@@ -404,7 +404,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_proposals_Bytes_In"
"options": "xrpld_proposals_Bytes_In"
},
"properties": [
{
@@ -416,7 +416,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_validations_Bytes_In"
"options": "xrpld_validations_Bytes_In"
},
"properties": [
{
@@ -428,7 +428,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_overhead_Bytes_In"
"options": "xrpld_overhead_Bytes_In"
},
"properties": [
{
@@ -440,7 +440,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_overhead_overlay_Bytes_In"
"options": "xrpld_overhead_overlay_Bytes_In"
},
"properties": [
{
@@ -452,7 +452,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_ping_Bytes_In"
"options": "xrpld_ping_Bytes_In"
},
"properties": [
{
@@ -464,7 +464,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_status_Bytes_In"
"options": "xrpld_status_Bytes_In"
},
"properties": [
{
@@ -476,7 +476,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_getObject_Bytes_In"
"options": "xrpld_getObject_Bytes_In"
},
"properties": [
{
@@ -488,7 +488,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_haveTxSet_Bytes_In"
"options": "xrpld_haveTxSet_Bytes_In"
},
"properties": [
{
@@ -500,7 +500,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_ledgerData_Bytes_In"
"options": "xrpld_ledgerData_Bytes_In"
},
"properties": [
{
@@ -512,7 +512,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_ledger_share_Bytes_In"
"options": "xrpld_ledger_share_Bytes_In"
},
"properties": [
{
@@ -524,7 +524,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_ledger_data_get_Bytes_In"
"options": "xrpld_ledger_data_get_Bytes_In"
},
"properties": [
{
@@ -536,7 +536,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_ledger_data_share_Bytes_In"
"options": "xrpld_ledger_data_share_Bytes_In"
},
"properties": [
{
@@ -548,7 +548,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_ledger_data_Account_State_Node_get_Bytes_In"
"options": "xrpld_ledger_data_Account_State_Node_get_Bytes_In"
},
"properties": [
{
@@ -560,7 +560,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_ledger_data_Account_State_Node_share_Bytes_In"
"options": "xrpld_ledger_data_Account_State_Node_share_Bytes_In"
},
"properties": [
{
@@ -572,7 +572,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_ledger_data_Transaction_Node_get_Bytes_In"
"options": "xrpld_ledger_data_Transaction_Node_get_Bytes_In"
},
"properties": [
{
@@ -584,7 +584,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_ledger_data_Transaction_Node_share_Bytes_In"
"options": "xrpld_ledger_data_Transaction_Node_share_Bytes_In"
},
"properties": [
{
@@ -596,7 +596,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_ledger_data_Transaction_Set_candidate_get_Bytes_In"
"options": "xrpld_ledger_data_Transaction_Set_candidate_get_Bytes_In"
},
"properties": [
{
@@ -608,7 +608,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_ledger_Account_State_node_share_Bytes_In"
"options": "xrpld_ledger_Account_State_node_share_Bytes_In"
},
"properties": [
{
@@ -620,7 +620,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_ledger_Transaction_Set_candidate_share_Bytes_In"
"options": "xrpld_ledger_Transaction_Set_candidate_share_Bytes_In"
},
"properties": [
{
@@ -632,7 +632,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_ledger_Transaction_node_share_Bytes_In"
"options": "xrpld_ledger_Transaction_node_share_Bytes_In"
},
"properties": [
{
@@ -644,7 +644,7 @@
{
"matcher": {
"id": "byName",
"options": "rippled_set_get_Bytes_In"
"options": "xrpld_set_get_Bytes_In"
},
"properties": [
{
@@ -677,42 +677,42 @@
"datasource": {
"type": "prometheus"
},
"expr": "rate(rippled_transactions_duplicate_Bytes_In{exported_instance=~\"$node\"}[5m])",
"expr": "rate(xrpld_transactions_duplicate_Bytes_In{exported_instance=~\"$node\"}[5m])",
"legendFormat": "TX Duplicate In"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rate(rippled_transactions_duplicate_Bytes_Out{exported_instance=~\"$node\"}[5m])",
"expr": "rate(xrpld_transactions_duplicate_Bytes_Out{exported_instance=~\"$node\"}[5m])",
"legendFormat": "TX Duplicate Out"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rate(rippled_proposals_duplicate_Bytes_In{exported_instance=~\"$node\"}[5m])",
"expr": "rate(xrpld_proposals_duplicate_Bytes_In{exported_instance=~\"$node\"}[5m])",
"legendFormat": "Proposals Duplicate In"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rate(rippled_proposals_duplicate_Bytes_Out{exported_instance=~\"$node\"}[5m])",
"expr": "rate(xrpld_proposals_duplicate_Bytes_Out{exported_instance=~\"$node\"}[5m])",
"legendFormat": "Proposals Duplicate Out"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rate(rippled_validations_duplicate_Bytes_In{exported_instance=~\"$node\"}[5m])",
"expr": "rate(xrpld_validations_duplicate_Bytes_In{exported_instance=~\"$node\"}[5m])",
"legendFormat": "Validations Duplicate In"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rate(rippled_validations_duplicate_Bytes_Out{exported_instance=~\"$node\"}[5m])",
"expr": "rate(xrpld_validations_duplicate_Bytes_Out{exported_instance=~\"$node\"}[5m])",
"legendFormat": "Validations Duplicate Out"
}
],
@@ -751,7 +751,7 @@
"datasource": {
"type": "prometheus"
},
"expr": "topk(15, rate({__name__=~\"rippled_.*_Bytes_In\", __name__!~\"rippled_total_{exported_instance=~\"$node\"}.*\"}[5m]))",
"expr": "topk(15, rate({__name__=~\"xrpld_.*_Bytes_In\", __name__!~\"xrpld_total_{exported_instance=~\"$node\"}.*\"}[5m]))",
"legendFormat": "{{__name__}}"
}
],
@@ -779,7 +779,7 @@
"label": "Node",
"description": "Filter by rippled node (service.instance.id)",
"type": "query",
"query": "label_values(rippled_Peer_Finder_Active_Inbound_Peers, exported_instance)",
"query": "label_values(xrpld_Peer_Finder_Active_Inbound_Peers, exported_instance)",
"datasource": {
"type": "prometheus",
"uid": "prometheus"

View File

@@ -30,7 +30,7 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_LedgerMaster_Validated_Ledger_Age{exported_instance=~\"$node\"}",
"expr": "xrpld_LedgerMaster_Validated_Ledger_Age{exported_instance=~\"$node\"}",
"legendFormat": "Validated Age [{{exported_instance}}]"
}
],
@@ -79,7 +79,7 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_LedgerMaster_Published_Ledger_Age{exported_instance=~\"$node\"}",
"expr": "xrpld_LedgerMaster_Published_Ledger_Age{exported_instance=~\"$node\"}",
"legendFormat": "Published Age [{{exported_instance}}]"
}
],
@@ -128,35 +128,35 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_State_Accounting_Full_duration{exported_instance=~\"$node\"}",
"expr": "xrpld_State_Accounting_Full_duration{exported_instance=~\"$node\"}",
"legendFormat": "Full [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_State_Accounting_Tracking_duration{exported_instance=~\"$node\"}",
"expr": "xrpld_State_Accounting_Tracking_duration{exported_instance=~\"$node\"}",
"legendFormat": "Tracking [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_State_Accounting_Syncing_duration{exported_instance=~\"$node\"}",
"expr": "xrpld_State_Accounting_Syncing_duration{exported_instance=~\"$node\"}",
"legendFormat": "Syncing [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_State_Accounting_Connected_duration{exported_instance=~\"$node\"}",
"expr": "xrpld_State_Accounting_Connected_duration{exported_instance=~\"$node\"}",
"legendFormat": "Connected [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_State_Accounting_Disconnected_duration{exported_instance=~\"$node\"}",
"expr": "xrpld_State_Accounting_Disconnected_duration{exported_instance=~\"$node\"}",
"legendFormat": "Disconnected [{{exported_instance}}]"
}
],
@@ -195,35 +195,35 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_State_Accounting_Full_transitions{exported_instance=~\"$node\"}",
"expr": "xrpld_State_Accounting_Full_transitions{exported_instance=~\"$node\"}",
"legendFormat": "Full [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_State_Accounting_Tracking_transitions{exported_instance=~\"$node\"}",
"expr": "xrpld_State_Accounting_Tracking_transitions{exported_instance=~\"$node\"}",
"legendFormat": "Tracking [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_State_Accounting_Syncing_transitions{exported_instance=~\"$node\"}",
"expr": "xrpld_State_Accounting_Syncing_transitions{exported_instance=~\"$node\"}",
"legendFormat": "Syncing [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_State_Accounting_Connected_transitions{exported_instance=~\"$node\"}",
"expr": "xrpld_State_Accounting_Connected_transitions{exported_instance=~\"$node\"}",
"legendFormat": "Connected [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_State_Accounting_Disconnected_transitions{exported_instance=~\"$node\"}",
"expr": "xrpld_State_Accounting_Disconnected_transitions{exported_instance=~\"$node\"}",
"legendFormat": "Disconnected [{{exported_instance}}]"
}
],
@@ -262,14 +262,14 @@
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(rippled_ios_latency_bucket{exported_instance=~\"$node\"}[5m])))",
"expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_ios_latency_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "P95 I/O Latency [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(rippled_ios_latency_bucket{exported_instance=~\"$node\"}[5m])))",
"expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(xrpld_ios_latency_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "P50 I/O Latency [{{exported_instance}}]"
}
],
@@ -308,7 +308,7 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_job_count{exported_instance=~\"$node\"}",
"expr": "xrpld_job_count{exported_instance=~\"$node\"}",
"legendFormat": "Job Queue Depth [{{exported_instance}}]"
}
],
@@ -347,7 +347,7 @@
"datasource": {
"type": "prometheus"
},
"expr": "rate(rippled_ledger_fetches_total{exported_instance=~\"$node\"}[5m])",
"expr": "rate(xrpld_ledger_fetches_total{exported_instance=~\"$node\"}[5m])",
"legendFormat": "Fetches / Sec [{{exported_instance}}]"
}
],
@@ -380,7 +380,7 @@
"datasource": {
"type": "prometheus"
},
"expr": "rate(rippled_ledger_history_mismatch_total{exported_instance=~\"$node\"}[5m])",
"expr": "rate(xrpld_ledger_history_mismatch_total{exported_instance=~\"$node\"}[5m])",
"legendFormat": "Mismatches / Sec [{{exported_instance}}]"
}
],
@@ -1594,77 +1594,77 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_acceptLedger{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_acceptLedger_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Accept Ledger [{{quantile}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_advanceLedger{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_advanceLedger_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Advance Ledger [{{quantile}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_transaction{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_transaction_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Transaction [{{quantile}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_writeObjects{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_writeObjects_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Write Objects [{{quantile}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_heartbeat{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_heartbeat_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Heartbeat [{{quantile}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_sweep{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_sweep_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Sweep [{{quantile}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_trustedValidation{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_trustedValidation_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Trusted Validation [{{quantile}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_trustedProposal{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_trustedProposal_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Trusted Proposal [{{quantile}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_publishNewLedger{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_publishNewLedger_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Publish New Ledger [{{quantile}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_clientRPC{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_clientRPC_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Client RPC [{{quantile}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_ledgerData{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_ledgerData_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Ledger Data [{{quantile}}]"
}
],
@@ -1703,77 +1703,77 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_acceptLedger_q{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_acceptLedger_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Accept Ledger [{{quantile}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_advanceLedger_q{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_advanceLedger_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Advance Ledger [{{quantile}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_transaction_q{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_transaction_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Transaction [{{quantile}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_writeObjects_q{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_writeObjects_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Write Objects [{{quantile}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_heartbeat_q{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_heartbeat_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Heartbeat [{{quantile}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_sweep_q{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_sweep_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Sweep [{{quantile}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_trustedValidation_q{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_trustedValidation_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Trusted Validation [{{quantile}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_trustedProposal_q{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_trustedProposal_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Trusted Proposal [{{quantile}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_publishNewLedger_q{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_publishNewLedger_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Publish New Ledger [{{quantile}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_clientRPC_q{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_clientRPC_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Client RPC [{{quantile}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_ledgerData_q{quantile=\"$quantile\", exported_instance=~\"$node\"}",
"expr": "histogram_quantile($quantile, sum by (le, exported_instance) (rate(xrpld_ledgerData_q_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "Ledger Data [{{quantile}}]"
}
],
@@ -1812,7 +1812,7 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_Node_family_full_below_cache_size{exported_instance=~\"$node\"}",
"expr": "xrpld_Node_family_full_below_cache_size{exported_instance=~\"$node\"}",
"legendFormat": "FullBelowCache Size"
}
],
@@ -1851,7 +1851,7 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_Node_family_full_below_cache_hit_rate{exported_instance=~\"$node\"}",
"expr": "xrpld_Node_family_full_below_cache_hit_rate{exported_instance=~\"$node\"}",
"legendFormat": "Hit Rate"
}
],
@@ -1901,7 +1901,7 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_LedgerMaster_Published_Ledger_Age{exported_instance=~\"$node\"} - rippled_LedgerMaster_Validated_Ledger_Age{exported_instance=~\"$node\"}",
"expr": "xrpld_LedgerMaster_Published_Ledger_Age{exported_instance=~\"$node\"} - xrpld_LedgerMaster_Validated_Ledger_Age{exported_instance=~\"$node\"}",
"legendFormat": "Publish Gap"
}
],
@@ -1949,14 +1949,14 @@
"datasource": {
"type": "prometheus"
},
"expr": "rate(rippled_State_Accounting_Full_duration{exported_instance=~\"$node\"}[5m]) / 1000000",
"expr": "rate(xrpld_State_Accounting_Full_duration{exported_instance=~\"$node\"}[5m]) / 1000000",
"legendFormat": "Full Mode Rate"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rate(rippled_State_Accounting_Tracking_duration{exported_instance=~\"$node\"}[5m]) / 1000000",
"expr": "rate(xrpld_State_Accounting_Tracking_duration{exported_instance=~\"$node\"}[5m]) / 1000000",
"legendFormat": "Tracking Mode Rate"
}
],
@@ -1995,8 +1995,8 @@
"datasource": {
"type": "prometheus"
},
"expr": "{__name__=~\"rippled_(makeFetchPack|publishAcqLedger|untrustedValidation|manifest|localTransaction|ledgerReplayRequest|ledgerRequest|untrustedProposal|ledgerReplayTask|ledgerData|clientCommand|clientSubscribe|clientFeeChange|clientConsensus|clientAccountHistory|clientRPC|clientWebsocket|RPC|updatePaths|transaction|batch|advanceLedger|publishNewLedger|fetchTxnData|writeAhead|trustedValidation|writeObjects|acceptLedger|trustedProposal|sweep|clusterReport|heartbeat|administration|handleHaveTransactions|doTransactions)\", quantile=\"$quantile\", exported_instance=~\"$node\"}",
"legendFormat": "{{__name__}} [{{quantile}}]"
"expr": "histogram_quantile($quantile, sum by (le, __name__) (rate({__name__=~\"xrpld_(makeFetchPack|publishAcqLedger|untrustedValidation|manifest|localTransaction|ledgerReplayRequest|ledgerRequest|untrustedProposal|ledgerReplayTask|ledgerData|clientCommand|clientSubscribe|clientFeeChange|clientConsensus|clientAccountHistory|clientRPC|clientWebsocket|RPC|updatePaths|transaction|batch|advanceLedger|publishNewLedger|fetchTxnData|writeAhead|trustedValidation|writeObjects|acceptLedger|trustedProposal|sweep|clusterReport|heartbeat|administration|handleHaveTransactions|doTransactions)_milliseconds_bucket\", exported_instance=~\"$node\"}[5m])))",
"legendFormat": "{{__name__}}"
}
],
"fieldConfig": {
@@ -2034,8 +2034,8 @@
"datasource": {
"type": "prometheus"
},
"expr": "{__name__=~\"rippled_(makeFetchPack_q|publishAcqLedger_q|untrustedValidation_q|manifest_q|localTransaction_q|ledgerReplayRequest_q|ledgerRequest_q|untrustedProposal_q|ledgerReplayTask_q|ledgerData_q|clientCommand_q|clientSubscribe_q|clientFeeChange_q|clientConsensus_q|clientAccountHistory_q|clientRPC_q|clientWebsocket_q|RPC_q|updatePaths_q|transaction_q|batch_q|advanceLedger_q|publishNewLedger_q|fetchTxnData_q|writeAhead_q|trustedValidation_q|writeObjects_q|acceptLedger_q|trustedProposal_q|sweep_q|clusterReport_q|heartbeat_q|administration_q|handleHaveTransactions_q|doTransactions_q)\", quantile=\"$quantile\", exported_instance=~\"$node\"}",
"legendFormat": "{{__name__}} [{{quantile}}]"
"expr": "histogram_quantile($quantile, sum by (le, __name__) (rate({__name__=~\"xrpld_(makeFetchPack_q|publishAcqLedger_q|untrustedValidation_q|manifest_q|localTransaction_q|ledgerReplayRequest_q|ledgerRequest_q|untrustedProposal_q|ledgerReplayTask_q|ledgerData_q|clientCommand_q|clientSubscribe_q|clientFeeChange_q|clientConsensus_q|clientAccountHistory_q|clientRPC_q|clientWebsocket_q|RPC_q|updatePaths_q|transaction_q|batch_q|advanceLedger_q|publishNewLedger_q|fetchTxnData_q|writeAhead_q|trustedValidation_q|writeObjects_q|acceptLedger_q|trustedProposal_q|sweep_q|clusterReport_q|heartbeat_q|administration_q|handleHaveTransactions_q|doTransactions_q)_milliseconds_bucket\", exported_instance=~\"$node\"}[5m])))",
"legendFormat": "{{__name__}}"
}
],
"fieldConfig": {
@@ -2062,7 +2062,7 @@
"label": "Node",
"description": "Filter by rippled node (service.instance.id)",
"type": "query",
"query": "label_values(rippled_LedgerMaster_Validated_Ledger_Age, exported_instance)",
"query": "label_values(xrpld_LedgerMaster_Validated_Ledger_Age, exported_instance)",
"datasource": {
"type": "prometheus",
"uid": "prometheus"
@@ -2096,6 +2096,40 @@
"multi": true,
"refresh": 2,
"sort": 1
},
{
"name": "quantile",
"label": "Quantile",
"type": "custom",
"query": "0.5,0.75,0.95,0.99",
"current": {
"text": "0.95",
"value": "0.95"
},
"options": [
{
"text": "0.5",
"value": "0.5",
"selected": false
},
{
"text": "0.75",
"value": "0.75",
"selected": false
},
{
"text": "0.95",
"value": "0.95",
"selected": true
},
{
"text": "0.99",
"value": "0.99",
"selected": false
}
],
"includeAll": false,
"multi": false
}
]
},

View File

@@ -30,42 +30,42 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_squelch_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_squelch_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "Squelch In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_squelch_Messages_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_squelch_Messages_Out{exported_instance=~\"$node\"}",
"legendFormat": "Squelch Out [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_squelch_suppressed_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_squelch_suppressed_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "Suppressed In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_squelch_suppressed_Messages_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_squelch_suppressed_Messages_Out{exported_instance=~\"$node\"}",
"legendFormat": "Suppressed Out [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_squelch_ignored_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_squelch_ignored_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "Ignored In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_squelch_ignored_Messages_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_squelch_ignored_Messages_Out{exported_instance=~\"$node\"}",
"legendFormat": "Ignored Out [{{exported_instance}}]"
}
],
@@ -104,42 +104,42 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_overhead_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_overhead_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Base Overhead In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_overhead_Bytes_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_overhead_Bytes_Out{exported_instance=~\"$node\"}",
"legendFormat": "Base Overhead Out [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_overhead_cluster_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_overhead_cluster_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Cluster In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_overhead_cluster_Bytes_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_overhead_cluster_Bytes_Out{exported_instance=~\"$node\"}",
"legendFormat": "Cluster Out [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_overhead_manifest_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_overhead_manifest_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Manifest In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_overhead_manifest_Bytes_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_overhead_manifest_Bytes_Out{exported_instance=~\"$node\"}",
"legendFormat": "Manifest Out [{{exported_instance}}]"
}
],
@@ -178,28 +178,28 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_validator_lists_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_validator_lists_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Bytes In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_validator_lists_Bytes_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_validator_lists_Bytes_Out{exported_instance=~\"$node\"}",
"legendFormat": "Bytes Out [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_validator_lists_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_validator_lists_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "Messages In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_validator_lists_Messages_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_validator_lists_Messages_Out{exported_instance=~\"$node\"}",
"legendFormat": "Messages Out [{{exported_instance}}]"
}
],
@@ -255,28 +255,28 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_set_get_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_set_get_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Set Get In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_set_get_Bytes_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_set_get_Bytes_Out{exported_instance=~\"$node\"}",
"legendFormat": "Set Get Out [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_set_share_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_set_share_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Set Share In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_set_share_Bytes_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_set_share_Bytes_Out{exported_instance=~\"$node\"}",
"legendFormat": "Set Share Out [{{exported_instance}}]"
}
],
@@ -315,28 +315,28 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_have_transactions_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_have_transactions_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "Have TX In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_have_transactions_Messages_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_have_transactions_Messages_Out{exported_instance=~\"$node\"}",
"legendFormat": "Have TX Out [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_requested_transactions_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_requested_transactions_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "Requested TX In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_requested_transactions_Messages_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_requested_transactions_Messages_Out{exported_instance=~\"$node\"}",
"legendFormat": "Requested TX Out [{{exported_instance}}]"
}
],
@@ -375,28 +375,28 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_unknown_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_unknown_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Unknown Bytes In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_unknown_Bytes_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_unknown_Bytes_Out{exported_instance=~\"$node\"}",
"legendFormat": "Unknown Bytes Out [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_unknown_Messages_In{exported_instance=~\"$node\"}",
"expr": "xrpld_unknown_Messages_In{exported_instance=~\"$node\"}",
"legendFormat": "Unknown Messages In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_unknown_Messages_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_unknown_Messages_Out{exported_instance=~\"$node\"}",
"legendFormat": "Unknown Messages Out [{{exported_instance}}]"
}
],
@@ -452,28 +452,28 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_proof_path_request_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_proof_path_request_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Request Bytes In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_proof_path_request_Bytes_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_proof_path_request_Bytes_Out{exported_instance=~\"$node\"}",
"legendFormat": "Request Bytes Out [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_proof_path_response_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_proof_path_response_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Response Bytes In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_proof_path_response_Bytes_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_proof_path_response_Bytes_Out{exported_instance=~\"$node\"}",
"legendFormat": "Response Bytes Out [{{exported_instance}}]"
}
],
@@ -512,28 +512,28 @@
"datasource": {
"type": "prometheus"
},
"expr": "rippled_replay_delta_request_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_replay_delta_request_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Request Bytes In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_replay_delta_request_Bytes_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_replay_delta_request_Bytes_Out{exported_instance=~\"$node\"}",
"legendFormat": "Request Bytes Out [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_replay_delta_response_Bytes_In{exported_instance=~\"$node\"}",
"expr": "xrpld_replay_delta_response_Bytes_In{exported_instance=~\"$node\"}",
"legendFormat": "Response Bytes In [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "rippled_replay_delta_response_Bytes_Out{exported_instance=~\"$node\"}",
"expr": "xrpld_replay_delta_response_Bytes_Out{exported_instance=~\"$node\"}",
"legendFormat": "Response Bytes Out [{{exported_instance}}]"
}
],
@@ -561,7 +561,7 @@
"label": "Node",
"description": "Filter by rippled node (service.instance.id)",
"type": "query",
"query": "label_values(rippled_squelch_Messages_In, exported_instance)",
"query": "label_values(xrpld_squelch_Messages_In, exported_instance)",
"datasource": {
"type": "prometheus",
"uid": "prometheus"

View File

@@ -30,7 +30,7 @@
"datasource": {
"type": "prometheus"
},
"expr": "rate(rippled_rpc_requests_total{exported_instance=~\"$node\"}[5m])",
"expr": "rate(xrpld_rpc_requests_total{exported_instance=~\"$node\"}[5m])",
"legendFormat": "Requests / Sec [{{exported_instance}}]"
}
],
@@ -62,14 +62,14 @@
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(rippled_rpc_time_bucket{exported_instance=~\"$node\"}[5m])))",
"expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_rpc_time_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "P95 Response Time [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(rippled_rpc_time_bucket{exported_instance=~\"$node\"}[5m])))",
"expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(xrpld_rpc_time_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "P50 Response Time [{{exported_instance}}]"
}
],
@@ -108,14 +108,14 @@
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(rippled_rpc_size_bucket{exported_instance=~\"$node\"}[5m])))",
"expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_rpc_size_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "P95 Response Size [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(rippled_rpc_size_bucket{exported_instance=~\"$node\"}[5m])))",
"expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(xrpld_rpc_size_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "P50 Response Size [{{exported_instance}}]"
}
],
@@ -154,28 +154,28 @@
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(rippled_rpc_time_bucket{exported_instance=~\"$node\"}[5m])))",
"expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(xrpld_rpc_time_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "P50 [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.9, sum by (le, exported_instance) (rate(rippled_rpc_time_bucket{exported_instance=~\"$node\"}[5m])))",
"expr": "histogram_quantile(0.9, sum by (le, exported_instance) (rate(xrpld_rpc_time_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "P90 [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(rippled_rpc_time_bucket{exported_instance=~\"$node\"}[5m])))",
"expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_rpc_time_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "P95 [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.99, sum by (le, exported_instance) (rate(rippled_rpc_time_bucket{exported_instance=~\"$node\"}[5m])))",
"expr": "histogram_quantile(0.99, sum by (le, exported_instance) (rate(xrpld_rpc_time_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "P99 [{{exported_instance}}]"
}
],
@@ -214,14 +214,14 @@
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(rippled_pathfind_fast_bucket{exported_instance=~\"$node\"}[5m])))",
"expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_pathfind_fast_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "P95 Fast Pathfind [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(rippled_pathfind_fast_bucket{exported_instance=~\"$node\"}[5m])))",
"expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(xrpld_pathfind_fast_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "P50 Fast Pathfind [{{exported_instance}}]"
}
],
@@ -260,14 +260,14 @@
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(rippled_pathfind_full_bucket{exported_instance=~\"$node\"}[5m])))",
"expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_pathfind_full_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "P95 Full Pathfind [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(rippled_pathfind_full_bucket{exported_instance=~\"$node\"}[5m])))",
"expr": "histogram_quantile(0.5, sum by (le, exported_instance) (rate(xrpld_pathfind_full_milliseconds_bucket{exported_instance=~\"$node\"}[5m])))",
"legendFormat": "P50 Full Pathfind [{{exported_instance}}]"
}
],
@@ -306,7 +306,7 @@
"datasource": {
"type": "prometheus"
},
"expr": "rate(rippled_warn_total{exported_instance=~\"$node\"}[5m])",
"expr": "rate(xrpld_warn_total{exported_instance=~\"$node\"}[5m])",
"legendFormat": "Warnings / Sec [{{exported_instance}}]"
}
],
@@ -354,7 +354,7 @@
"datasource": {
"type": "prometheus"
},
"expr": "rate(rippled_drop_total{exported_instance=~\"$node\"}[5m])",
"expr": "rate(xrpld_drop_total{exported_instance=~\"$node\"}[5m])",
"legendFormat": "Drops / Sec [{{exported_instance}}]"
}
],
@@ -391,7 +391,7 @@
"label": "Node",
"description": "Filter by rippled node (service.instance.id)",
"type": "query",
"query": "label_values(rippled_rpc_requests_total, exported_instance)",
"query": "label_values(xrpld_rpc_requests_total, exported_instance)",
"datasource": {
"type": "prometheus",
"uid": "prometheus"

View File

@@ -169,8 +169,8 @@
}
},
{
"title": "Job Queue Wait Time (P50, P95, P99)",
"description": "Histogram quantiles for time jobs spend waiting in the queue before execution starts. High values indicate thread pool saturation.",
"title": "Job Queue Wait Time",
"description": "Job queue wait time distribution (p75 typical, p99 tail). How long jobs sit in the queue before a worker picks them up.",
"type": "timeseries",
"gridPos": {
"h": 8,
@@ -189,22 +189,15 @@
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(xrpld_job_queued_duration_us_bucket{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m])))",
"legendFormat": "P50 [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_job_queued_duration_us_bucket{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m])))",
"legendFormat": "P95 [{{exported_instance}}]"
"expr": "histogram_quantile(0.75, sum by (le, exported_instance) (rate(xrpld_job_queued_duration_us_bucket{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m])))",
"legendFormat": "p75 Wait [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.99, sum by (le, exported_instance) (rate(xrpld_job_queued_duration_us_bucket{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m])))",
"legendFormat": "P99 [{{exported_instance}}]"
"legendFormat": "p99 Wait [{{exported_instance}}]"
}
],
"fieldConfig": {
@@ -228,8 +221,8 @@
}
},
{
"title": "Job Execution Time (P50, P95, P99)",
"description": "Histogram quantiles for actual job execution time. High values indicate expensive operations or resource contention.",
"title": "Job Execution Time",
"description": "Job execution time distribution (p75 typical, p99 tail). How long jobs run once started.",
"type": "timeseries",
"gridPos": {
"h": 8,
@@ -248,22 +241,15 @@
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(xrpld_job_running_duration_us_bucket{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m])))",
"legendFormat": "P50 [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_job_running_duration_us_bucket{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m])))",
"legendFormat": "P95 [{{exported_instance}}]"
"expr": "histogram_quantile(0.75, sum by (le, exported_instance) (rate(xrpld_job_running_duration_us_bucket{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m])))",
"legendFormat": "p75 Exec [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.99, sum by (le, exported_instance) (rate(xrpld_job_running_duration_us_bucket{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m])))",
"legendFormat": "P99 [{{exported_instance}}]"
"legendFormat": "p99 Exec [{{exported_instance}}]"
}
],
"fieldConfig": {
@@ -287,8 +273,8 @@
}
},
{
"title": "Per-Job-Type Execution Time (P95)",
"description": "95th percentile execution time broken down by job type. Identifies the slowest job types.",
"title": "Per-Job-Type Execution Time (p99)",
"description": "Top 10 slowest job types by p99 execution time.",
"type": "timeseries",
"gridPos": {
"h": 8,
@@ -312,7 +298,7 @@
"datasource": {
"type": "prometheus"
},
"expr": "topk(10, histogram_quantile(0.95, sum by (le, job_type, exported_instance) (rate(xrpld_job_running_duration_us_bucket{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m]))))",
"expr": "topk(10, histogram_quantile(0.99, sum by (le, job_type, exported_instance) (rate(xrpld_job_running_duration_us_bucket{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m]))))",
"legendFormat": "{{job_type}} [{{exported_instance}}]"
}
],
@@ -396,6 +382,67 @@
},
"overrides": []
}
},
{
"title": "Current Job Latency (p99 Gauge)",
"description": "At-a-glance p99 job queue wait and execution time over the last 5 minutes. Green < 100ms, yellow 100ms-1s, red > 1s.",
"type": "gauge",
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 40
},
"options": {
"reduceOptions": {
"calcs": ["lastNotNull"],
"fields": "",
"values": false
},
"orientation": "auto",
"showThresholdLabels": false,
"showThresholdMarkers": true
},
"targets": [
{
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.99, sum by (le) (rate(xrpld_job_queued_duration_us_bucket{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m])))",
"legendFormat": "p99 Wait"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.99, sum by (le) (rate(xrpld_job_running_duration_us_bucket{exported_instance=~\"$node\", job_type=~\"$job_type\"}[5m])))",
"legendFormat": "p99 Exec"
}
],
"fieldConfig": {
"defaults": {
"unit": "\u00b5s",
"min": 0,
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "yellow",
"value": 100000
},
{
"color": "red",
"value": 1000000
}
]
}
},
"overrides": []
}
}
],
"schemaVersion": 39,

View File

@@ -169,8 +169,8 @@
}
},
{
"title": "RPC Latency (P50, P95, P99) - All Methods",
"description": "Histogram quantiles for RPC execution time across all methods. Sourced from rpc_method_duration_us histogram.",
"title": "RPC Latency - All Methods",
"description": "RPC method latency distribution (p75 typical, p99 tail) across all methods.",
"type": "timeseries",
"gridPos": {
"h": 8,
@@ -189,22 +189,15 @@
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.50, sum by (le, exported_instance) (rate(xrpld_rpc_method_duration_us_bucket{exported_instance=~\"$node\", method=~\"$method\"}[5m])))",
"legendFormat": "P50 [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.95, sum by (le, exported_instance) (rate(xrpld_rpc_method_duration_us_bucket{exported_instance=~\"$node\", method=~\"$method\"}[5m])))",
"legendFormat": "P95 [{{exported_instance}}]"
"expr": "histogram_quantile(0.75, sum by (le, exported_instance) (rate(xrpld_rpc_method_duration_us_bucket{exported_instance=~\"$node\", method=~\"$method\"}[5m])))",
"legendFormat": "p75 [{{exported_instance}}]"
},
{
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.99, sum by (le, exported_instance) (rate(xrpld_rpc_method_duration_us_bucket{exported_instance=~\"$node\", method=~\"$method\"}[5m])))",
"legendFormat": "P99 [{{exported_instance}}]"
"legendFormat": "p99 [{{exported_instance}}]"
}
],
"fieldConfig": {
@@ -228,8 +221,8 @@
}
},
{
"title": "Per-Method Latency P95 (Top 10 Slowest)",
"description": "95th percentile execution time per method. Identifies the slowest RPC endpoints.",
"title": "Per-Method Latency (p99, Top 10 Slowest)",
"description": "Top 10 slowest RPC methods by p99 latency.",
"type": "timeseries",
"gridPos": {
"h": 8,
@@ -253,7 +246,7 @@
"datasource": {
"type": "prometheus"
},
"expr": "topk(10, histogram_quantile(0.95, sum by (le, method, exported_instance) (rate(xrpld_rpc_method_duration_us_bucket{exported_instance=~\"$node\", method=~\"$method\"}[5m]))))",
"expr": "topk(10, histogram_quantile(0.99, sum by (le, method, exported_instance) (rate(xrpld_rpc_method_duration_us_bucket{exported_instance=~\"$node\", method=~\"$method\"}[5m]))))",
"legendFormat": "{{method}} [{{exported_instance}}]"
}
],
@@ -344,6 +337,60 @@
},
"overrides": []
}
},
{
"title": "Current RPC Latency (p99 Gauge)",
"description": "At-a-glance p99 RPC method latency over the last 5 minutes. Green < 100ms, yellow 100ms-1s, red > 1s.",
"type": "gauge",
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 32
},
"options": {
"reduceOptions": {
"calcs": ["lastNotNull"],
"fields": "",
"values": false
},
"orientation": "auto",
"showThresholdLabels": false,
"showThresholdMarkers": true
},
"targets": [
{
"datasource": {
"type": "prometheus"
},
"expr": "histogram_quantile(0.99, sum by (le) (rate(xrpld_rpc_method_duration_us_bucket{exported_instance=~\"$node\", method=~\"$method\"}[5m])))",
"legendFormat": "p99 Latency"
}
],
"fieldConfig": {
"defaults": {
"unit": "\u00b5s",
"min": 0,
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "yellow",
"value": 100000
},
{
"color": "red",
"value": 1000000
}
]
}
},
"overrides": []
}
}
],
"schemaVersion": 39,

View File

@@ -50,9 +50,14 @@
#include <opentelemetry/metrics/observer_result.h>
#include <opentelemetry/nostd/shared_ptr.h>
#include <opentelemetry/nostd/variant.h>
#include <opentelemetry/sdk/metrics/aggregation/aggregation_config.h>
#include <opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_factory.h>
#include <opentelemetry/sdk/metrics/export/periodic_exporting_metric_reader_options.h>
#include <opentelemetry/sdk/metrics/instruments.h>
#include <opentelemetry/sdk/metrics/meter_provider_factory.h>
#include <opentelemetry/sdk/metrics/view/instrument_selector_factory.h>
#include <opentelemetry/sdk/metrics/view/meter_selector_factory.h>
#include <opentelemetry/sdk/metrics/view/view_factory.h>
#include <opentelemetry/sdk/metrics/view/view_registry.h>
#include <opentelemetry/sdk/resource/resource.h>
#include <opentelemetry/semconv/incubating/service_attributes.h>
@@ -73,6 +78,64 @@ namespace metric_sdk = opentelemetry::sdk::metrics;
namespace otlp_http = opentelemetry::exporter::otlp;
namespace resource = opentelemetry::sdk::resource;
namespace {
// Microsecond-valued duration histogram instrument names. Each is
// referenced twice — once to register the explicit-bucket view and once
// to create the instrument — so they are named constants to keep the two
// sites in sync (a mismatch would silently drop the bucket override).
constexpr char kJobQueuedDurationUs[] = "xrpld_job_queued_duration_us";
constexpr char kJobRunningDurationUs[] = "xrpld_job_running_duration_us";
constexpr char kRpcMethodDurationUs[] = "xrpld_rpc_method_duration_us";
/** Register an explicit-bucket histogram view for a microsecond-valued
* instrument.
*
* The SDK's default histogram buckets top out at 10,000 (10 ms when the
* values are microseconds), so any duration above 10 ms saturates and
* every quantile reads as 10 ms. Job wait/run times and RPC latencies
* routinely exceed that, so we install boundaries spanning 100 µs to
* 60 s to capture the real distribution.
*
* @param views The registry to add the view to.
* @param name Instrument name to match (e.g. "xrpld_job_running_duration_us").
*/
void
addMicrosecondHistogramView(metric_sdk::ViewRegistry& views, std::string const& name)
{
// Boundaries in microseconds: 100µs, 500µs, 1ms, 5ms, 10ms, 25ms, 50ms,
// 100ms, 250ms, 500ms, 1s, 2.5s, 5s, 10s, 30s, 60s. Covers sub-millisecond
// jobs through multi-second stalls without saturating.
auto config = std::make_shared<metric_sdk::HistogramAggregationConfig>();
config->boundaries_ = {
100.0,
500.0,
1'000.0,
5'000.0,
10'000.0,
25'000.0,
50'000.0,
100'000.0,
250'000.0,
500'000.0,
1'000'000.0,
2'500'000.0,
5'000'000.0,
10'000'000.0,
30'000'000.0,
60'000'000.0};
auto selector = metric_sdk::InstrumentSelectorFactory::Create(
metric_sdk::InstrumentType::kHistogram, name, "");
auto meterSelector = metric_sdk::MeterSelectorFactory::Create("xrpld", "1.0.0", "");
auto view =
metric_sdk::ViewFactory::Create(name, "", metric_sdk::AggregationType::kHistogram, config);
views.AddView(std::move(selector), std::move(meterSelector), std::move(view));
}
} // namespace
#endif // XRPL_ENABLE_TELEMETRY
namespace xrpl::telemetry {
@@ -124,9 +187,16 @@ MetricsRegistry::start(std::string const& endpoint, std::string const& instanceI
attrs[opentelemetry::semconv::service::kServiceInstanceId] = instanceId;
auto resourceAttrs = resource::Resource::Create(attrs);
// Build a view registry with explicit microsecond buckets for the
// duration histograms. Without this they use the SDK default buckets
// (max 10,000 = 10 ms), saturating every quantile at 10 ms.
auto views = std::make_unique<metric_sdk::ViewRegistry>();
addMicrosecondHistogramView(*views, kJobQueuedDurationUs);
addMicrosecondHistogramView(*views, kJobRunningDurationUs);
addMicrosecondHistogramView(*views, kRpcMethodDurationUs);
// Create MeterProvider with resource, then attach the metric reader.
provider_ = metric_sdk::MeterProviderFactory::Create(
std::make_unique<metric_sdk::ViewRegistry>(), resourceAttrs);
provider_ = metric_sdk::MeterProviderFactory::Create(std::move(views), resourceAttrs);
provider_->AddMetricReader(std::move(reader));
// Get a meter for all xrpld instruments.
@@ -142,7 +212,7 @@ MetricsRegistry::start(std::string const& endpoint, std::string const& instanceI
rpcErroredCounter_ = meter_->CreateUInt64Counter(
"xrpld_rpc_method_errored_total", "Total RPC method calls that errored");
rpcDurationHistogram_ = meter_->CreateDoubleHistogram(
"xrpld_rpc_method_duration_us", "RPC method execution time in microseconds");
kRpcMethodDurationUs, "RPC method execution time in microseconds");
// Job queue per-type counters and histograms.
jobQueuedCounter_ =
@@ -152,9 +222,9 @@ MetricsRegistry::start(std::string const& endpoint, std::string const& instanceI
jobFinishedCounter_ =
meter_->CreateUInt64Counter("xrpld_job_finished_total", "Total jobs completed");
jobQueuedDurationHistogram_ = meter_->CreateDoubleHistogram(
"xrpld_job_queued_duration_us", "Time jobs spent waiting in the queue (microseconds)");
jobRunningDurationHistogram_ = meter_->CreateDoubleHistogram(
"xrpld_job_running_duration_us", "Job execution time in microseconds");
kJobQueuedDurationUs, "Time jobs spent waiting in the queue (microseconds)");
jobRunningDurationHistogram_ =
meter_->CreateDoubleHistogram(kJobRunningDurationUs, "Job execution time in microseconds");
// --- External dashboard parity counters (Task 7.14) ---
ledgersClosedCounter_ = meter_->CreateUInt64Counter(