{ "annotations": { "list": [] }, "description": "Ledger data exchange and object fetch traffic from beast::insight System Metrics. Covers ledger sync, node data retrieval, and transaction set exchange. Requires [insight] server=otel in rippled config.", "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 1, "id": null, "links": [], "panels": [ { "title": "Ledger Data Exchange (Bytes In)", "description": "Inbound bytes for ledger data sub-categories. 'ledger_data' = aggregated ledger data, sub-types include Transaction_Set_candidate (proposed tx sets), Transaction_Node (tx tree nodes), and Account_State_Node (state tree nodes). High Account_State_Node traffic indicates state sync; high Transaction_Set_candidate indicates consensus catch-up. Sourced from TrafficCount.h ledger_data_* categories.", "type": "timeseries", "gridPos": { "h": 8, "w": 12, "x": 0, "y": 0 }, "options": { "tooltip": { "mode": "multi", "sort": "desc" } }, "targets": [ { "datasource": { "type": "prometheus" }, "expr": "rippled_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\"}", "legendFormat": "Ledger Data Share [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, "expr": "rippled_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\"}", "legendFormat": "TX Set Candidate Share [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, "expr": "rippled_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\"}", "legendFormat": "TX Node Share [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, "expr": "rippled_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\"}", "legendFormat": "Account State Node Share [{{exported_instance}}]" } ], "fieldConfig": { "defaults": { "unit": "decbytes", "custom": { "axisLabel": "Bytes In", "spanNulls": true, "insertNulls": false, "showPoints": "auto", "pointSize": 3 } }, "overrides": [] } }, { "title": "Ledger Share/Get Traffic (Bytes)", "description": "Legacy ledger share and get traffic by sub-type. These are the older ledger fetch protocol categories (as opposed to ledger_data_* which is the newer protocol). Sub-types: Transaction_Set_candidate, Transaction_node, Account_State_node, plus aggregate ledger_share and ledger_get. Sourced from TrafficCount.h ledger_* categories.", "type": "timeseries", "gridPos": { "h": 8, "w": 12, "x": 12, "y": 0 }, "options": { "tooltip": { "mode": "multi", "sort": "desc" } }, "targets": [ { "datasource": { "type": "prometheus" }, "expr": "rippled_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\"}", "legendFormat": "Ledger Get In [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, "expr": "rippled_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\"}", "legendFormat": "TX Set Candidate Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, "expr": "rippled_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\"}", "legendFormat": "TX Node Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, "expr": "rippled_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\"}", "legendFormat": "Account State Get [{{exported_instance}}]" } ], "fieldConfig": { "defaults": { "unit": "decbytes", "custom": { "axisLabel": "Bytes In", "spanNulls": true, "insertNulls": false, "showPoints": "auto", "pointSize": 3 } }, "overrides": [] } }, { "title": "GetObject Traffic by Type (Bytes In)", "description": "Object fetch traffic by object type. GetObject is the protocol for fetching specific SHAMap nodes. Types: Ledger (full ledger headers), Transaction (individual txs), Transaction_node (tx tree nodes), Account_State_node (state tree nodes), CAS (Content Addressable Storage objects), Fetch_Pack (batch fetch during catch-up), Transactions (bulk tx fetch). High Fetch_Pack traffic indicates a node is catching up. Sourced from TrafficCount.h getobject_* categories.", "type": "timeseries", "gridPos": { "h": 8, "w": 12, "x": 0, "y": 8 }, "options": { "tooltip": { "mode": "multi", "sort": "desc" } }, "targets": [ { "datasource": { "type": "prometheus" }, "expr": "rippled_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\"}", "legendFormat": "Ledger Share [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, "expr": "rippled_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\"}", "legendFormat": "Transaction Share [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, "expr": "rippled_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\"}", "legendFormat": "TX Node Share [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, "expr": "rippled_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\"}", "legendFormat": "Account State Share [{{exported_instance}}]" } ], "fieldConfig": { "defaults": { "unit": "decbytes", "custom": { "axisLabel": "Bytes In", "spanNulls": true, "insertNulls": false, "showPoints": "auto", "pointSize": 3 } }, "overrides": [] } }, { "title": "GetObject Aggregate & Special Types (Bytes In)", "description": "Aggregate getobject traffic plus special categories: CAS (Content Addressable Storage) for SHAMap node fetch, Fetch_Pack for bulk batch downloads during catch-up, Transactions for bulk tx fetch, and the aggregate getobject_get/getobject_share totals. Sourced from TrafficCount.h getobject_* categories.", "type": "timeseries", "gridPos": { "h": 8, "w": 12, "x": 12, "y": 8 }, "options": { "tooltip": { "mode": "multi", "sort": "desc" } }, "targets": [ { "datasource": { "type": "prometheus" }, "expr": "rippled_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\"}", "legendFormat": "CAS Share [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, "expr": "rippled_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\"}", "legendFormat": "Fetch Pack Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, "expr": "rippled_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\"}", "legendFormat": "Aggregate Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, "expr": "rippled_getobject_share_Bytes_In{exported_instance=~\"$node\"}", "legendFormat": "Aggregate Share [{{exported_instance}}]" } ], "fieldConfig": { "defaults": { "unit": "decbytes", "custom": { "axisLabel": "Bytes In", "spanNulls": true, "insertNulls": false, "showPoints": "auto", "pointSize": 3 } }, "overrides": [] } }, { "title": "GetObject Messages by Type", "description": "Message counts for object fetch operations. Shows how many individual fetch requests and responses are exchanged per type. High message counts with low byte counts indicate small object fetches; the inverse indicates large batch transfers. Sourced from TrafficCount.h getobject_* categories.", "type": "timeseries", "gridPos": { "h": 8, "w": 12, "x": 0, "y": 16 }, "options": { "tooltip": { "mode": "multi", "sort": "desc" } }, "targets": [ { "datasource": { "type": "prometheus" }, "expr": "rippled_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\"}", "legendFormat": "Transaction Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, "expr": "rippled_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\"}", "legendFormat": "Account State Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, "expr": "rippled_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\"}", "legendFormat": "Fetch Pack Get [{{exported_instance}}]" }, { "datasource": { "type": "prometheus" }, "expr": "rippled_getobject_Transactions_get_Messages_In{exported_instance=~\"$node\"}", "legendFormat": "Transactions Get [{{exported_instance}}]" } ], "fieldConfig": { "defaults": { "unit": "none", "custom": { "axisLabel": "Messages In", "spanNulls": true, "insertNulls": false, "showPoints": "auto", "pointSize": 3 } }, "overrides": [] } }, { "title": "Overlay Traffic Heatmap (All Categories, Bytes In)", "description": "Bar gauge showing all overlay traffic categories ranked by inbound bytes. Provides a complete at-a-glance view of which protocol message types consume the most bandwidth across all 57+ traffic categories. Sourced from all TrafficCount.h categories via wildcard match.", "type": "bargauge", "gridPos": { "h": 8, "w": 12, "x": 12, "y": 16 }, "options": { "tooltip": { "mode": "multi", "sort": "desc" }, "displayMode": "gradient", "orientation": "horizontal", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false } }, "targets": [ { "datasource": { "type": "prometheus" }, "expr": "topk(20, {exported_instance=~\"$node\", __name__=~\"rippled_.*_Bytes_In\", __name__!~\"rippled_total_.*\"})", "legendFormat": "{{__name__}} [{{exported_instance}}]" } ], "fieldConfig": { "defaults": { "unit": "decbytes", "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "yellow", "value": 1048576 }, { "color": "red", "value": 104857600 } ] } }, "overrides": [] } } ], "schemaVersion": 39, "tags": ["rippled", "statsd", "ledger", "sync", "telemetry"], "templating": { "list": [ { "name": "node", "label": "Node", "description": "Filter by rippled node (service.instance.id)", "type": "query", "query": "label_values(rippled_ledger_data_get_Bytes_In, exported_instance)", "datasource": { "type": "prometheus", "uid": "prometheus" }, "includeAll": true, "allValue": ".*", "current": { "text": "All", "value": "$__all" }, "multi": true, "refresh": 2, "sort": 1 } ] }, "time": { "from": "now-1h", "to": "now" }, "title": "Ledger Data & Sync (System Metrics)", "uid": "rippled-system-ledger-sync" }