From d7df8fac55f83d993a95f0ef14ccca1e5cce9c90 Mon Sep 17 00:00:00 2001 From: Nikolai Golub Date: Mon, 4 May 2026 16:57:27 +0200 Subject: [PATCH] Updating dashboard --- grafana/dashboards/rollup-dashboard-node.json | 3250 ++++++++++++----- 1 file changed, 2383 insertions(+), 867 deletions(-) diff --git a/grafana/dashboards/rollup-dashboard-node.json b/grafana/dashboards/rollup-dashboard-node.json index 6bd4901..609cba1 100644 --- a/grafana/dashboards/rollup-dashboard-node.json +++ b/grafana/dashboards/rollup-dashboard-node.json @@ -18,7 +18,7 @@ "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, - "id": 8, + "id": 42, "links": [], "panels": [ { @@ -164,11 +164,11 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r._measurement == \"sov_rollup_num_of_in_flight_blobs\"\n and r.host == \"${host}\"\n and r._field == \"num_of_in_flight_blobs\"\n )\n |> last()", + "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r._measurement == \"sov_rollup_num_of_in_flight_blobs\"\n and r.host == \"${host}\"\n and r._field == \"num_of_in_flight_batch_blobs\"\n )\n |> last()", "refId": "A" } ], - "title": "In Flight Blobs", + "title": "In Flight Batch Blobs", "type": "stat" }, { @@ -176,19 +176,25 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "When sequencer has succesfully accepted transaction", "fieldConfig": { "defaults": { "color": { - "fixedColor": "text", - "mode": "fixed" + "mode": "thresholds" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { - "color": "text" + "color": "green" + }, + { + "color": "orange", + "value": 5 + }, + { + "color": "red", + "value": 10 } ] } @@ -201,7 +207,7 @@ "x": 6, "y": 1 }, - "id": 5, + "id": 82, "options": { "colorMode": "value", "graphMode": "area", @@ -212,7 +218,7 @@ "calcs": [ "lastNotNull" ], - "fields": "/^Time$/", + "fields": "", "values": false }, "showPercentChange": false, @@ -226,11 +232,11 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r._measurement == \"sov_rollup_http_handlers\" and\n r.host == \"${host}\" and\n r._field == \"processing_time_us\" and\n r.path == \"/sequencer/txs\" and\n r.resp_status == \"200\" and\n r.req_method == \"POST\"\n )\n |> last()", + "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r._measurement == \"sov_rollup_num_of_in_flight_blobs\"\n and r.host == \"${host}\"\n and r._field == \"num_of_in_flight_proof_blobs\"\n )\n |> last()", "refId": "A" } ], - "title": "Last Accepted Tx Time", + "title": "In Flight Proof Blobs", "type": "stat" }, { @@ -707,31 +713,22 @@ "type": "influxdb", "uid": "${DS}" }, + "description": "When sequencer has succesfully accepted transaction", "fieldConfig": { "defaults": { "color": { - "mode": "thresholds" + "fixedColor": "text", + "mode": "fixed" }, "mappings": [], - "max": 100, - "min": 0, "thresholds": { "mode": "absolute", "steps": [ { - "color": "#299c46" - }, - { - "color": "rgba(237, 129, 40, 0.89)", - "value": 70 - }, - { - "color": "#d44a3a", - "value": 80 + "color": "text" } ] - }, - "unit": "percent" + } }, "overrides": [] }, @@ -741,23 +738,23 @@ "x": 6, "y": 5 }, - "id": 13, - "maxDataPoints": 100, + "id": 5, "options": { - "minVizHeight": 75, - "minVizWidth": 75, - "orientation": "horizontal", + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", "reduceOptions": { "calcs": [ "lastNotNull" ], - "fields": "", + "fields": "/^Time$/", "values": false }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "sizing": "auto", - "text": {} + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true }, "pluginVersion": "11.6.0+security-01", "targets": [ @@ -766,45 +763,12 @@ "type": "influxdb", "uid": "${DS}" }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"cpu\" and r.host == \"${host}\" and r._field == \"usage_idle\" and r.cpu == \"cpu-total\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> pivot(rowKey: [\"_time\"], columnKey: [\"_field\"], valueColumn: \"_value\")\n |> map(fn: (r) => ({r: r.usage_idle * -1.0 + 100.0}))", - "rawQuery": true, - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [] + "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r._measurement == \"sov_rollup_http_handlers\" and\n r.host == \"${host}\" and\n r._field == \"processing_time_us\" and\n r.path == \"/sequencer/txs\" and\n r.resp_status == \"200\" and\n r.req_method == \"POST\"\n )\n |> last()", + "refId": "A" } ], - "title": "CPU usage", - "type": "gauge" + "title": "Last Accepted Tx Time", + "type": "stat" }, { "datasource": { @@ -1379,19 +1343,6 @@ "title": "Sequencer Ready?", "type": "stat" }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 13 - }, - "id": 18, - "panels": [], - "title": "Sequencer", - "type": "row" - }, { "datasource": { "type": "influxdb", @@ -1400,100 +1351,54 @@ "fieldConfig": { "defaults": { "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } + "mode": "thresholds" }, - "fieldMinMax": false, "mappings": [], + "max": 100, + "min": 0, "thresholds": { "mode": "absolute", "steps": [ { - "color": "green" + "color": "#299c46" }, { - "color": "red", + "color": "rgba(237, 129, 40, 0.89)", + "value": 70 + }, + { + "color": "#d44a3a", "value": 80 } ] }, - "unit": "ms" + "unit": "percent" }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "fetch_batches_duration_us" - }, - "properties": [ - { - "id": "unit", - "value": "µs" - } - ] - } - ] + "overrides": [] }, "gridPos": { - "h": 10, - "w": 12, - "x": 0, - "y": 14 + "h": 4, + "w": 3, + "x": 6, + "y": 9 }, - "id": 56, + "id": 13, + "maxDataPoints": 100, "options": { - "legend": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { "calcs": [ - "min", - "mean", - "max", - "lastNotNull", - "p50", - "p99" + "lastNotNull" ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true, - "sortBy": "Name", - "sortDesc": false + "fields": "", + "values": false }, - "tooltip": { - "hideZeros": false, - "mode": "single", - "sort": "none" - } + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto", + "text": {} }, "pluginVersion": "11.6.0+security-01", "targets": [ @@ -1502,47 +1407,139 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" \n and r._measurement == \"sov_rollup_preferred_sequencer_update_state\" \n and (r._field == \"duration_ms\" or r._field == \"total_message_processing_duration_ms\" or r._field == \"fetch_batches_duration_us\") \n )\n |> group(columns: [\"_field\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 1.0, column: column))\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", - "refId": "A" - } - ], - "title": "State replay performance", - "transformations": [ - { - "id": "calculateField", - "options": { - "alias": "fetch_batches_duration_ms", - "binary": { - "left": { - "matcher": { - "id": "byName", - "options": "fetch_batches_duration_us" - } - }, - "operator": "/", - "right": { - "fixed": "1000" - } - }, - "mode": "binary", - "reduce": { - "include": [ - "fetch_batches_duration_us" + "groupBy": [ + { + "params": [ + "$__interval" ], - "reducer": "allValues" + "type": "time" }, - "replaceFields": false - } - } - ], - "type": "timeseries" - }, - { - "datasource": { - "type": "influxdb", - "uid": "${DS}" - }, - "description": "How much time does it take to process slot, split by following stages:\n\n1. blob_selection\n2. begin_hooks\n3. blobs_processing\n4. end_hooks\n5. finalization", + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "orderByTime": "ASC", + "policy": "default", + "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"cpu\" and r.host == \"${host}\" and r._field == \"usage_idle\" and r.cpu == \"cpu-total\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> pivot(rowKey: [\"_time\"], columnKey: [\"_field\"], valueColumn: \"_value\")\n |> map(fn: (r) => ({r: r.usage_idle * -1.0 + 100.0}))", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + } + ] + ], + "tags": [] + } + ], + "title": "CPU usage", + "type": "gauge" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "Only counts successful txs", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red" + }, + { + "color": "green", + "value": 10 + }, + { + "color": "yellow", + "value": 30 + }, + { + "color": "orange", + "value": 50 + } + ] + }, + "unit": "µs" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 6, + "y": 13 + }, + "id": 70, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.6.0+security-01", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r._measurement == \"sov_rollup_rpc_handlers\"\n and r.host == \"${host}\"\n and r._field == \"processing_time_us\"\n and (r.request_name == \"eth_sendRawTransaction\" or r.request_name == \"realtime_sendRawTransaction\")\n and r.status == \"0\"\n )\n |> quantile(q: 0.99, method: \"estimate_tdigest\")", + "refId": "A" + } + ], + "title": "Ethereum Accept Tx P99", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 17 + }, + "id": 18, + "panels": [], + "title": "Sequencer", + "type": "row" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "Time it takes to process single transaction.\nDoes not include signature check", "fieldConfig": { "defaults": { "color": { @@ -1601,10 +1598,10 @@ "gridPos": { "h": 10, "w": 12, - "x": 12, - "y": 14 + "x": 0, + "y": 18 }, - "id": 21, + "id": 42, "options": { "legend": { "calcs": [ @@ -1617,12 +1614,12 @@ "displayMode": "table", "placement": "bottom", "showLegend": true, - "sortBy": "50th %", + "sortBy": "Mean", "sortDesc": true }, "tooltip": { "hideZeros": false, - "mode": "single", + "mode": "multi", "sort": "none" } }, @@ -1633,11 +1630,11 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_rollup_slot_execution_time_us\" and\n r._field != \"da_height\" and r._field != \"rollup_height\" and r._field != \"visible_slot_number\" and r._field != \"gas_used_compute\" and r._field != \"gas_used_mem\"\n )\n |> group(columns: [\"_field\", \"context\"])\n \n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_transaction_execution_us\" and\n r._field == \"value\" and r[\"context\"] == \"Sequencer\"\n )\n |> drop(columns: [\"host\", \"sequencer\", \"context\", \"environment\", \"deployment_name\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data\n", "refId": "A" } ], - "title": "Slot Processing Times", + "title": "Transaction Processing Time", "type": "timeseries" }, { @@ -1645,6 +1642,7 @@ "type": "influxdb", "uid": "${DS}" }, + "description": "How much time does it take to process slot, split by following stages:\n\n1. blob_selection\n2. begin_hooks\n3. blobs_processing\n4. end_hooks\n5. finalization", "fieldConfig": { "defaults": { "color": { @@ -1689,25 +1687,38 @@ "steps": [ { "color": "green" + }, + { + "color": "red", + "value": 80 } ] - } + }, + "unit": "µs" }, "overrides": [] }, "gridPos": { "h": 10, "w": 12, - "x": 0, - "y": 24 + "x": 12, + "y": 18 }, - "id": 26, + "id": 21, "options": { "legend": { - "calcs": [], - "displayMode": "list", + "calcs": [ + "min", + "mean", + "p50", + "max", + "lastNotNull" + ], + "displayMode": "table", "placement": "bottom", - "showLegend": true + "showLegend": true, + "sortBy": "50th %", + "sortDesc": true }, "tooltip": { "hideZeros": false, @@ -1722,11 +1733,11 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => \n r.host == \"${host}\"\n and r._measurement == \"sov_rollup_sequence_number_delta\" \n and r._field == \"delta\")\n |> group(columns: [\"_field\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\n", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_rollup_slot_execution_time_us\" and\n r._field != \"da_height\" and r._field != \"rollup_height\" and r._field != \"visible_slot_number\" and r._field != \"gas_used_compute\" and r._field != \"gas_used_mem\"\n )\n |> group(columns: [\"_field\", \"context\"])\n \n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", "refId": "A" } ], - "title": "Sequence number delta (sequencer - node)", + "title": "Slot Processing Times", "type": "timeseries" }, { @@ -1734,7 +1745,6 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "Difference between visible and true slot number on sequencer and node", "fieldConfig": { "defaults": { "color": { @@ -1774,7 +1784,6 @@ } }, "mappings": [], - "min": 0, "thresholds": { "mode": "absolute", "steps": [ @@ -1788,20 +1797,15 @@ }, "gridPos": { "h": 10, - "w": 12, - "x": 12, - "y": 24 + "w": 6, + "x": 0, + "y": 28 }, - "id": 63, + "id": 26, "options": { "legend": { - "calcs": [ - "min", - "mean", - "median", - "lastNotNull" - ], - "displayMode": "table", + "calcs": [], + "displayMode": "list", "placement": "bottom", "showLegend": true }, @@ -1818,11 +1822,11 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => \n r.host == \"${host}\"\n and r._measurement == \"sov_rollup_preferred_sequencer_slot_numbers\")\n |> pivot(rowKey:[\"_time\", \"host\"], columnKey: [\"_field\"], valueColumn: \"_value\")\n |> map(fn: (r) => ({\n _time: r._time,\n host: r.host,\n true_slot: r.true_slot,\n seq_visible_slot: r.seq_visible_slot,\n last_finalized_slot: r.last_finalized_slot,\n node_visible_slot: r.node_visible_slot\n }))\n\n// Calculate each diff as separate streams with proper _field and _value columns\nseq_diff = data |> map(fn: (r) => ({\n _time: r._time,\n host: r.host,\n _field: \"seq_visible_slot_diff\",\n _value: float(v: r.true_slot - r.seq_visible_slot)\n}))\n\nseq_diff_fin = data |> map(fn: (r) => ({\n _time: r._time,\n host: r.host,\n _field: \"seq_visible_slot_diff_fin\",\n _value: float(v: r.last_finalized_slot - r.seq_visible_slot)\n}))\n\nnode_diff = data |> map(fn: (r) => ({\n _time: r._time,\n host: r.host,\n _field: \"node_visible_slot_diff\",\n _value: float(v: r.true_slot - r.node_visible_slot)\n}))\n\nresult = union(tables: [seq_diff, seq_diff_fin, node_diff])\n |> group(columns: [\"_field\"])\n\nif agg_func == \"raw\" then\n result\nelse if agg_func == \"median\" then\n result |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n result |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n result |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n result |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n result |> aggregateWindow(every: ${agg_interval}, fn: median)", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => \n r.host == \"${host}\"\n and r._measurement == \"sov_rollup_sequence_number_delta\" \n and r._field == \"delta\")\n |> group(columns: [\"_field\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\n", "refId": "A" } ], - "title": "Visible slot numbers deltas", + "title": "Sequence number delta (sequencer - node)", "type": "timeseries" }, { @@ -1830,7 +1834,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "Time it takes to process single transaction.\nDoes not include signature check", + "description": "In flight blobs are blobs that have been submitted to DA, but haven't been processed by the node", "fieldConfig": { "defaults": { "color": { @@ -1875,42 +1879,29 @@ "steps": [ { "color": "green" - }, - { - "color": "red", - "value": 80 } ] - }, - "unit": "µs" + } }, "overrides": [] }, "gridPos": { "h": 10, - "w": 12, - "x": 0, - "y": 34 + "w": 6, + "x": 6, + "y": 28 }, - "id": 42, + "id": 72, "options": { "legend": { - "calcs": [ - "min", - "mean", - "p50", - "max", - "lastNotNull" - ], - "displayMode": "table", + "calcs": [], + "displayMode": "list", "placement": "bottom", - "showLegend": true, - "sortBy": "Mean", - "sortDesc": true + "showLegend": true }, "tooltip": { "hideZeros": false, - "mode": "multi", + "mode": "single", "sort": "none" } }, @@ -1921,11 +1912,11 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_transaction_execution_us\" and\n r._field == \"value\" and r[\"context\"] == \"Sequencer\"\n )\n |> drop(columns: [\"host\", \"sequencer\", \"context\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data\n", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => \n r._measurement == \"sov_rollup_num_of_in_flight_blobs\"\n and r.host == \"${host}\"\n and (r._field == \"num_of_in_flight_batch_blobs\" or r._field == \"num_of_in_flight_proof_blobs\")\n )\n |> group(columns: [\"_field\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\n", "refId": "A" } ], - "title": "Transaction Processing Time", + "title": "Number of \"In Flight\" blobs", "type": "timeseries" }, { @@ -1933,6 +1924,7 @@ "type": "influxdb", "uid": "${DS}" }, + "description": "Difference between visible and true slot number on sequencer and node", "fieldConfig": { "defaults": { "color": { @@ -1943,7 +1935,7 @@ "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", - "axisPlacement": "left", + "axisPlacement": "auto", "barAlignment": 0, "barWidthFactor": 0.6, "drawStyle": "line", @@ -1971,8 +1963,6 @@ "mode": "off" } }, - "decimals": 0, - "fieldMinMax": false, "mappings": [], "min": 0, "thresholds": { @@ -1984,65 +1974,22 @@ ] } }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "batches_count" - }, - "properties": [ - { - "id": "custom.axisPlacement", - "value": "left" - }, - { - "id": "unit", - "value": "short" - }, - { - "id": "custom.axisLabel", - "value": "# of batches to replay" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "transactions_count" - }, - "properties": [ - { - "id": "custom.axisPlacement", - "value": "right" - }, - { - "id": "unit", - "value": "short" - }, - { - "id": "custom.axisLabel", - "value": "# of transactions to replay" - } - ] - } - ] + "overrides": [] }, "gridPos": { "h": 10, "w": 12, "x": 12, - "y": 34 + "y": 28 }, - "id": 25, + "id": 63, "options": { "legend": { "calcs": [ "min", "mean", - "max", - "lastNotNull", - "p50", - "p99" + "median", + "lastNotNull" ], "displayMode": "table", "placement": "bottom", @@ -2050,7 +1997,7 @@ }, "tooltip": { "hideZeros": false, - "mode": "multi", + "mode": "single", "sort": "none" } }, @@ -2061,11 +2008,11 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "\nagg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\"\n and r._measurement == \"sov_rollup_preferred_sequencer_update_state\"\n and (r._field == \"batches_count\" or r._field == \"transactions_count\") \n )\n |> group(columns: [\"_field\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => \n r.host == \"${host}\"\n and r._measurement == \"sov_rollup_preferred_sequencer_slot_numbers\")\n |> pivot(rowKey:[\"_time\", \"host\"], columnKey: [\"_field\"], valueColumn: \"_value\")\n |> map(fn: (r) => ({\n _time: r._time,\n host: r.host,\n true_slot: r.true_slot,\n seq_visible_slot: r.seq_visible_slot,\n last_finalized_slot: r.last_finalized_slot,\n node_visible_slot: r.node_visible_slot\n }))\n\n// Calculate each diff as separate streams with proper _field and _value columns\nseq_diff = data |> map(fn: (r) => ({\n _time: r._time,\n host: r.host,\n _field: \"seq_visible_slot_diff\",\n _value: float(v: r.true_slot - r.seq_visible_slot)\n}))\n\nseq_diff_fin = data |> map(fn: (r) => ({\n _time: r._time,\n host: r.host,\n _field: \"seq_visible_slot_diff_fin\",\n _value: float(v: r.last_finalized_slot - r.seq_visible_slot)\n}))\n\nnode_diff = data |> map(fn: (r) => ({\n _time: r._time,\n host: r.host,\n _field: \"node_visible_slot_diff\",\n _value: float(v: r.true_slot - r.node_visible_slot)\n}))\n\nresult = union(tables: [seq_diff, seq_diff_fin, node_diff])\n |> group(columns: [\"_field\"])\n\nif agg_func == \"raw\" then\n result\nelse if agg_func == \"median\" then\n result |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n result |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n result |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n result |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n result |> aggregateWindow(every: ${agg_interval}, fn: median)", "refId": "A" } ], - "title": "State replay workload (batches & txs)", + "title": "Visible slot numbers deltas", "type": "timeseries" }, { @@ -2158,7 +2105,7 @@ "h": 10, "w": 12, "x": 0, - "y": 44 + "y": 38 }, "id": 48, "options": { @@ -2262,7 +2209,7 @@ "h": 10, "w": 12, "x": 12, - "y": 44 + "y": 38 }, "id": 38, "options": { @@ -2271,12 +2218,15 @@ "min", "mean", "p50", - "max", - "lastNotNull" + "p95", + "p99", + "max" ], "displayMode": "table", "placement": "bottom", - "showLegend": true + "showLegend": true, + "sortBy": "50th %", + "sortDesc": true }, "tooltip": { "hideZeros": false, @@ -2291,7 +2241,7 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_http_handlers\" and\n r._field == \"processing_time_us\"\n )\n |> drop(columns: [\"host\"])\n |> rename(columns: {req_method: \"method\", resp_status: \"status\"})\n |> map(fn: (r) => ({r with _field: \"processing_time\"}))\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: max)\n |> drop(columns: [\"_start\", \"_stop\"])\n |> group(columns: [\"_field\", \"method\", \"path\", \"status\"])\n |> pivot(rowKey: [\"_time\"], columnKey: [\"_field\"], valueColumn: \"_value\")\nelse\n data", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_http_handlers\" and\n r._field == \"processing_time_us\"\n )\n |> drop(columns: [\"host\", \"environment\", \"deployment_name\"])\n |> rename(columns: {req_method: \"method\", resp_status: \"status\"})\n |> map(fn: (r) => ({r with _field: \"processing_time\"}))\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: max)\n |> drop(columns: [\"_start\", \"_stop\"])\n |> group(columns: [\"_field\", \"method\", \"path\", \"status\"])\n |> pivot(rowKey: [\"_time\"], columnKey: [\"_field\"], valueColumn: \"_value\")\nelse\n data", "refId": "A" } ], @@ -2374,10 +2324,10 @@ ] }, "gridPos": { - "h": 9, + "h": 10, "w": 12, "x": 0, - "y": 54 + "y": 48 }, "id": 55, "options": { @@ -2422,6 +2372,7 @@ "type": "influxdb", "uid": "${DS}" }, + "description": "Time each handler spent creating a response", "fieldConfig": { "defaults": { "color": { @@ -2431,9 +2382,8 @@ "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", - "axisLabel": "Shows the queue depth for the background task, and the amount of time spent blocking. Note that time spent blocking is aggregated per interval - so if the aggregation interval is 10s, this metric shows the total time spent blocking per 10s interval", + "axisLabel": "", "axisPlacement": "auto", - "axisSoftMax": -3, "barAlignment": 0, "barWidthFactor": 0.6, "drawStyle": "line", @@ -2458,58 +2408,45 @@ "mode": "none" }, "thresholdsStyle": { - "mode": "dashed" + "mode": "off" } }, - "fieldMinMax": false, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green" + }, + { + "color": "red", + "value": 80 } ] }, - "unit": "none" + "unit": "µs" }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "blocked_for_us" - }, - "properties": [ - { - "id": "unit", - "value": "µs" - } - ] - } - ] + "overrides": [] }, "gridPos": { - "h": 9, + "h": 10, "w": 12, "x": 12, - "y": 54 + "y": 48 }, - "id": 49, + "id": 71, "options": { "legend": { "calcs": [ "min", "mean", - "max", - "lastNotNull", "p50", - "p99" + "max", + "lastNotNull" ], "displayMode": "table", "placement": "bottom", - "showLegend": true, - "sortBy": "99th %", - "sortDesc": true + "showLegend": true }, "tooltip": { "hideZeros": false, @@ -2524,11 +2461,11 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\nblocking_data = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" \n and r._measurement == \"sov_rollup_preferred_sequencer_executor_event_sending\" \n and (r._field == \"blocked_for_us\") \n )\n |> aggregateWindow(every: ${agg_interval}, fn: sum, createEmpty: false)\n |> group(columns: [\"_field\"])\n\nqueue_depth = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_preferred_sequencer_executor_event_sending\" and\n r._field == \"queue_depth\"\n )\n |> group(columns: [\"_field\"])\n\ndata = union(tables: [queue_depth, blocking_data])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_rpc_handlers\" and\n r._field == \"processing_time_us\"\n )\n |> drop(columns: [\"host\"])\n |> rename(columns: {request_name: \"method\"})\n |> map(fn: (r) => ({r with _field: \"processing_time\"}))\n |> group(columns: [\"_field\", \"context\", \"status\", \"method\"])\n\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: max)\n |> drop(columns: [\"_start\", \"_stop\"])\n |> group(columns: [\"_field\", \"method\", \"path\", \"status\"])\n |> pivot(rowKey: [\"_time\"], columnKey: [\"_field\"], valueColumn: \"_value\")\nelse\n data", "refId": "A" } ], - "title": "Side Effects Task Backpressure", + "title": "RPC Handler Times", "type": "timeseries" }, { @@ -2594,7 +2531,7 @@ "h": 10, "w": 12, "x": 0, - "y": 63 + "y": 58 }, "id": 66, "options": { @@ -2687,17 +2624,30 @@ } ] }, - "unit": "µs" + "unit": "none" }, - "overrides": [] + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "blocked_for_us" + }, + "properties": [ + { + "id": "unit", + "value": "µs" + } + ] + } + ] }, "gridPos": { "h": 10, "w": 12, "x": 12, - "y": 63 + "y": 58 }, - "id": 51, + "id": 49, "options": { "legend": { "calcs": [ @@ -2727,32 +2677,19 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ncumulative = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" \n and r._measurement == \"sov_rollup_preferred_sequencer_executor_event\" \n and (r._field == \"duration_us\") \n )\n |> aggregateWindow(every: ${agg_interval}, fn: sum, createEmpty: false)\n |> group(columns: [\"_field\", \"event_type\"])\n |> map(fn: (r) => ({ r with _field: \"total_duration_us\" }))\n\ntotal_across_all = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\"\n and r._measurement == \"sov_rollup_preferred_sequencer_executor_event\"\n and (r._field == \"duration_us\")\n )\n |> aggregateWindow(every: ${agg_interval}, fn: sum, createEmpty: false)\n |> group(columns: [\"_time\", \"_field\"])\n |> sum(column: \"_value\")\n |> group(columns: [\"_field\"])\n |> map(fn: (r) => ({ r with _field: \"sum_of_durations\" }))\n\n\nraw_data = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" \n and r._measurement == \"sov_rollup_preferred_sequencer_executor_event\" \n and (r._field == \"duration_us\" or (r._field == \"batch_size\" and r._value != 1)) \n )\n |> group(columns: [\"_field\", \"event_type\"])\n\ndata = union(tables: [raw_data, cumulative, total_across_all])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", + "query": "agg_func = \"${agg_func}\"\n\nblocking_data = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" \n and r._measurement == \"sov_rollup_preferred_sequencer_executor_event_sending\" \n and (r._field == \"blocked_for_us\") \n )\n |> aggregateWindow(every: ${agg_interval}, fn: sum, createEmpty: false)\n |> group(columns: [\"_field\"])\n\nqueue_depth = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_preferred_sequencer_executor_event_sending\" and\n r._field == \"queue_depth\"\n )\n |> group(columns: [\"_field\"])\n\ndata = union(tables: [queue_depth, blocking_data])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", "refId": "A" } ], - "title": "(Under Construction) Side Effects Duration", + "title": "Side Effects Task Backpressure", "type": "timeseries" }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 73 - }, - "id": 19, - "panels": [], - "title": "Node", - "type": "row" - }, { "datasource": { "type": "influxdb", "uid": "${DS}" }, - "description": "The time taken after receiving the raw block from DA through State Transition Function and committing to the database", + "description": "Time each handler spent creating a response", "fieldConfig": { "defaults": { "color": { @@ -2810,11 +2747,11 @@ }, "gridPos": { "h": 10, - "w": 8, + "w": 12, "x": 0, - "y": 74 + "y": 68 }, - "id": 22, + "id": 75, "options": { "legend": { "calcs": [ @@ -2826,9 +2763,7 @@ ], "displayMode": "table", "placement": "bottom", - "showLegend": true, - "sortBy": "50th %", - "sortDesc": true + "showLegend": true }, "tooltip": { "hideZeros": false, @@ -2843,11 +2778,11 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_rollup_runner_times_us\" and r._field != \"da_height\"\n )\n |> group(columns: [\"_field\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\n", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_ethereum_tx_handler\" and\n (r._field == \"post_handler_time\" or r._field == \"accept_tx_time\" or r._field == \"pre_accept_tx_time\")\n )\n |> group(columns: [\"_field\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: max)\n |> drop(columns: [\"_start\", \"_stop\"])\n |> group(columns: [\"_field\", \"method\", \"path\", \"status\"])\n |> pivot(rowKey: [\"_time\"], columnKey: [\"_field\"], valueColumn: \"_value\")\nelse\n data", "refId": "A" } ], - "title": "Runner loop times", + "title": "Ethereum RPC Handler Times", "type": "timeseries" }, { @@ -2855,7 +2790,6 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "How much time does it take to process slot, split by following stages:\n\n1. blob_selection\n2. begin_hooks\n3. blobs_processing\n4. end_hooks\n5. finalization", "fieldConfig": { "defaults": { "color": { @@ -2865,8 +2799,9 @@ "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", - "axisLabel": "", + "axisLabel": "Shows the queue depth for the background task, and the amount of time spent blocking. Note that time spent blocking is aggregated per interval - so if the aggregation interval is 10s, this metric shows the total time spent blocking per 10s interval", "axisPlacement": "auto", + "axisSoftMax": -3, "barAlignment": 0, "barWidthFactor": 0.6, "drawStyle": "line", @@ -2891,19 +2826,16 @@ "mode": "none" }, "thresholdsStyle": { - "mode": "off" + "mode": "dashed" } }, + "fieldMinMax": false, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green" - }, - { - "color": "red", - "value": 80 } ] }, @@ -2913,19 +2845,20 @@ }, "gridPos": { "h": 10, - "w": 8, - "x": 8, - "y": 74 + "w": 12, + "x": 12, + "y": 68 }, - "id": 37, + "id": 51, "options": { "legend": { "calcs": [ "min", "mean", - "p50", "max", - "lastNotNull" + "lastNotNull", + "p50", + "p99" ], "displayMode": "table", "placement": "bottom", @@ -2946,19 +2879,32 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_rollup_slot_execution_time_us\" and r[\"context\"] == \"Node\" and\n r._field != \"da_height\" and r._field != \"rollup_height\" and r._field != \"visible_slot_number\" and r._field != \"gas_used_compute\" and r._field != \"gas_used_mem\"\n )\n |> group(columns: [\"_field\"])\n \n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: max)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", + "query": "agg_func = \"${agg_func}\"\n\ncumulative = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" \n and r._measurement == \"sov_rollup_preferred_sequencer_executor_event\" \n and (r._field == \"duration_us\") \n )\n |> aggregateWindow(every: ${agg_interval}, fn: sum, createEmpty: false)\n |> group(columns: [\"_field\", \"event_type\"])\n |> map(fn: (r) => ({ r with _field: \"total_duration_us\" }))\n\ntotal_across_all = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\"\n and r._measurement == \"sov_rollup_preferred_sequencer_executor_event\"\n and (r._field == \"duration_us\")\n )\n |> aggregateWindow(every: ${agg_interval}, fn: sum, createEmpty: false)\n |> group(columns: [\"_time\", \"_field\"])\n |> sum(column: \"_value\")\n |> group(columns: [\"_field\"])\n |> map(fn: (r) => ({ r with _field: \"sum_of_durations\" }))\n\n\nraw_data = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" \n and r._measurement == \"sov_rollup_preferred_sequencer_executor_event\" \n and (r._field == \"duration_us\" or (r._field == \"batch_size\" and r._value != 1)) \n )\n |> group(columns: [\"_field\", \"event_type\"])\n\ndata = union(tables: [raw_data, cumulative, total_across_all])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", "refId": "A" } ], - "title": "Node Slot Processing Times", + "title": "(Under Construction) Side Effects Duration", "type": "timeseries" }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 78 + }, + "id": 19, + "panels": [], + "title": "Node", + "type": "row" + }, { "datasource": { "type": "influxdb", "uid": "${DS}" }, - "description": "Breakdown of `processing_changes_time` from runner loop time", + "description": "The time taken after receiving the raw block from DA through State Transition Function and committing to the database", "fieldConfig": { "defaults": { "color": { @@ -3017,10 +2963,10 @@ "gridPos": { "h": 10, "w": 8, - "x": 16, - "y": 74 + "x": 0, + "y": 79 }, - "id": 36, + "id": 22, "options": { "legend": { "calcs": [ @@ -3049,11 +2995,11 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_runner_process_stf_changes\" and r._field != \"da_height\" and r._field != \"proofs_count\" and r._field != \"finalized_transitions_count\"\n )\n |> group(columns: [\"_field\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: max)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\n", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_rollup_runner_times_us\" and r._field != \"da_height\"\n )\n |> group(columns: [\"_field\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\n", "refId": "A" } ], - "title": "Runner STF changes processing detailed", + "title": "Runner loop times", "type": "timeseries" }, { @@ -3061,7 +3007,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "How many transactions of all statuses have been in single batch", + "description": "How much time does it take to process slot, split by following stages:\n\n1. blob_selection\n2. begin_hooks\n3. blobs_processing\n4. end_hooks\n5. finalization", "fieldConfig": { "defaults": { "color": { @@ -3085,16 +3031,13 @@ }, "insertNulls": false, "lineInterpolation": "linear", - "lineStyle": { - "fill": "solid" - }, "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", - "spanNulls": 15000, + "spanNulls": false, "stacking": { "group": "A", "mode": "none" @@ -3115,17 +3058,18 @@ "value": 80 } ] - } + }, + "unit": "µs" }, "overrides": [] }, "gridPos": { "h": 10, "w": 8, - "x": 0, - "y": 84 + "x": 8, + "y": 79 }, - "id": 23, + "id": 37, "options": { "legend": { "calcs": [ @@ -3137,7 +3081,9 @@ ], "displayMode": "table", "placement": "bottom", - "showLegend": true + "showLegend": true, + "sortBy": "50th %", + "sortDesc": true }, "tooltip": { "hideZeros": false, @@ -3150,13 +3096,13 @@ { "datasource": { "type": "influxdb", - "uid": "provisioned_influxdb_sov" + "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_rollup_batch_processing\" and r._field == \"transactions\"\n )\n |> map(fn: (r) => ({ r with _field: \"Transactions per batch on host \" + r.host }))\n |> group(columns: [\"_field\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_rollup_slot_execution_time_us\" and r[\"context\"] == \"Node\" and\n r._field != \"da_height\" and r._field != \"rollup_height\" and r._field != \"visible_slot_number\" and r._field != \"gas_used_compute\" and r._field != \"gas_used_mem\"\n )\n |> group(columns: [\"_field\"])\n \n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: max)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", "refId": "A" } ], - "title": "Transactions Processed Per Single Batch", + "title": "Node Slot Processing Times", "type": "timeseries" }, { @@ -3164,7 +3110,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "Time it takes to process single transaction.\nDoes not include signature check", + "description": "Breakdown of `processing_changes_time` from runner loop time", "fieldConfig": { "defaults": { "color": { @@ -3194,7 +3140,7 @@ "type": "linear" }, "showPoints": "auto", - "spanNulls": 300000, + "spanNulls": false, "stacking": { "group": "A", "mode": "none" @@ -3223,10 +3169,10 @@ "gridPos": { "h": 10, "w": 8, - "x": 8, - "y": 84 + "x": 16, + "y": 79 }, - "id": 41, + "id": 36, "options": { "legend": { "calcs": [ @@ -3244,7 +3190,7 @@ }, "tooltip": { "hideZeros": false, - "mode": "multi", + "mode": "single", "sort": "none" } }, @@ -3255,11 +3201,11 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_transaction_execution_us\" and\n r._field == \"value\" and r[\"context\"] == \"Node\"\n )\n |> drop(columns: [\"host\", \"sequencer\", \"context\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 1.0, column: column))\nelse\n data\n", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_runner_process_stf_changes\" and r._field != \"da_height\" and r._field != \"proofs_count\" and r._field != \"finalized_transitions_count\"\n )\n |> group(columns: [\"_field\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: max)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\n", "refId": "A" } ], - "title": "Transaction Processing Time", + "title": "Runner STF changes processing detailed", "type": "timeseries" }, { @@ -3267,7 +3213,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "Breakdown of `committing_storage_time` from process_finalized_transitions time", + "description": "How many transactions of all statuses have been in single batch", "fieldConfig": { "defaults": { "color": { @@ -3291,13 +3237,16 @@ }, "insertNulls": false, "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", - "spanNulls": false, + "spanNulls": 15000, "stacking": { "group": "A", "mode": "none" @@ -3318,39 +3267,17 @@ "value": 80 } ] - }, - "unit": "µs" - }, - "overrides": [ - { - "matcher": { - "id": "byRegexp", - "options": "/.*_attempts_.*/" - }, - "properties": [ - { - "id": "custom.axisPlacement", - "value": "right" - }, - { - "id": "unit", - "value": "sishort" - }, - { - "id": "custom.axisLabel", - "value": "NOMT Write Attempts" - } - ] } - ] + }, + "overrides": [] }, "gridPos": { "h": 10, "w": 8, - "x": 16, - "y": 84 + "x": 0, + "y": 89 }, - "id": 62, + "id": 23, "options": { "legend": { "calcs": [ @@ -3362,9 +3289,7 @@ ], "displayMode": "table", "placement": "bottom", - "showLegend": true, - "sortBy": "50th %", - "sortDesc": true + "showLegend": true }, "tooltip": { "hideZeros": false, @@ -3377,13 +3302,13 @@ { "datasource": { "type": "influxdb", - "uid": "${DS}" + "uid": "provisioned_influxdb_sov" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_nomt_commit_detailed\"\n )\n |> group(columns: [\"_field\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: max)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\n", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_rollup_batch_processing\" and r._field == \"transactions\"\n )\n |> map(fn: (r) => ({ r with _field: \"Transactions per batch on host \" + r.host }))\n |> group(columns: [\"_field\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", "refId": "A" } ], - "title": "Nomt Commit Detailed", + "title": "Transactions Processed Per Single Batch", "type": "timeseries" }, { @@ -3391,7 +3316,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "How many bytes processed per each batch", + "description": "Time it takes to process single transaction.\nDoes not include signature check", "fieldConfig": { "defaults": { "color": { @@ -3415,16 +3340,13 @@ }, "insertNulls": false, "lineInterpolation": "linear", - "lineStyle": { - "fill": "solid" - }, "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", - "spanNulls": 15000, + "spanNulls": 300000, "stacking": { "group": "A", "mode": "none" @@ -3446,17 +3368,17 @@ } ] }, - "unit": "decbytes" + "unit": "µs" }, "overrides": [] }, "gridPos": { "h": 10, - "w": 12, - "x": 0, - "y": 94 + "w": 8, + "x": 8, + "y": 89 }, - "id": 40, + "id": 41, "options": { "legend": { "calcs": [ @@ -3468,11 +3390,13 @@ ], "displayMode": "table", "placement": "bottom", - "showLegend": true + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true }, "tooltip": { "hideZeros": false, - "mode": "single", + "mode": "multi", "sort": "none" } }, @@ -3481,13 +3405,13 @@ { "datasource": { "type": "influxdb", - "uid": "provisioned_influxdb_sov" + "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_runner_counts\" and (r._field == \"batch_bytes\" or r._field == \"proof_bytes\")\n )\n |> drop(columns: [\"host\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: max)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_transaction_execution_us\" and\n r._field == \"value\" and r[\"context\"] == \"Node\"\n )\n |> drop(columns: [\"host\", \"sequencer\", \"context\", \"deployment_name\", \"environment\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 1.0, column: column))\nelse\n data\n", "refId": "A" } ], - "title": "Batches Bytes Processed", + "title": "Transaction Processing Time", "type": "timeseries" }, { @@ -3495,7 +3419,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "How much gas used for slot, in terms of gas unit spent on compute and memory", + "description": "Breakdown of `committing_storage_time` from process_finalized_transitions time", "fieldConfig": { "defaults": { "color": { @@ -3547,17 +3471,17 @@ } ] }, - "unit": "sishort" + "unit": "µs" }, "overrides": [] }, "gridPos": { "h": 10, - "w": 12, - "x": 12, - "y": 94 + "w": 8, + "x": 16, + "y": 89 }, - "id": 29, + "id": 62, "options": { "legend": { "calcs": [ @@ -3569,11 +3493,13 @@ ], "displayMode": "table", "placement": "bottom", - "showLegend": true + "showLegend": true, + "sortBy": "50th %", + "sortDesc": true }, "tooltip": { "hideZeros": false, - "mode": "multi", + "mode": "single", "sort": "none" } }, @@ -3584,31 +3510,123 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\"\n and r._measurement == \"sov_rollup_slot_execution_time_us\" \n and r._field == \"gas_used_compute\"\n )\n |> drop(columns: [\"host\"])\n // |> map(fn: (r) => ({ r with _field: \"Gas used\" }))\n // |> group(columns: [\"_field\", \"context\"]) \n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_nomt_commit_detailed\" and (r._field != \"merklized_attempts_write_user\" and r._field != \"merklized_write_attempts_kernel\")\n )\n |> group(columns: [\"_field\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: max)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\n", "refId": "A" } ], - "title": "Slot Gas Usage", + "title": "Nomt Commit Detailed", "type": "timeseries" }, { - "collapsed": false, + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "How many bytes processed per each batch", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": 15000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, "gridPos": { - "h": 1, - "w": 24, + "h": 10, + "w": 12, "x": 0, - "y": 104 + "y": 99 }, - "id": 59, - "panels": [], - "title": "Under Construction", - "type": "row" + "id": 40, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "p50", + "max", + "lastNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.0+security-01", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "provisioned_influxdb_sov" + }, + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_runner_counts\" and (r._field == \"batch_bytes\" or r._field == \"proof_bytes\")\n )\n |> drop(columns: [\"host\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: max)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data", + "refId": "A" + } + ], + "title": "Batches Bytes Processed", + "type": "timeseries" }, { "datasource": { "type": "influxdb", "uid": "${DS}" }, + "description": "How much gas used for slot, in terms of gas unit spent on compute and memory", "fieldConfig": { "defaults": { "color": { @@ -3618,9 +3636,8 @@ "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", - "axisLabel": "Shows the queue depth for the background task, and the amount of time spent blocking. Note that time spent blocking is aggregated per interval - so if the aggregation interval is 10s, this metric shows the total time spent blocking per 10s interval", + "axisLabel": "", "axisPlacement": "auto", - "axisSoftMax": -3, "barAlignment": 0, "barWidthFactor": 0.6, "drawStyle": "line", @@ -3645,74 +3662,49 @@ "mode": "none" }, "thresholdsStyle": { - "mode": "dashed" + "mode": "off" } }, - "fieldMinMax": false, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green" + }, + { + "color": "red", + "value": 80 } ] }, - "unit": "none" + "unit": "sishort" }, - "overrides": [ - { - "__systemRef": "hideSeriesFrom", - "matcher": { - "id": "byNames", - "options": { - "mode": "exclude", - "names": [ - "close_batch_duration_us size_limit_reached" - ], - "prefix": "All except:", - "readOnly": true - } - }, - "properties": [ - { - "id": "custom.hideFrom", - "value": { - "legend": false, - "tooltip": false, - "viz": true - } - } - ] - } - ] + "overrides": [] }, "gridPos": { "h": 10, "w": 12, - "x": 0, - "y": 105 + "x": 12, + "y": 99 }, - "id": 53, + "id": 29, "options": { "legend": { "calcs": [ "min", "mean", - "max", - "lastNotNull", "p50", - "p99" + "max", + "lastNotNull" ], "displayMode": "table", "placement": "bottom", - "showLegend": true, - "sortBy": "99th %", - "sortDesc": true + "showLegend": true }, "tooltip": { "hideZeros": false, - "mode": "single", + "mode": "multi", "sort": "none" } }, @@ -3723,11 +3715,11 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" \n and r._measurement == \"sov_rollup_preferred_sequencer_batch\" \n )\n |> aggregateWindow(every: ${agg_interval}, fn: sum, createEmpty: false)\n |> group(columns: [\"_field\", \"close_reason\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\"\n and r._measurement == \"sov_rollup_slot_execution_time_us\" \n and r._field == \"gas_used_compute\"\n )\n |> drop(columns: [\"host\"])\n // |> map(fn: (r) => ({ r with _field: \"Gas used\" }))\n // |> group(columns: [\"_field\", \"context\"]) \n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", "refId": "A" } ], - "title": "(Under Construction) Batch Metrics", + "title": "Slot Gas Usage", "type": "timeseries" }, { @@ -3735,7 +3727,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "Time it takes to process single transaction.\nDoes not include signature check", + "description": "The time taken to fetch the block from the Data Availability layer", "fieldConfig": { "defaults": { "color": { @@ -3787,17 +3779,17 @@ } ] }, - "unit": "µs" + "unit": "ms" }, "overrides": [] }, "gridPos": { - "h": 10, + "h": 9, "w": 12, - "x": 12, - "y": 105 + "x": 0, + "y": 109 }, - "id": 58, + "id": 43, "options": { "legend": { "calcs": [ @@ -3809,13 +3801,11 @@ ], "displayMode": "table", "placement": "bottom", - "showLegend": true, - "sortBy": "Name", - "sortDesc": true + "showLegend": true }, "tooltip": { "hideZeros": false, - "mode": "multi", + "mode": "single", "sort": "none" } }, @@ -3826,26 +3816,1321 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\n base_data = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_rollup_auth_and_process_metrics\"\n and r._field != \"attempt_tx_slowest_read_name\"\n )\n\n // Count of metrics\n count_data = base_data\n |> filter(fn: (r) => r._field == \"total_time_us\")\n |> aggregateWindow(every: ${agg_interval}, fn: count)\n |> set(key: \"_field\", value: \"metric_count\")\n\n // Sum of total_time_us\n sum_data = base_data\n |> filter(fn: (r) => r._field == \"total_time_us\")\n |> aggregateWindow(every: ${agg_interval}, fn: sum)\n |> set(key: \"_field\", value: \"total_time_us_sum\")\n\n // Original aggregated data\n agg_data = base_data |> group(columns: [\"_field\", \"context\"])\n\n final_agg_data = if agg_func == \"raw\" then\n agg_data\n else if agg_func == \"median\" then\n agg_data |> aggregateWindow(every: ${agg_interval}, fn: median)\n else if agg_func == \"mean\" then\n agg_data |> aggregateWindow(every: ${agg_interval}, fn: mean)\n else if agg_func == \"p90\" then\n agg_data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\n else if agg_func == \"p99\" then\n agg_data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\n else if agg_func == \"max\" then\n agg_data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 1.0, column: column))\n else\n agg_data |> aggregateWindow(every: ${agg_interval}, fn: median)\n\n // Union all streams\n union(tables: [final_agg_data, count_data, sum_data])", + "hide": false, + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_runner_da\" and\n r._field != \"da_height\" and r._field != \"sync_distance\"\n )\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data\n", + "refId": "A" + } + ], + "title": "Fetch Data Availability block time", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 118 + }, + "id": 32, + "panels": [], + "title": "Throughput", + "type": "row" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": 300000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 119 + }, + "id": 33, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "p50", + "max", + "lastNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.0+security-01", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "provisioned_influxdb_sov" + }, + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and r._measurement == \"sov_rollup_runner_counts\" and (r._field == \"batch_bytes\" or r._field == \"proof_bytes\")\n )\n |> drop(columns: [\"host\"])\n |> aggregateWindow(every: 30s, fn: sum, createEmpty: false)\n |> map(fn: (r) => ({r with _value: float(v: r._value) / 30.0}))\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data", + "refId": "A" + } + ], + "title": "Batch bytes per second", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "As measured on node, averaged by 30 seconds\nOnly suppots raw, median or mean aggregation functions", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "TPS", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": 300000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 119 + }, + "id": 20, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "p50", + "max", + "lastNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.0+security-01", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "provisioned_influxdb_sov" + }, + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_rollup_runner_counts\" and\n r._field == \"transactions_c\"\n )\n |> aggregateWindow(every: 30s, fn: sum, createEmpty: false)\n |> map(fn: (r) => ({ \n r with \n _value: r._value / 30.0,\n _field: \"TPS on host\" + r.host \n }))\n |> drop(columns: [\"host\", \"environment\", \"deployment_name\"])\n\nif agg_func == \"raw\" then\n data |> group(columns: [\"_field\"])\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\n", + "refId": "A" + } + ], + "title": "Transactions Per Second", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "How much gas used for slot, in terms of gas unit spent on compute and memory", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Gas Per Second", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": 300000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "sishort" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 129 + }, + "id": 34, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "p50", + "max", + "lastNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.6.0+security-01", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\"\n and r._measurement == \"sov_rollup_slot_execution_time_us\" \n and r._field == \"gas_used_compute\"\n )\n |> drop(columns: [\"host\"])\n |> aggregateWindow(every: 30s, fn: sum, createEmpty: false)\n |> map(fn: (r) => ({r with _value: float(v: r._value) / 30.0}))\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", + "refId": "A" + } + ], + "title": "Slot Gas Per Second", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "Averaged by 30 seconds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Transactions per second", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": 300000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 129 + }, + "id": 35, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "p50", + "max", + "lastNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.6.0+security-01", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_transaction_execution_us\" and\n r._field == \"value\"\n )\n |> drop(columns: [\"sequencer\", \"rollup_height\", \"host\"])\n |> group(columns: [\"call_message\", \"context\", \"status\"], mode: \"by\")\n |> aggregateWindow(\n every: 30s,\n fn: count,\n createEmpty: false\n )\n |> map(fn: (r) => ({\n r with\n _value: float(v: r._value) / 30.0\n }))\n\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\n", + "refId": "A" + } + ], + "title": "Individual Transactions Throughput", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "Throughput per handler", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Requests per Second", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": 300000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "sishort" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 139 + }, + "id": 39, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "p50", + "max", + "lastNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.0+security-01", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_http_handlers\" and\n r._field == \"processing_time_us\"\n )\n |> drop(columns: [\"host\"])\n |> rename(columns: {req_method: \"method\", resp_status: \"status\"})\n |> group(columns: [\"path\", \"method\", \"status\"])\n |> aggregateWindow(every: 30s, fn: count, createEmpty: false)\n |> map(fn: (r) => ({r with _value: float(v: r._value) / 30.0}))\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data", + "refId": "A" + } + ], + "title": "HTTP requests", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "Averaged by 30 seconds", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Transactions per second", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 1, + "drawStyle": "bars", + "fillOpacity": 100, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": 300000, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "sishort" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 139 + }, + "id": 60, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "p50", + "max", + "lastNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.6.0+security-01", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_transaction_execution_us\" and\n r._field == \"value\"\n )\n |> drop(columns: [\"sequencer\", \"rollup_height\", \"host\"])\n |> group(columns: [\"call_message\", \"context\", \"status\"], mode: \"by\")\n |> aggregateWindow(\n every: 30s,\n fn: count,\n createEmpty: false\n )\n |> map(fn: (r) => ({\n r with\n _value: float(v: r._value) / 30.0\n }))\n\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\n", + "refId": "A" + } + ], + "title": "Individual Transactions Throughput Stacked", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 149 + }, + "id": 28, + "panels": [], + "title": "Misc", + "type": "row" + }, + { + "datasource": { + "type": "loki", + "uid": "${LOKI_DS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 150 + }, + "id": 27, + "options": { + "legend": { + "calcs": [ + "median", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Max", + "sortDesc": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.0+security-01", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "${LOKI_DS}" + }, + "direction": "backward", + "editorMode": "code", + "expr": "sum by (level) (\n count_over_time(\n {host=\"$host\"}\n [$__interval]\n )\n)", + "queryType": "range", + "refId": "A" + } + ], + "title": "Log messages by level", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": 300000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 150 + }, + "id": 31, + "options": { + "legend": { + "calcs": [ + "mean", + "median", + "p90" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Median", + "sortDesc": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.0+security-01", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) => r.host == \"${host}\" and r._measurement == \"filecount\" and r._field == \"size_bytes\")\n |> derivative(unit: 1s, nonNegative: false)\n |> drop(columns: [\"host\", \"environment\", \"deployment_name\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data", + "refId": "A" + } + ], + "title": "Rollup Data Growth Rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "left", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "fieldMinMax": false, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "batches_count" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "left" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "custom.axisLabel", + "value": "# of batches to replay" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "transactions_count" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "unit", + "value": "short" + }, + { + "id": "custom.axisLabel", + "value": "# of transactions to replay" + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 159 + }, + "id": 25, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "max", + "lastNotNull", + "p50", + "p99" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.6.0+security-01", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "query": "\nagg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\"\n and r._measurement == \"sov_rollup_preferred_sequencer_update_state\"\n and (r._field == \"batches_count\" or r._field == \"transactions_count\") \n )\n |> group(columns: [\"_field\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", + "refId": "A" + } + ], + "title": "State replay workload (batches & txs)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 159 + }, + "id": 30, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.0+security-01", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) => r.host == \"${host}\" and r._measurement == \"filecount\" and r._field == \"size_bytes\")\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data", + "refId": "A" + } + ], + "title": "Rollup Data Size", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "Distance from synced DA height to the head DA height.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": 15000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 6, + "x": 0, + "y": 168 + }, + "id": 44, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "p50", + "max", + "lastNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.0+security-01", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "provisioned_influxdb_sov" + }, + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_runner_da\" and\n r._field == \"sync_distance\"\n )\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data", + "refId": "A" + } + ], + "title": "Sync Distance", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "How many blocks per second, node is processing during sync. Zero value meaning syncing is not happening.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "blocks per second", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": 15000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "sishort" + }, + "overrides": [ + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "Sync blocks per second on host {deployment_name=\"relay-mainnet-01\", environment=\"sov-aws-dev\", host=\"i-01609457ce787ea19\"}" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 6, + "x": 6, + "y": 168 + }, + "id": 69, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "p50", + "max", + "lastNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Name", + "sortDesc": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.0+security-01", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "provisioned_influxdb_sov" + }, + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_runner_da\" and\n r._field == \"sync_distance\"\n )\n |> derivative(unit: 10s, nonNegative: false)\n |> map(fn: (r) => ({ \n r with \n _value: (r._value * -1.0) / 10.0,\n _field: \"Sync blocks per second on host\"\n }))\n\nif agg_func == \"raw\" then\n data |> group(columns: [\"_field\"])\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)", "refId": "A" } ], - "title": "(Under Construction) Detailed Tx Timing", + "title": "Sync Rate", "type": "timeseries" }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 115 - }, - "id": 32, - "panels": [], - "title": "Throughput", - "type": "row" - }, { "datasource": { "type": "influxdb", @@ -3875,16 +5160,13 @@ }, "insertNulls": false, "lineInterpolation": "linear", - "lineStyle": { - "fill": "solid" - }, "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", - "spanNulls": 300000, + "spanNulls": false, "stacking": { "group": "A", "mode": "none" @@ -3906,17 +5188,17 @@ } ] }, - "unit": "binBps" + "unit": "sishort" }, "overrides": [] }, "gridPos": { - "h": 10, + "h": 8, "w": 12, - "x": 0, - "y": 116 + "x": 12, + "y": 168 }, - "id": 33, + "id": 47, "options": { "legend": { "calcs": [ @@ -3941,13 +5223,14 @@ { "datasource": { "type": "influxdb", - "uid": "provisioned_influxdb_sov" + "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and r._measurement == \"sov_rollup_runner_counts\" and (r._field == \"batch_bytes\" or r._field == \"proof_bytes\")\n )\n |> drop(columns: [\"host\"])\n |> aggregateWindow(every: 30s, fn: sum, createEmpty: false)\n |> map(fn: (r) => ({r with _value: float(v: r._value) / 30.0}))\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data", + "hide": false, + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n (r._measurement == \"sov_nomt_db_stats\" or r._measurement == \"nomt_db_stats\") and r._field != \"avg_page_fetch_time_ns\" and r._field != \"avg_value_fetch_time_ns\"\n )\n |> drop(columns: [\"host\", \"_measurement\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data\n", "refId": "A" } ], - "title": "Batch bytes per second", + "title": "NOMT Counts", "type": "timeseries" }, { @@ -3955,7 +5238,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "As measured on node, averaged by 30 seconds\nOnly suppots raw, median or mean aggregation functions", + "description": "Breakdown of `committing_storage_time` from process_finalized_transitions time", "fieldConfig": { "defaults": { "color": { @@ -3965,12 +5248,12 @@ "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", - "axisLabel": "TPS", + "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 0, + "barWidthFactor": 1, + "drawStyle": "bars", + "fillOpacity": 100, "gradientMode": "none", "hideFrom": { "legend": false, @@ -3979,19 +5262,16 @@ }, "insertNulls": false, "lineInterpolation": "linear", - "lineStyle": { - "fill": "solid" - }, - "lineWidth": 1, + "lineWidth": 5, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", - "spanNulls": 300000, + "spanNulls": false, "stacking": { "group": "A", - "mode": "none" + "mode": "percent" }, "thresholdsStyle": { "mode": "off" @@ -4003,19 +5283,24 @@ "steps": [ { "color": "green" + }, + { + "color": "red", + "value": 80 } ] - } + }, + "unit": "µs" }, "overrides": [] }, "gridPos": { "h": 10, "w": 12, - "x": 12, - "y": 116 + "x": 0, + "y": 176 }, - "id": 20, + "id": 68, "options": { "legend": { "calcs": [ @@ -4027,7 +5312,9 @@ ], "displayMode": "table", "placement": "bottom", - "showLegend": true + "showLegend": true, + "sortBy": "50th %", + "sortDesc": true }, "tooltip": { "hideZeros": false, @@ -4040,13 +5327,13 @@ { "datasource": { "type": "influxdb", - "uid": "provisioned_influxdb_sov" + "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_rollup_runner_counts\" and\n r._field == \"transactions_c\"\n )\n |> aggregateWindow(every: 30s, fn: sum, createEmpty: false)\n |> map(fn: (r) => ({ \n r with \n _value: r._value / 30.0,\n _field: \"TPS on host\" + r.host \n }))\n\nif agg_func == \"raw\" then\n data |> group(columns: [\"_field\"])\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\n", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_nomt_commit_detailed\" and r._field != \"merklized_attempts_write_user\" and r._field != \"merklized_write_attempts_kernel\" and r._field != \"merklized_from_caller_us\"\n )\n |> group(columns: [\"_field\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: max)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\n", "refId": "A" } ], - "title": "Transactions Per Second", + "title": "Nomt Commit Ratios", "type": "timeseries" }, { @@ -4054,7 +5341,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "How much gas used for slot, in terms of gas unit spent on compute and memory", + "description": "", "fieldConfig": { "defaults": { "color": { @@ -4064,7 +5351,7 @@ "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", - "axisLabel": "Gas Per Second", + "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "barWidthFactor": 0.6, @@ -4084,7 +5371,7 @@ "type": "linear" }, "showPoints": "auto", - "spanNulls": 300000, + "spanNulls": false, "stacking": { "group": "A", "mode": "none" @@ -4106,17 +5393,17 @@ } ] }, - "unit": "sishort" + "unit": "percentunit" }, "overrides": [] }, "gridPos": { "h": 10, "w": 12, - "x": 0, - "y": 126 + "x": 12, + "y": 176 }, - "id": 34, + "id": 78, "options": { "legend": { "calcs": [ @@ -4128,13 +5415,11 @@ ], "displayMode": "table", "placement": "bottom", - "showLegend": true, - "sortBy": "Mean", - "sortDesc": true + "showLegend": true }, "tooltip": { "hideZeros": false, - "mode": "multi", + "mode": "single", "sort": "none" } }, @@ -4145,11 +5430,12 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\"\n and r._measurement == \"sov_rollup_slot_execution_time_us\" \n and r._field == \"gas_used_compute\"\n )\n |> drop(columns: [\"host\"])\n |> aggregateWindow(every: 30s, fn: sum, createEmpty: false)\n |> map(fn: (r) => ({r with _value: float(v: r._value) / 30.0}))\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", + "hide": false, + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n (r._measurement == \"sov_nomt_db_stats\" or r._measurement == \"nomt_db_stats\") and (r._field == \"ht_occupied\" or r._field == \"ht_capacity\")\n )\n |> drop(columns: [\"_measurement\"])\n |> pivot(rowKey: [\"_time\", \"host\"], columnKey: [\"_field\"], valueColumn: \"_value\")\n |> map(fn: (r) => ({r with _value: float(v: r.ht_occupied) / float(v: r.ht_capacity)}))\n |> drop(columns: [\"host\", \"environment\", \"ht_occupied\", \"ht_capacity\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data\n", "refId": "A" } ], - "title": "Slot Gas Per Second", + "title": "NOMT Buckets Occupancy", "type": "timeseries" }, { @@ -4157,7 +5443,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "Averaged by 30 seconds", + "description": "On average", "fieldConfig": { "defaults": { "color": { @@ -4167,7 +5453,7 @@ "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", - "axisLabel": "Transactions per second", + "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "barWidthFactor": 0.6, @@ -4181,13 +5467,16 @@ }, "insertNulls": false, "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", - "spanNulls": 300000, + "spanNulls": 15000, "stacking": { "group": "A", "mode": "none" @@ -4208,18 +5497,17 @@ "value": 80 } ] - }, - "unit": "sishort" + } }, "overrides": [] }, "gridPos": { "h": 10, "w": 12, - "x": 12, - "y": 126 + "x": 0, + "y": 186 }, - "id": 35, + "id": 73, "options": { "legend": { "calcs": [ @@ -4231,13 +5519,11 @@ ], "displayMode": "table", "placement": "bottom", - "showLegend": true, - "sortBy": "Mean", - "sortDesc": true + "showLegend": true }, "tooltip": { "hideZeros": false, - "mode": "multi", + "mode": "single", "sort": "none" } }, @@ -4246,13 +5532,13 @@ { "datasource": { "type": "influxdb", - "uid": "${DS}" + "uid": "provisioned_influxdb_sov" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_transaction_execution_us\" and\n r._field == \"value\"\n )\n |> drop(columns: [\"sequencer\", \"rollup_height\", \"host\"])\n |> group(columns: [\"call_message\", \"context\", \"status\"], mode: \"by\")\n |> aggregateWindow(\n every: 30s,\n fn: count,\n createEmpty: false\n )\n |> map(fn: (r) => ({\n r with\n _value: float(v: r._value) / 30.0\n }))\n\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\n", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_runner_counts\" and r._field == \"batches_c\"\n )\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)", "refId": "A" } ], - "title": "Individual Transactions Throughput", + "title": "Batches per DA block", "type": "timeseries" }, { @@ -4260,7 +5546,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "Throughput per handler", + "description": "", "fieldConfig": { "defaults": { "color": { @@ -4270,8 +5556,10 @@ "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", - "axisLabel": "Requests per Second", + "axisLabel": "", "axisPlacement": "auto", + "axisSoftMax": 1, + "axisSoftMin": 0, "barAlignment": 0, "barWidthFactor": 0.6, "drawStyle": "line", @@ -4290,7 +5578,7 @@ "type": "linear" }, "showPoints": "auto", - "spanNulls": 300000, + "spanNulls": false, "stacking": { "group": "A", "mode": "none" @@ -4312,17 +5600,17 @@ } ] }, - "unit": "sishort" + "unit": "percentunit" }, "overrides": [] }, "gridPos": { - "h": 9, + "h": 10, "w": 12, - "x": 0, - "y": 136 + "x": 12, + "y": 186 }, - "id": 39, + "id": 67, "options": { "legend": { "calcs": [ @@ -4334,9 +5622,7 @@ ], "displayMode": "table", "placement": "bottom", - "showLegend": true, - "sortBy": "Mean", - "sortDesc": true + "showLegend": true }, "tooltip": { "hideZeros": false, @@ -4351,11 +5637,12 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_http_handlers\" and\n r._field == \"processing_time_us\"\n )\n |> drop(columns: [\"host\"])\n |> rename(columns: {req_method: \"method\", resp_status: \"status\"})\n |> group(columns: [\"path\", \"method\", \"status\"])\n |> aggregateWindow(every: 30s, fn: count, createEmpty: false)\n |> map(fn: (r) => ({r with _value: float(v: r._value) / 30.0}))\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data", + "hide": false, + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n (r._measurement == \"sov_nomt_db_stats\" or r._measurement == \"nomt_db_stats\") \n and (r._field == \"page_cache_misses\" or r._field == \"page_requests\")\n )\n |> drop(columns: [\"host\", \"_measurement\"])\n\naggregated = if agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data\n\naggregated\n |> pivot(rowKey: [\"_time\"], columnKey: [\"_field\"], valueColumn: \"_value\")\n |> map(fn: (r) => ({\n r with \n cache_miss_ratio: r.page_cache_misses / r.page_requests,\n _field: \"cache_miss_ratio\"\n }))\n |> drop(columns: [\"page_cache_misses\", \"page_requests\", \"_start\", \"_stop\"])", "refId": "A" } ], - "title": "HTTP requests", + "title": "NOMT Page Cache Misses", "type": "timeseries" }, { @@ -4363,7 +5650,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "Averaged by 30 seconds", + "description": "", "fieldConfig": { "defaults": { "color": { @@ -4373,12 +5660,12 @@ "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", - "axisLabel": "Transactions per second", + "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, - "barWidthFactor": 1, - "drawStyle": "bars", - "fillOpacity": 100, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, @@ -4387,16 +5674,16 @@ }, "insertNulls": false, "lineInterpolation": "linear", - "lineWidth": 2, + "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", - "spanNulls": 300000, + "spanNulls": false, "stacking": { "group": "A", - "mode": "normal" + "mode": "none" }, "thresholdsStyle": { "mode": "off" @@ -4422,10 +5709,10 @@ "gridPos": { "h": 10, "w": 12, - "x": 12, - "y": 136 + "x": 0, + "y": 196 }, - "id": 60, + "id": 46, "options": { "legend": { "calcs": [ @@ -4437,13 +5724,11 @@ ], "displayMode": "table", "placement": "bottom", - "showLegend": true, - "sortBy": "Mean", - "sortDesc": true + "showLegend": true }, "tooltip": { "hideZeros": false, - "mode": "multi", + "mode": "single", "sort": "none" } }, @@ -4454,31 +5739,20 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_transaction_execution_us\" and\n r._field == \"value\"\n )\n |> drop(columns: [\"sequencer\", \"rollup_height\", \"host\"])\n |> group(columns: [\"call_message\", \"context\", \"status\"], mode: \"by\")\n |> aggregateWindow(\n every: 30s,\n fn: count,\n createEmpty: false\n )\n |> map(fn: (r) => ({\n r with\n _value: float(v: r._value) / 30.0\n }))\n\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\n", + "hide": false, + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n (r._measurement == \"sov_db_pruner\" or r._measurement == \"pruner\") and r._field != \"time_us\"\n )\n |> drop(columns: [\"_measurement\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data\n", "refId": "A" } ], - "title": "Individual Transactions Throughput Stacked", + "title": "Pruning counts", "type": "timeseries" }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 146 - }, - "id": 28, - "panels": [], - "title": "Misc", - "type": "row" - }, { "datasource": { - "type": "loki", - "uid": "${LOKI_DS}" + "type": "influxdb", + "uid": "${DS}" }, + "description": "The time taken to fetch the block from the Data Availability layer", "fieldConfig": { "defaults": { "color": { @@ -4523,31 +5797,36 @@ "steps": [ { "color": "green" + }, + { + "color": "red", + "value": 80 } ] }, - "unit": "short" + "unit": "µs" }, "overrides": [] }, "gridPos": { - "h": 9, + "h": 10, "w": 12, - "x": 0, - "y": 147 + "x": 12, + "y": 196 }, - "id": 27, + "id": 45, "options": { "legend": { "calcs": [ - "median", - "max" + "min", + "mean", + "p50", + "max", + "lastNotNull" ], "displayMode": "table", "placement": "bottom", - "showLegend": true, - "sortBy": "Max", - "sortDesc": true + "showLegend": true }, "tooltip": { "hideZeros": false, @@ -4559,17 +5838,15 @@ "targets": [ { "datasource": { - "type": "loki", - "uid": "${LOKI_DS}" + "type": "influxdb", + "uid": "${DS}" }, - "direction": "backward", - "editorMode": "code", - "expr": "sum by (level) (\n count_over_time(\n {host=\"$host\"}\n [$__interval]\n )\n)", - "queryType": "range", + "hide": false, + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n (r._measurement == \"sov_db_pruner\" or r._measurement == \"pruner\") and r._field == \"time_us\"\n )\n |> drop(columns: [\"_measurement\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data\n", "refId": "A" } ], - "title": "Log messages by level", + "title": "Pruning time", "type": "timeseries" }, { @@ -4577,6 +5854,7 @@ "type": "influxdb", "uid": "${DS}" }, + "description": "total_busy_duration: total amount of time spent across all threads\nmean_poll_duration: the average length of a single poll, mean across all polls and all workers\n - worker_max: the mean poll duration of the worker with the worst (highest) value\n- worker min: the mean poll duration of the worker with the best (lowest) value", "fieldConfig": { "defaults": { "color": { @@ -4606,7 +5884,7 @@ "type": "linear" }, "showPoints": "auto", - "spanNulls": 300000, + "spanNulls": false, "stacking": { "group": "A", "mode": "none" @@ -4628,48 +5906,44 @@ } ] }, - "unit": "Bps" + "unit": "µs" }, "overrides": [ { - "__systemRef": "hideSeriesFrom", "matcher": { - "id": "byNames", - "options": { - "mode": "exclude", - "names": [ - "size_bytes {directory=\"/home/ubuntu/.celestia-bridge-mocha-4\", environment=\"shared-dev\", host=\"sov-hetzner-2\"}" - ], - "prefix": "All except:", - "readOnly": true - } + "id": "byRegexp", + "options": ".*count" }, "properties": [ { - "id": "custom.hideFrom", - "value": { - "legend": false, - "tooltip": false, - "viz": true - } + "id": "unit", + "value": "none" } ] } ] }, "gridPos": { - "h": 9, + "h": 10, "w": 12, - "x": 12, - "y": 147 + "x": 0, + "y": 206 }, - "id": 31, + "id": 74, "options": { "legend": { - "calcs": [], - "displayMode": "list", + "calcs": [ + "min", + "mean", + "p50", + "max", + "lastNotNull" + ], + "displayMode": "table", "placement": "bottom", - "showLegend": true + "showLegend": true, + "sortBy": "50th %", + "sortDesc": true }, "tooltip": { "hideZeros": false, @@ -4684,11 +5958,11 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) => r.host == \"${host}\" and r._measurement == \"filecount\" and r._field == \"size_bytes\")\n |> derivative(unit: 1s, nonNegative: false)\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data", + "query": "agg_func = \"${agg_func}\"\n\nbase_data = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_rollup_tokio_runtime\"\n )\n\nunaltered_data = base_data\n |> filter(fn: (r) =>\n (r._field == \"mean_poll_duration_worker_max_us\" or r._field == \"mean_poll_duration_worker_min_us\" or r._field == \"mean_poll_duration_us\" or r._field == \"idle_blocking_threads_count\" or r._field == \"blocking_threads_count\" or r._field == \"total_park_count\" or r._field == \"workers_count\")\n )\n |> group(columns: [\"_field\"])\n\ntotal_busyness = base_data\n |> filter(fn: (r) =>\n (r._field == \"total_busy_duration_us\")\n )\n |> group(columns: [\"_field\"])\n |> aggregateWindow(every: ${agg_interval}, fn: sum)\n\n\n\ndata = union(tables: [total_busyness, unaltered_data])\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", "refId": "A" } ], - "title": "Rollup Data Growth Rate", + "title": "Tokio stats", "type": "timeseries" }, { @@ -4696,7 +5970,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "The time taken to fetch the block from the Data Availability layer", + "description": "", "fieldConfig": { "defaults": { "color": { @@ -4748,42 +6022,17 @@ } ] }, - "unit": "ms" + "unit": "µs" }, - "overrides": [ - { - "__systemRef": "hideSeriesFrom", - "matcher": { - "id": "byNames", - "options": { - "mode": "exclude", - "names": [ - "get_block_time_ms {environment=\"shared-dev\", host=\"sov-hetzner-2\"}" - ], - "prefix": "All except:", - "readOnly": true - } - }, - "properties": [ - { - "id": "custom.hideFrom", - "value": { - "legend": false, - "tooltip": false, - "viz": true - } - } - ] - } - ] + "overrides": [] }, "gridPos": { - "h": 9, + "h": 10, "w": 12, - "x": 0, - "y": 156 + "x": 12, + "y": 206 }, - "id": 43, + "id": 57, "options": { "legend": { "calcs": [ @@ -4795,11 +6044,13 @@ ], "displayMode": "table", "placement": "bottom", - "showLegend": true + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true }, "tooltip": { "hideZeros": false, - "mode": "single", + "mode": "multi", "sort": "none" } }, @@ -4810,12 +6061,11 @@ "type": "influxdb", "uid": "${DS}" }, - "hide": false, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_runner_da\" and\n r._field != \"da_height\" and r._field != \"sync_distance\"\n )\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data\n", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_value_setter\" and\n r._field == \"duration_us\"\n )\n |> drop(columns: [\"host\", \"environment\"])\n\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 1.0, column: column))\nelse\n data\n", "refId": "A" } ], - "title": "Fetch Data Availability block time", + "title": "Example: SyntheticLoad", "type": "timeseries" }, { @@ -4861,6 +6111,7 @@ "mode": "off" } }, + "fieldMinMax": false, "mappings": [], "thresholds": { "mode": "absolute", @@ -4874,23 +6125,45 @@ } ] }, - "unit": "bytes" + "unit": "ms" }, - "overrides": [] + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "fetch_batches_duration_us" + }, + "properties": [ + { + "id": "unit", + "value": "µs" + } + ] + } + ] }, "gridPos": { - "h": 9, + "h": 10, "w": 12, - "x": 12, - "y": 156 + "x": 0, + "y": 216 }, - "id": 30, + "id": 56, "options": { "legend": { - "calcs": [], - "displayMode": "list", + "calcs": [ + "min", + "mean", + "max", + "lastNotNull", + "p50", + "p99" + ], + "displayMode": "table", "placement": "bottom", - "showLegend": true + "showLegend": true, + "sortBy": "Name", + "sortDesc": false }, "tooltip": { "hideZeros": false, @@ -4905,11 +6178,39 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) => r.host == \"${host}\" and r._measurement == \"filecount\" and r._field == \"size_bytes\")\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" \n and r._measurement == \"sov_rollup_preferred_sequencer_update_state\" \n and (r._field == \"duration_ms\" or r._field == \"total_message_processing_duration_ms\" or r._field == \"fetch_batches_duration_us\") \n )\n |> group(columns: [\"_field\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 1.0, column: column))\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", "refId": "A" } ], - "title": "Rollup Data Size", + "title": "State replay performance", + "transformations": [ + { + "id": "calculateField", + "options": { + "alias": "fetch_batches_duration_ms", + "binary": { + "left": { + "matcher": { + "id": "byName", + "options": "fetch_batches_duration_us" + } + }, + "operator": "/", + "right": { + "fixed": "1000" + } + }, + "mode": "binary", + "reduce": { + "include": [ + "fetch_batches_duration_us" + ], + "reducer": "allValues" + }, + "replaceFields": false + } + } + ], "type": "timeseries" }, { @@ -4917,7 +6218,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "Distance from synced DA height to the head DA height.", + "description": "Tx stats\n", "fieldConfig": { "defaults": { "color": { @@ -4941,16 +6242,13 @@ }, "insertNulls": false, "lineInterpolation": "linear", - "lineStyle": { - "fill": "solid" - }, "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", - "spanNulls": 15000, + "spanNulls": false, "stacking": { "group": "A", "mode": "none" @@ -4971,17 +6269,18 @@ "value": 80 } ] - } + }, + "unit": "µs" }, "overrides": [] }, "gridPos": { - "h": 8, + "h": 10, "w": 12, - "x": 0, - "y": 165 + "x": 12, + "y": 216 }, - "id": 44, + "id": 61, "options": { "legend": { "calcs": [ @@ -4993,7 +6292,9 @@ ], "displayMode": "table", "placement": "bottom", - "showLegend": true + "showLegend": true, + "sortBy": "50th %", + "sortDesc": true }, "tooltip": { "hideZeros": false, @@ -5006,13 +6307,13 @@ { "datasource": { "type": "influxdb", - "uid": "provisioned_influxdb_sov" + "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_runner_da\" and\n r._field == \"sync_distance\"\n )\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_rollup_auth_and_process_metrics\" and r[\"context\"] == \"Sequencer\" and\n (r._field == \"total_time_us\" or r._field == \"auth_time_us\" or r._field == \"check_uniqueness_time_us\" or r._field == \"resolve_context_time_us\" or r._field == \"mark_tx_attempted_time_us\" or r._field == \"attempt_tx_time_us\" or r._field == \"reserve_gas_time_us\" or r._field == \"refund_remaining_gas_time_us\" or r._field == \"reward_prover_time_us\")\n )\n |> group(columns: [\"_field\", \"context\"])\n \n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 1.00, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", "refId": "A" } ], - "title": "Sync Distance", + "title": "Tx Stats", "type": "timeseries" }, { @@ -5065,34 +6366,23 @@ "steps": [ { "color": "green" - }, - { - "color": "red", - "value": 80 } ] - }, - "unit": "sishort" + } }, "overrides": [] }, "gridPos": { - "h": 8, + "h": 10, "w": 12, - "x": 12, - "y": 165 + "x": 0, + "y": 226 }, - "id": 47, + "id": 80, "options": { "legend": { - "calcs": [ - "min", - "mean", - "p50", - "max", - "lastNotNull" - ], - "displayMode": "table", + "calcs": [], + "displayMode": "list", "placement": "bottom", "showLegend": true }, @@ -5109,12 +6399,11 @@ "type": "influxdb", "uid": "${DS}" }, - "hide": false, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"nomt_db_stats\" and r._field != \"avg_page_fetch_time_ns\" and r._field != \"avg_value_fetch_time_ns\"\n )\n |> drop(columns: [\"host\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data\n", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => \n r._measurement == \"sov_rollup_rate_limiter\"\n and r.host == \"${host}\"\n and r._field == \"count\" \n )\n |> drop(columns: [\"host\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\n", "refId": "A" } ], - "title": "NOMT Counts", + "title": "Rate Limiter cache size", "type": "timeseries" }, { @@ -5122,7 +6411,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "Breakdown of `committing_storage_time` from process_finalized_transitions time", + "description": "Tx stats\n", "fieldConfig": { "defaults": { "color": { @@ -5135,9 +6424,9 @@ "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, - "barWidthFactor": 1, - "drawStyle": "bars", - "fillOpacity": 100, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, @@ -5146,7 +6435,7 @@ }, "insertNulls": false, "lineInterpolation": "linear", - "lineWidth": 5, + "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" @@ -5155,7 +6444,7 @@ "spanNulls": false, "stacking": { "group": "A", - "mode": "percent" + "mode": "none" }, "thresholdsStyle": { "mode": "off" @@ -5174,17 +6463,42 @@ } ] }, - "unit": "µs" + "unit": "none" }, - "overrides": [] + "overrides": [ + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "attempt_tx_total_reads Node" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] }, "gridPos": { "h": 10, "w": 12, - "x": 0, - "y": 173 + "x": 12, + "y": 226 }, - "id": 68, + "id": 81, "options": { "legend": { "calcs": [ @@ -5213,11 +6527,11 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_nomt_commit_detailed\" and r._field != \"merklized_attempts_write_user\" and r._field != \"merklized_write_attempts_kernel\" and r._field != \"merklized_from_caller_us\"\n )\n |> group(columns: [\"_field\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: max)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\n", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_rollup_auth_and_process_metrics\" and\n (r._field == \"attempt_tx_total_reads\" or r._field == \"attempt_tx_cache_misses\" or r._field == \"attempt_tx_total_read_duration_us\" or r._field == \"attempt_tx_time_us\")\n )\n |> group(columns: [\"_field\", \"context\"])\n \n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 1.00, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", "refId": "A" } ], - "title": "Nomt Commit Ratios", + "title": "Attempt Tx State Access", "type": "timeseries" }, { @@ -5225,7 +6539,6 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "", "fieldConfig": { "defaults": { "color": { @@ -5237,8 +6550,6 @@ "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", - "axisSoftMax": 1, - "axisSoftMin": 0, "barAlignment": 0, "barWidthFactor": 0.6, "drawStyle": "line", @@ -5249,14 +6560,14 @@ "tooltip": false, "viz": false }, - "insertNulls": false, + "insertNulls": 3600000, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, - "showPoints": "auto", + "showPoints": "never", "spanNulls": false, "stacking": { "group": "A", @@ -5266,6 +6577,7 @@ "mode": "off" } }, + "fieldMinMax": false, "mappings": [], "thresholds": { "mode": "absolute", @@ -5279,29 +6591,45 @@ } ] }, - "unit": "percentunit" + "unit": "sishort" }, - "overrides": [] + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "fetch_batches_duration_us" + }, + "properties": [ + { + "id": "unit", + "value": "µs" + } + ] + } + ] }, "gridPos": { "h": 10, "w": 12, - "x": 12, - "y": 173 + "x": 0, + "y": 236 }, - "id": 67, + "id": 76, "options": { "legend": { "calcs": [ "min", "mean", - "p50", "max", - "lastNotNull" + "lastNotNull", + "p50", + "p99" ], "displayMode": "table", "placement": "bottom", - "showLegend": true + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true }, "tooltip": { "hideZeros": false, @@ -5316,12 +6644,39 @@ "type": "influxdb", "uid": "${DS}" }, - "hide": false, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"nomt_db_stats\" \n and (r._field == \"page_cache_misses\" or r._field == \"page_requests\")\n )\n |> drop(columns: [\"host\"])\n\naggregated = if agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data\n\naggregated\n |> pivot(rowKey: [\"_time\"], columnKey: [\"_field\"], valueColumn: \"_value\")\n |> map(fn: (r) => ({\n r with \n cache_miss_ratio: r.page_cache_misses / r.page_requests,\n _field: \"cache_miss_ratio\"\n }))\n |> drop(columns: [\"page_cache_misses\", \"page_requests\", \"_start\", \"_stop\"])", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>r.host == \"${host}\" and r._measurement == \"internal_agent\")\n |> drop(columns: [\"host\", \"environment\", \"go_version\", \"version\"])\n |> derivative(unit: 1s, nonNegative: true)\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 1.0, column: column))\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", "refId": "A" } ], - "title": "NOMT Page Cache Misses", + "title": "Telegraf metrics per second", + "transformations": [ + { + "id": "calculateField", + "options": { + "alias": "fetch_batches_duration_ms", + "binary": { + "left": { + "matcher": { + "id": "byName", + "options": "fetch_batches_duration_us" + } + }, + "operator": "/", + "right": { + "fixed": "1000" + } + }, + "mode": "binary", + "reduce": { + "include": [ + "fetch_batches_duration_us" + ], + "reducer": "allValues" + }, + "replaceFields": false + } + } + ], "type": "timeseries" }, { @@ -5329,7 +6684,6 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "The time taken to fetch the block from the Data Availability layer", "fieldConfig": { "defaults": { "color": { @@ -5351,7 +6705,7 @@ "tooltip": false, "viz": false }, - "insertNulls": false, + "insertNulls": 3600000, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -5368,6 +6722,7 @@ "mode": "off" } }, + "fieldMinMax": false, "mappings": [], "thresholds": { "mode": "absolute", @@ -5380,30 +6735,45 @@ "value": 80 } ] - }, - "unit": "µs" + } }, - "overrides": [] + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "fetch_batches_duration_us" + }, + "properties": [ + { + "id": "unit", + "value": "µs" + } + ] + } + ] }, "gridPos": { "h": 10, "w": 12, - "x": 0, - "y": 183 + "x": 12, + "y": 236 }, - "id": 45, + "id": 77, "options": { "legend": { "calcs": [ "min", "mean", - "p50", "max", - "lastNotNull" + "lastNotNull", + "p50", + "p99" ], "displayMode": "table", "placement": "bottom", - "showLegend": true + "showLegend": true, + "sortBy": "Name", + "sortDesc": false }, "tooltip": { "hideZeros": false, @@ -5418,12 +6788,39 @@ "type": "influxdb", "uid": "${DS}" }, - "hide": false, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"pruner\" and r._field == \"time_us\"\n )\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data\n", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>r.host == \"${host}\" and r._measurement == \"sov_rollup_dropped_metrics\" \n )\n |> drop(columns: [\"host\", \"environment\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 1.0, column: column))\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", "refId": "A" } ], - "title": "Pruning time", + "title": "Rollup Dropped metrics over time", + "transformations": [ + { + "id": "calculateField", + "options": { + "alias": "fetch_batches_duration_ms", + "binary": { + "left": { + "matcher": { + "id": "byName", + "options": "fetch_batches_duration_us" + } + }, + "operator": "/", + "right": { + "fixed": "1000" + } + }, + "mode": "binary", + "reduce": { + "include": [ + "fetch_batches_duration_us" + ], + "reducer": "allValues" + }, + "replaceFields": false + } + } + ], "type": "timeseries" }, { @@ -5431,7 +6828,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "", + "description": "0=sequencer 1=node", "fieldConfig": { "defaults": { "color": { @@ -5453,7 +6850,7 @@ "tooltip": false, "viz": false }, - "insertNulls": false, + "insertNulls": 3600000, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -5470,6 +6867,7 @@ "mode": "off" } }, + "fieldMinMax": false, "mappings": [], "thresholds": { "mode": "absolute", @@ -5485,27 +6883,43 @@ }, "unit": "sishort" }, - "overrides": [] + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "fetch_batches_duration_us" + }, + "properties": [ + { + "id": "unit", + "value": "µs" + } + ] + } + ] }, "gridPos": { "h": 10, "w": 12, "x": 12, - "y": 183 + "y": 246 }, - "id": 46, + "id": 79, "options": { "legend": { "calcs": [ "min", "mean", - "p50", "max", - "lastNotNull" + "lastNotNull", + "p50", + "p99" ], "displayMode": "table", "placement": "bottom", - "showLegend": true + "showLegend": true, + "sortBy": "Name", + "sortDesc": true }, "tooltip": { "hideZeros": false, @@ -5520,20 +6934,59 @@ "type": "influxdb", "uid": "${DS}" }, - "hide": false, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"pruner\" and r._field != \"time_us\"\n )\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data\n", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>r.host == \"${host}\" and r._measurement == \"sov_nomt_prover_compute_state\" \n )\n |> drop(columns: [\"host\", \"environment\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 1.0, column: column))\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", "refId": "A" } ], - "title": "Pruning counts", + "title": "Compute State Update: reads/writes", + "transformations": [ + { + "id": "calculateField", + "options": { + "alias": "fetch_batches_duration_ms", + "binary": { + "left": { + "matcher": { + "id": "byName", + "options": "fetch_batches_duration_us" + } + }, + "operator": "/", + "right": { + "fixed": "1000" + } + }, + "mode": "binary", + "reduce": { + "include": [ + "fetch_batches_duration_us" + ], + "reducer": "allValues" + }, + "replaceFields": false + } + } + ], "type": "timeseries" }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 256 + }, + "id": 59, + "panels": [], + "title": "Under Construction", + "type": "row" + }, { "datasource": { "type": "influxdb", "uid": "${DS}" }, - "description": "", "fieldConfig": { "defaults": { "color": { @@ -5543,8 +6996,9 @@ "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", - "axisLabel": "", + "axisLabel": "Shows the queue depth for the background task, and the amount of time spent blocking. Note that time spent blocking is aggregated per interval - so if the aggregation interval is 10s, this metric shows the total time spent blocking per 10s interval", "axisPlacement": "auto", + "axisSoftMax": -3, "barAlignment": 0, "barWidthFactor": 0.6, "drawStyle": "line", @@ -5569,51 +7023,74 @@ "mode": "none" }, "thresholdsStyle": { - "mode": "off" + "mode": "dashed" } }, + "fieldMinMax": false, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green" - }, - { - "color": "red", - "value": 80 } ] }, - "unit": "µs" + "unit": "none" }, - "overrides": [] + "overrides": [ + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "close_batch_duration_us size_limit_reached" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] }, "gridPos": { "h": 10, "w": 12, - "x": 12, - "y": 193 + "x": 0, + "y": 257 }, - "id": 57, + "id": 53, "options": { "legend": { "calcs": [ "min", "mean", - "p50", "max", - "lastNotNull" + "lastNotNull", + "p50", + "p99" ], "displayMode": "table", "placement": "bottom", "showLegend": true, - "sortBy": "Mean", + "sortBy": "99th %", "sortDesc": true }, "tooltip": { "hideZeros": false, - "mode": "multi", + "mode": "single", "sort": "none" } }, @@ -5624,11 +7101,11 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r[\"host\"] == \"${host}\" and\n r._measurement == \"sov_rollup_value_setter\" and\n r._field == \"duration_us\"\n )\n |> drop(columns: [\"host\", \"environment\"])\n\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 1.0, column: column))\nelse\n data\n", + "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" \n and r._measurement == \"sov_rollup_preferred_sequencer_batch\" \n )\n |> aggregateWindow(every: ${agg_interval}, fn: sum, createEmpty: false)\n |> group(columns: [\"_field\", \"close_reason\"])\n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", "refId": "A" } ], - "title": "Example: SyntheticLoad", + "title": "(Under Construction) Batch Metrics", "type": "timeseries" }, { @@ -5636,7 +7113,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "Tx stats\n", + "description": "Time it takes to process single transaction.\nDoes not include signature check", "fieldConfig": { "defaults": { "color": { @@ -5690,15 +7167,32 @@ }, "unit": "µs" }, - "overrides": [] + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*_bytes/" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "unit", + "value": "decbytes" + } + ] + } + ] }, "gridPos": { "h": 10, "w": 12, "x": 12, - "y": 203 + "y": 257 }, - "id": 61, + "id": 58, "options": { "legend": { "calcs": [ @@ -5716,7 +7210,7 @@ }, "tooltip": { "hideZeros": false, - "mode": "single", + "mode": "multi", "sort": "none" } }, @@ -5727,11 +7221,11 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "agg_func = \"${agg_func}\"\n\ndata = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_rollup_auth_and_process_metrics\" and r[\"context\"] == \"Sequencer\" and\n (r._field == \"total_time_us\" or r._field == \"auth_time_us\" or r._field == \"check_uniqueness_time_us\" or r._field == \"resolve_context_time_us\" or r._field == \"mark_tx_attempted_time_us\" or r._field == \"attempt_tx_time_us\" or r._field == \"reserve_gas_time_us\" or r._field == \"refund_remaining_gas_time_us\" or r._field == \"reward_prover_time_us\")\n )\n |> group(columns: [\"_field\", \"context\"])\n \n\nif agg_func == \"raw\" then\n data\nelse if agg_func == \"median\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: median)\nelse if agg_func == \"mean\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\nelse if agg_func == \"p90\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\nelse if agg_func == \"p99\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", + "query": "agg_func = \"${agg_func}\"\n\n base_data = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"sov_rollup_auth_and_process_metrics\"\n and r._field != \"attempt_tx_slowest_read_name\"\n )\n\n // Count of metrics\n count_data = base_data\n |> filter(fn: (r) => r._field == \"total_time_us\")\n |> aggregateWindow(every: ${agg_interval}, fn: count)\n |> set(key: \"_field\", value: \"metric_count\")\n\n // Sum of total_time_us\n sum_data = base_data\n |> filter(fn: (r) => r._field == \"total_time_us\")\n |> aggregateWindow(every: ${agg_interval}, fn: sum)\n |> set(key: \"_field\", value: \"total_time_us_sum\")\n\n // Original aggregated data\n agg_data = base_data |> group(columns: [\"_field\", \"context\"])\n\n final_agg_data = if agg_func == \"raw\" then\n agg_data\n else if agg_func == \"median\" then\n agg_data |> aggregateWindow(every: ${agg_interval}, fn: median)\n else if agg_func == \"mean\" then\n agg_data |> aggregateWindow(every: ${agg_interval}, fn: mean)\n else if agg_func == \"p90\" then\n agg_data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.90, column: column))\n else if agg_func == \"p99\" then\n agg_data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 0.99, column: column))\n else if agg_func == \"max\" then\n agg_data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 1.0, column: column))\n else\n agg_data |> aggregateWindow(every: ${agg_interval}, fn: median)\n\n // Union all streams\n union(tables: [final_agg_data, count_data, sum_data])", "refId": "A" } ], - "title": "Tx Stats", + "title": "(Under Construction) Detailed Tx Timing", "type": "timeseries" } ], @@ -5786,12 +7280,12 @@ "type": "influxdb", "uid": "${DS}" }, - "definition": "import \"influxdata/influxdb/v1\"\nv1.tagValues(\n bucket: v.bucket,\n tag: \"host\",\n predicate: (r) => true,\n start: -1d\n)", + "definition": "import \"influxdata/influxdb/v1\"\nv1.tagValues(\n bucket: v.bucket,\n tag: \"host\",\n predicate: (r) => r.deployment_name =~ /^${deployment_name:regex}$/,\n start: -1d\n)", "description": "", "name": "host", "options": [], "query": { - "query": "import \"influxdata/influxdb/v1\"\nv1.tagValues(\n bucket: v.bucket,\n tag: \"host\",\n predicate: (r) => true,\n start: -1d\n)" + "query": "import \"influxdata/influxdb/v1\"\nv1.tagValues(\n bucket: v.bucket,\n tag: \"host\",\n predicate: (r) => r.deployment_name =~ /^${deployment_name:regex}$/,\n start: -1d\n)" }, "refresh": 1, "regex": "", @@ -5849,7 +7343,7 @@ "text": "$__auto", "value": "$__auto" }, - "label": "Aggregation Interval", + "label": "Agg. interval", "name": "agg_interval", "options": [ { @@ -5921,11 +7415,33 @@ "query": "5s,10s,30s,1m,10m,30m,1h,6h,12h,1d,7d,14d,30d", "refresh": 2, "type": "interval" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "definition": "import \"influxdata/influxdb/v1\"\nv1.tagValues(\n bucket: v.bucket,\n tag: \"deployment_name\",\n predicate: (r) => true,\n start: -1d\n)", + "description": "", + "includeAll": true, + "label": "Deployment", + "name": "deployment_name", + "options": [], + "query": { + "maxDataPoints": 100, + "query": "import \"influxdata/influxdb/v1\"\nv1.tagValues(\n bucket: v.bucket,\n tag: \"deployment_name\",\n predicate: (r) => true,\n start: -1d\n)", + "refId": "InfluxVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" } ] }, "time": { - "from": "now-1h", + "from": "now-30m", "to": "now" }, "timepicker": {},