diff --git a/grafana/dashboards/celestia-adapter-1762165814457.json b/grafana/dashboards/celestia-adapter-1762165814457.json new file mode 100644 index 0000000..696bae3 --- /dev/null +++ b/grafana/dashboards/celestia-adapter-1762165814457.json @@ -0,0 +1,1383 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 15, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 1, + "panels": [], + "title": "Adapter Metrics", + "type": "row" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red" + }, + { + "color": "orange", + "value": 80 + }, + { + "color": "yellow", + "value": 90 + }, + { + "color": "green", + "value": 99 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 0, + "y": 1 + }, + "id": 23, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "last" + ], + "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) => r[\"host\"] == \"${host}\")\n |> filter(fn: (r) =>\n (r._measurement == \"sov_celestia_adapter_header_get_by_height\" \n or r._measurement == \"sov_celestia_adapter_header_network_head\"\n or r._measurement == \"sov_celestia_adapter_share_get_namespace_data\"\n or r._measurement == \"sov_celestia_adapter_state_submit_pay_for_blob\"\n or r._measurement == \"sov_celestia_adapter_blob_get_all\")\n )\n |> map(fn: (r) => ({\n r with\n success: if r[\"is_success\"] == \"1\" then 1.0 else 0.0,\n total: 1.0\n }))\n |> group()\n |> reduce(\n identity: {success: 0.0, total: 0.0},\n fn: (r, accumulator) => ({\n success: accumulator.success + r.success,\n total: accumulator.total + r.total\n })\n )\n |> map(fn: (r) => ({\n _value: (r.success / r.total) * 100.0\n }))", + "refId": "A" + } + ], + "title": "API Calls Success Rate", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "For all API calls", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red" + }, + { + "color": "orange", + "value": 100 + }, + { + "color": "yellow", + "value": 300 + }, + { + "color": "green", + "value": 1000 + } + ] + }, + "unit": "sishort" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 3, + "y": 1 + }, + "id": 24, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "last" + ], + "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) => r[\"host\"] == \"${host}\")\n |> filter(fn: (r) =>\n (r._measurement == \"sov_celestia_adapter_header_get_by_height\" \n or r._measurement == \"sov_celestia_adapter_header_network_head\"\n or r._measurement == \"sov_celestia_adapter_share_get_namespace_data\"\n or r._measurement == \"sov_celestia_adapter_state_submit_pay_for_blob\"\n or r._measurement == \"sov_celestia_adapter_blob_get_all\")\n and r._field == \"response_time_us\"\n )\n |> group()\n |> count()\n |> map(fn: (r) => ({\n r with _value: float(v: r._value) / float(v: uint(v: v.timeRangeStop) - uint(v: v.timeRangeStart)) * 60000000000.0\n }))", + "refId": "A" + } + ], + "title": "Avg. API Calls Per Minute", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red" + }, + { + "color": "orange", + "value": 100 + }, + { + "color": "yellow", + "value": 300 + }, + { + "color": "green", + "value": 1000 + } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 6, + "y": 1 + }, + "id": 26, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "last" + ], + "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) => r[\"host\"] == \"${host}\")\n |> filter(fn: (r) => r._measurement == \"sov_celestia_adapter_submit_blob\" and r._field == \"bytes\")\n |> sum()\n |> map(fn: (r) => ({\n r with _value: r._value / float(v: int(v: v.timeRangeStop) - int(v: v.timeRangeStart)) * 1000000000.0\n }))", + "refId": "A" + } + ], + "title": "Avg. Blob Throughput", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red" + }, + { + "color": "orange", + "value": 100 + }, + { + "color": "yellow", + "value": 300 + }, + { + "color": "green", + "value": 1000 + } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 9, + "y": 1 + }, + "id": 7, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "last" + ], + "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) => r[\"host\"] == \"${host}\")\n |> filter(fn: (r) => r._measurement == \"sov_celestia_adapter_submit_blob\" and r._field == \"bytes\")\n |> sum()", + "refId": "A" + } + ], + "title": "Blob data submitted", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "Successful batch blob submission", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red" + }, + { + "color": "orange", + "value": 100 + }, + { + "color": "yellow", + "value": 300 + }, + { + "color": "green", + "value": 1000 + } + ] + }, + "unit": "sishort" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 12, + "y": 1 + }, + "id": 8, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "last" + ], + "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) => r[\"host\"] == \"${host}\")\n |> filter(fn: (r) =>\n r._measurement == \"sov_celestia_adapter_submit_blob\"\n and r[\"namespace\"] == \"batch\" and r._field == \"bytes\"\n )\n |> count()", + "refId": "A" + } + ], + "title": "Batch Blobs Submitted", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red" + }, + { + "color": "orange", + "value": 80 + }, + { + "color": "yellow", + "value": 90 + }, + { + "color": "green", + "value": 99 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 15, + "y": 1 + }, + "id": 19, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "last" + ], + "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) => r[\"host\"] == \"${host}\")\n |> filter(fn: (r) =>\n r._measurement == \"sov_celestia_adapter_state_submit_pay_for_blob\"\n and r[\"namespace\"] == \"batch\"\n )\n |> map(fn: (r) => ({\n r with\n success: if r[\"is_success\"] == \"1\" then 1.0 else 0.0,\n total: 1.0\n }))\n |> group()\n |> reduce(\n identity: {success: 0.0, total: 0.0},\n fn: (r, accumulator) => ({\n success: accumulator.success + r.success,\n total: accumulator.total + r.total\n })\n )\n |> map(fn: (r) => ({\n _value: (r.success / r.total) * 100.0\n }))", + "refId": "A" + } + ], + "title": "Batch Submission Success Rate", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red" + }, + { + "color": "orange", + "value": 100 + }, + { + "color": "yellow", + "value": 300 + }, + { + "color": "green", + "value": 1000 + } + ] + }, + "unit": "sishort" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 18, + "y": 1 + }, + "id": 9, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "last" + ], + "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) => r[\"host\"] == \"${host}\")\n |> filter(fn: (r) =>\n r._measurement == \"sov_celestia_adapter_submit_blob\"\n and r[\"namespace\"] == \"proof\" and r._field == \"bytes\"\n )\n |> count()", + "refId": "A" + } + ], + "title": "Proof Blobs Submitted", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red" + }, + { + "color": "orange", + "value": 80 + }, + { + "color": "yellow", + "value": 90 + }, + { + "color": "green", + "value": 99 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 21, + "y": 1 + }, + "id": 22, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "last" + ], + "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) => r[\"host\"] == \"${host}\")\n |> filter(fn: (r) =>\n r._measurement == \"sov_celestia_adapter_state_submit_pay_for_blob\"\n and r[\"namespace\"] == \"proof\"\n )\n |> map(fn: (r) => ({\n r with\n success: if r[\"is_success\"] == \"1\" then 1.0 else 0.0,\n total: 1.0\n }))\n |> group()\n |> reduce(\n identity: {success: 0.0, total: 0.0},\n fn: (r, accumulator) => ({\n success: accumulator.success + r.success,\n total: accumulator.total + r.total\n })\n )\n |> map(fn: (r) => ({\n _value: (r.success / r.total) * 100.0\n }))", + "refId": "A" + } + ], + "title": "Proof Submission Success Rate", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "Response time of individual API call", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMax": -3, + "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": "dashed" + } + }, + "fieldMinMax": false, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "µs" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 0, + "y": 6 + }, + "id": 20, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "max", + "lastNotNull", + "p50", + "p99" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "50th %", + "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}\" \n and (\n r._measurement == \"sov_celestia_adapter_header_get_by_height\" \n or r._measurement == \"sov_celestia_adapter_header_network_head\"\n or r._measurement == \"sov_celestia_adapter_share_get_namespace_data\"\n or r._measurement == \"sov_celestia_adapter_state_submit_pay_for_blob\"\n or r._measurement == \"sov_celestia_adapter_blob_get_all\"\n )\n )\n |> drop(columns: [\"host\"])\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 |> aggregateWindow(every: ${agg_interval}, fn: median)", + "refId": "A" + } + ], + "title": "API Calls", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Submit blob time", + "axisPlacement": "auto", + "axisSoftMax": -3, + "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": "dashed" + } + }, + "fieldMinMax": false, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "µs" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "bytes" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "unit", + "value": "decbytes" + }, + { + "id": "custom.axisLabel", + "value": "Blob size" + } + ] + } + ] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 12, + "y": 6 + }, + "id": 4, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "max", + "lastNotNull", + "p50", + "p99" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "50th %", + "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}\" \n and r._measurement == \"sov_celestia_adapter_submit_blob\"\n and r._field != \"namespace\"\n 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 if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: (column, tables=<-) => tables |> quantile(q: 1.0, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", + "refId": "A" + } + ], + "title": "Submit Blob Times", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMax": -3, + "barAlignment": 0, + "barWidthFactor": 0.3, + "drawStyle": "bars", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": 600000, + "lineInterpolation": "linear", + "lineStyle": { + "dash": [ + 10, + 10 + ], + "fill": "dash" + }, + "lineWidth": 10, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": 300000, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "dashed" + } + }, + "fieldMinMax": false, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "rotrpm" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 0, + "y": 17 + }, + "id": 25, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "max", + "lastNotNull", + "p50", + "p99" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "50th %", + "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}\" \n and (\n r._measurement == \"sov_celestia_adapter_header_get_by_height\" \n or r._measurement == \"sov_celestia_adapter_header_network_head\"\n or r._measurement == \"sov_celestia_adapter_share_get_namespace_data\"\n or r._measurement == \"sov_celestia_adapter_state_submit_pay_for_blob\"\n or r._measurement == \"sov_celestia_adapter_blob_get_all\"\n )\n )\n |> drop(columns: [\"host\", \"namespace\"])\n |> group(columns: [\"_measurement\", \"is_success\"], 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) * 2.0\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": "API Calls per minute", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMax": -3, + "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": "dashed" + } + }, + "fieldMinMax": false, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "µs" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 12, + "y": 17 + }, + "id": 3, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "max", + "lastNotNull", + "p50", + "p99" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "50th %", + "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}\" \n and r._measurement == \"sov_celestia_adapter_get_block\" \n and r._field != \"height\" \n and r._field != \"square_width\" \n and r._field != \"batch_rows\" \n and r._field != \"batch_shares\"\n and r._field != \"proof_rows\" \n and r._field != \"proof_shares\"\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: (column, tables=<-) => tables |> quantile(q: 1.0, column: column))\nelse\n data |> aggregateWindow(every: ${agg_interval}, fn: median)", + "refId": "A" + } + ], + "title": "Fetch Block Times", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Shares", + "axisPlacement": "auto", + "axisSoftMax": -3, + "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": "dashed" + } + }, + "fieldMinMax": false, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*_rows/" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "custom.axisLabel", + "value": "Rows" + } + ] + } + ] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 0, + "y": 28 + }, + "id": 5, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "max", + "lastNotNull", + "p50", + "p99" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "50th %", + "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}\" \n and r._measurement == \"sov_celestia_adapter_get_block\" \n and r._field != \"height\" \n and r._field != \"square_width\" \n and r._field != \"total_time_us\" \n and r._field != \"fetch_header_us\"\n and r._field != \"futures_us\" \n and r._field != \"build_data_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 == \"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 |> aggregateWindow(every: ${agg_interval}, fn: median)", + "refId": "A" + } + ], + "title": "Fetched Block Squares", + "type": "timeseries" + } + ], + "preload": false, + "schemaVersion": 41, + "tags": [], + "templating": { + "list": [ + { + "current": { + "text": "influxdb", + "value": "febnee4svq96of" + }, + "description": "", + "name": "DS", + "options": [], + "query": "influxdb", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "current": { + "text": "sov-loki", + "value": "del27k3a8i328f" + }, + "name": "LOKI_DS", + "options": [], + "query": "loki", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "current": { + "text": "sov-dev", + "value": "sov-dev" + }, + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "definition": "buckets()", + "description": "", + "name": "bucket", + "options": [], + "query": { + "query": "buckets()" + }, + "refresh": 1, + "regex": "", + "sort": 6, + "type": "query" + }, + { + "current": { + "text": "dev-docker-nikolai", + "value": "dev-docker-nikolai" + }, + "datasource": { + "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)", + "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)" + }, + "refresh": 1, + "regex": "", + "type": "query" + }, + { + "allowCustomValue": false, + "current": { + "text": "p99", + "value": "p99" + }, + "description": "Function used to aggregate the data. Raw means no aggregation", + "label": "Aggregation function", + "name": "agg_func", + "options": [ + { + "selected": false, + "text": "raw", + "value": "raw" + }, + { + "selected": false, + "text": "mean", + "value": "mean" + }, + { + "selected": false, + "text": "median", + "value": "median" + }, + { + "selected": false, + "text": "p90", + "value": "p90" + }, + { + "selected": true, + "text": "p99", + "value": "p99" + }, + { + "selected": false, + "text": "max", + "value": "max" + } + ], + "query": "raw,mean,median,p90,p99,max", + "type": "custom" + }, + { + "auto": true, + "auto_count": 100, + "auto_min": "5s", + "current": { + "text": "$__auto", + "value": "$__auto" + }, + "label": "Aggregation Interval", + "name": "agg_interval", + "options": [ + { + "selected": false, + "text": "10s", + "value": "10s" + }, + { + "selected": false, + "text": "30s", + "value": "30s" + }, + { + "selected": false, + "text": "1m", + "value": "1m" + }, + { + "selected": false, + "text": "10m", + "value": "10m" + }, + { + "selected": false, + "text": "30m", + "value": "30m" + }, + { + "selected": false, + "text": "1h", + "value": "1h" + }, + { + "selected": false, + "text": "6h", + "value": "6h" + }, + { + "selected": false, + "text": "12h", + "value": "12h" + }, + { + "selected": false, + "text": "1d", + "value": "1d" + }, + { + "selected": false, + "text": "7d", + "value": "7d" + }, + { + "selected": false, + "text": "14d", + "value": "14d" + }, + { + "selected": false, + "text": "30d", + "value": "30d" + } + ], + "query": "10s,30s,1m,10m,30m,1h,6h,12h,1d,7d,14d,30d", + "refresh": 2, + "type": "interval" + } + ] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Sovereign Celestia Adapter", + "uid": "ff2q1jcq486pse", + "version": 8 +} \ No newline at end of file diff --git a/grafana/dashboards/rollup-dashboard-node.json b/grafana/dashboards/rollup-dashboard-node.json index 94b1f5f..6bd4901 100644 --- a/grafana/dashboards/rollup-dashboard-node.json +++ b/grafana/dashboards/rollup-dashboard-node.json @@ -361,7 +361,7 @@ "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_runner_counts\" and r._field == \"transactions_c\"\n )\n |> filter(fn: (r) => r[\"host\"] == \"${host}\")\n |> sum()\n |> map(fn: (r) => ({\n r with _value: r._value / (float(v: (uint(v: v.timeRangeStop) - uint(v: v.timeRangeStart))) / float(v: uint(v: 1s)))\n }))", + "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"host\"] == \"${host}\")\n |> filter(fn: (r) =>\n r._measurement == \"sov_rollup_runner_counts\" and r._field == \"transactions_c\"\n )\n\n |> sum()\n |> map(fn: (r) => ({\n r with _value: r._value / (float(v: (uint(v: v.timeRangeStop) - uint(v: v.timeRangeStart))) / float(v: uint(v: 1s)))\n }))", "refId": "A" } ], @@ -373,34 +373,26 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "Only counts successful txs", "fieldConfig": { "defaults": { "color": { - "mode": "thresholds" + "fixedColor": "text", + "mode": "fixed" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { - "color": "red" - }, - { - "color": "green", - "value": 10 - }, - { - "color": "yellow", - "value": 30 + "color": "green" }, { - "color": "orange", - "value": 50 + "color": "red", + "value": 80 } ] }, - "unit": "µs" + "unit": "ms" }, "overrides": [] }, @@ -410,7 +402,7 @@ "x": 15, "y": 1 }, - "id": 10, + "id": 12, "options": { "colorMode": "value", "graphMode": "area", @@ -435,11 +427,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\"\n and r.host == \"${host}\"\n and r._field == \"processing_time_us\"\n and r.path == \"/sequencer/txs\"\n and r.resp_status == \"200\"\n )\n |> quantile(q: 0.99, method: \"estimate_tdigest\")", + "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r._measurement == \"sov_rollup_runner_da\"\n and r.host == \"${host}\"\n and r._field == \"get_block_time_ms\"\n )\n |> quantile(q: 0.99, method: \"estimate_tdigest\")", "refId": "A" } ], - "title": "Accept Tx P99", + "title": "Fetch DA Block P99", "type": "stat" }, { @@ -447,7 +439,6 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "", "fieldConfig": { "defaults": { "color": { @@ -460,17 +451,9 @@ { "color": "red" }, - { - "color": "orange", - "value": 100 - }, - { - "color": "yellow", - "value": 300 - }, { "color": "green", - "value": 1000 + "value": 80 } ] }, @@ -484,7 +467,7 @@ "x": 18, "y": 1 }, - "id": 16, + "id": 11, "options": { "colorMode": "value", "graphMode": "area", @@ -493,7 +476,7 @@ "percentChangeColorMode": "standard", "reduceOptions": { "calcs": [ - "last" + "lastNotNull" ], "fields": "", "values": false @@ -509,11 +492,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_runner_counts\" and r._field == \"transactions_c\"\n )\n |> filter(fn: (r) => r[\"host\"] == \"${host}\")\n |> sum()", + "query": "compute = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r._measurement == \"sov_rollup_slot_execution_time_us\" and\n r.host == \"${host}\" and\n r._field == \"gas_used_compute\"\n )\n |> sum()\n\nmem = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r._measurement == \"sov_rollup_slot_execution_time_us\" and\n r.host == \"${host}\" and\n r._field == \"gas_used_mem\"\n )\n |> sum()\n\nunion(tables: [compute, mem])\n |> reduce(\n identity: {total: 0.0},\n fn: (r, accumulator) => ({total: accumulator.total + r._value})\n )\n |> map(fn: (r) => ({_value: r.total}))", "refId": "A" } ], - "title": "Transactions processed", + "title": "Gas Used", "type": "stat" }, { @@ -521,7 +504,6 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "", "fieldConfig": { "defaults": { "color": { @@ -532,23 +514,14 @@ "mode": "absolute", "steps": [ { - "color": "red" - }, - { - "color": "orange", - "value": 100 - }, - { - "color": "yellow", - "value": 300 + "color": "green" }, { - "color": "green", - "value": 1000 + "color": "red", + "value": 80 } ] - }, - "unit": "bytes" + } }, "overrides": [] }, @@ -558,23 +531,21 @@ "x": 21, "y": 1 }, - "id": 17, + "id": 3, "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", + "minVizHeight": 75, + "minVizWidth": 75, "orientation": "auto", - "percentChangeColorMode": "standard", "reduceOptions": { "calcs": [ - "last" + "lastNotNull" ], "fields": "", "values": false }, - "showPercentChange": false, - "textMode": "auto", - "wideLayout": true + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" }, "pluginVersion": "11.6.0+security-01", "targets": [ @@ -583,12 +554,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_runner_counts\" and r._field == \"batch_bytes\"\n )\n |> filter(fn: (r) => r[\"host\"] == \"${host}\")\n |> sum()", "refId": "A" } ], - "title": "Batch data processed", - "type": "stat" + "title": "Free Space (TBD)", + "type": "gauge" }, { "datasource": { @@ -673,6 +643,18 @@ "steps": [ { "color": "green" + }, + { + "color": "orange", + "value": 0 + }, + { + "color": "#EAB839", + "value": 100 + }, + { + "color": "red", + "value": 1000 } ] } @@ -1038,26 +1020,34 @@ "type": "influxdb", "uid": "${DS}" }, + "description": "Only counts successful txs", "fieldConfig": { "defaults": { "color": { - "fixedColor": "text", - "mode": "fixed" + "mode": "thresholds" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { - "color": "green" + "color": "red" }, { - "color": "red", - "value": 80 + "color": "green", + "value": 10 + }, + { + "color": "yellow", + "value": 30 + }, + { + "color": "orange", + "value": 50 } ] }, - "unit": "ms" + "unit": "µs" }, "overrides": [] }, @@ -1067,7 +1057,7 @@ "x": 15, "y": 5 }, - "id": 12, + "id": 10, "options": { "colorMode": "value", "graphMode": "area", @@ -1092,11 +1082,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_runner_da\"\n and r.host == \"${host}\"\n and r._field == \"get_block_time_ms\"\n )\n |> quantile(q: 0.99, method: \"estimate_tdigest\")", + "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r._measurement == \"sov_rollup_http_handlers\"\n and r.host == \"${host}\"\n and r._field == \"processing_time_us\"\n and r.path == \"/sequencer/txs\"\n and r.resp_status == \"200\"\n )\n |> quantile(q: 0.99, method: \"estimate_tdigest\")", "refId": "A" } ], - "title": "Fetch DA Block P99", + "title": "Accept Tx P99", "type": "stat" }, { @@ -1104,6 +1094,7 @@ "type": "influxdb", "uid": "${DS}" }, + "description": "", "fieldConfig": { "defaults": { "color": { @@ -1116,9 +1107,17 @@ { "color": "red" }, + { + "color": "orange", + "value": 100 + }, + { + "color": "yellow", + "value": 300 + }, { "color": "green", - "value": 80 + "value": 1000 } ] }, @@ -1132,7 +1131,7 @@ "x": 18, "y": 5 }, - "id": 11, + "id": 16, "options": { "colorMode": "value", "graphMode": "area", @@ -1141,7 +1140,7 @@ "percentChangeColorMode": "standard", "reduceOptions": { "calcs": [ - "lastNotNull" + "last" ], "fields": "", "values": false @@ -1157,11 +1156,11 @@ "type": "influxdb", "uid": "${DS}" }, - "query": "compute = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r._measurement == \"sov_rollup_slot_execution_time_us\" and\n r.host == \"${host}\" and\n r._field == \"gas_used_compute\"\n )\n |> sum()\n\nmem = from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r._measurement == \"sov_rollup_slot_execution_time_us\" and\n r.host == \"${host}\" and\n r._field == \"gas_used_mem\"\n )\n |> sum()\n\nunion(tables: [compute, mem])\n |> reduce(\n identity: {total: 0.0},\n fn: (r, accumulator) => ({total: accumulator.total + r._value})\n )\n |> map(fn: (r) => ({_value: r.total}))", + "query": "from(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) => r[\"host\"] == \"${host}\")\n |> filter(fn: (r) =>\n r._measurement == \"sov_rollup_runner_counts\" and r._field == \"transactions_c\"\n )\n |> sum()", "refId": "A" } ], - "title": "Gas Used", + "title": "Transactions processed", "type": "stat" }, { @@ -1169,6 +1168,7 @@ "type": "influxdb", "uid": "${DS}" }, + "description": "", "fieldConfig": { "defaults": { "color": { @@ -1179,14 +1179,23 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "red" }, { - "color": "red", - "value": 80 + "color": "orange", + "value": 100 + }, + { + "color": "yellow", + "value": 300 + }, + { + "color": "green", + "value": 1000 } ] - } + }, + "unit": "bytes" }, "overrides": [] }, @@ -1196,21 +1205,23 @@ "x": 21, "y": 5 }, - "id": 3, + "id": 17, "options": { - "minVizHeight": 75, - "minVizWidth": 75, + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", "orientation": "auto", + "percentChangeColorMode": "standard", "reduceOptions": { "calcs": [ - "lastNotNull" + "last" ], "fields": "", "values": false }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "sizing": "auto" + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true }, "pluginVersion": "11.6.0+security-01", "targets": [ @@ -1219,11 +1230,12 @@ "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_runner_counts\" and r._field == \"batch_bytes\"\n )\n |> filter(fn: (r) => r[\"host\"] == \"${host}\")\n |> sum()", "refId": "A" } ], - "title": "Free Space (TBD)", - "type": "gauge" + "title": "Batch data processed", + "type": "stat" }, { "datasource": { @@ -1241,14 +1253,14 @@ "mode": "absolute", "steps": [ { - "color": "red" + "color": "green" }, { - "color": "orange", + "color": "yellow", "value": 1 }, { - "color": "yellow", + "color": "orange", "value": 1000 }, { @@ -1298,6 +1310,75 @@ "title": "Dropped Metrics", "type": "stat" }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "orange", + "value": 5 + }, + { + "color": "red", + "value": 20 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 3, + "y": 9 + }, + "id": 65, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "last" + ], + "fields": "/^Value$/", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.6.0+security-01", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "query": "import \"strings\"\n\nfrom(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop:v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"http_response\" and\n r._field == \"http_response_code\" and\n exists r.server and\n strings.containsStr(v: r.server, substr: \"/sequencer/ready\")\n )\n |> group(columns: []) // flatten all tags into one table\n |> sort(columns: [\"_time\"], desc: true)\n |> map(fn: (r) => ({\n _time: r._time,\n _value: if r.result == \"success\" and r.status_code == \"200\"\n then \"Ready\" else \"Not Ready\"\n }))\n |> first()\n |> keep(columns: [\"_time\",\"_value\"])", + "refId": "A" + } + ], + "title": "Sequencer Ready?", + "type": "stat" + }, { "collapsed": false, "gridPos": { @@ -1382,42 +1463,16 @@ "value": "µs" } ] - }, - { - "__systemRef": "hideSeriesFrom", - "matcher": { - "id": "byNames", - "options": { - "mode": "exclude", - "names": [ - "duration_ms", - "fetch_batches_duration_ms", - "lock_duration_ms" - ], - "prefix": "All except:", - "readOnly": true - } - }, - "properties": [ - { - "id": "custom.hideFrom", - "value": { - "legend": false, - "tooltip": false, - "viz": true - } - } - ] } ] }, "gridPos": { - "h": 9, + "h": 10, "w": 12, "x": 0, "y": 14 }, - "id": 24, + "id": 56, "options": { "legend": { "calcs": [ @@ -1431,8 +1486,8 @@ "displayMode": "table", "placement": "bottom", "showLegend": true, - "sortBy": "99th %", - "sortDesc": true + "sortBy": "Name", + "sortDesc": false }, "tooltip": { "hideZeros": false, @@ -1447,7 +1502,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}\" \n and r._measurement == \"sov_rollup_preferred_sequencer_update_state\" \n and (r._field == \"duration_ms\" or r._field == \"lock_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 == \"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_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" } ], @@ -1487,6 +1542,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": { @@ -1497,7 +1553,7 @@ "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", - "axisPlacement": "left", + "axisPlacement": "auto", "barAlignment": 0, "barWidthFactor": 0.6, "drawStyle": "line", @@ -1525,86 +1581,48 @@ "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" + "color": "red", + "value": 80 } ] }, - { - "matcher": { - "id": "byName", - "options": "transactions_count" - }, - "properties": [ - { - "id": "custom.axisPlacement", - "value": "right" - }, - { - "id": "unit", - "value": "short" - }, - { - "id": "custom.axisLabel", - "value": "# of transactions to replay" - } - ] - } - ] + "unit": "µs" + }, + "overrides": [] }, "gridPos": { - "h": 9, + "h": 10, "w": 12, "x": 12, "y": 14 }, - "id": 25, + "id": 21, "options": { "legend": { "calcs": [ "min", "mean", - "max", - "lastNotNull", "p50", - "p99" + "max", + "lastNotNull" ], "displayMode": "table", "placement": "bottom", - "showLegend": true + "showLegend": true, + "sortBy": "50th %", + "sortDesc": true }, "tooltip": { "hideZeros": false, - "mode": "multi", + "mode": "single", "sort": "none" } }, @@ -1615,11 +1633,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}\" 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": "State replay workload (batches & txs)", + "title": "Slot Processing Times", "type": "timeseries" }, { @@ -1681,7 +1699,7 @@ "h": 10, "w": 12, "x": 0, - "y": 23 + "y": 24 }, "id": 26, "options": { @@ -1716,7 +1734,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "Time each handler spent creating a response", + "description": "Difference between visible and true slot number on sequencer and node", "fieldConfig": { "defaults": { "color": { @@ -1756,19 +1774,15 @@ } }, "mappings": [], + "min": 0, "thresholds": { "mode": "absolute", "steps": [ { "color": "green" - }, - { - "color": "red", - "value": 80 } ] - }, - "unit": "µs" + } }, "overrides": [] }, @@ -1776,16 +1790,15 @@ "h": 10, "w": 12, "x": 12, - "y": 23 + "y": 24 }, - "id": 38, + "id": 63, "options": { "legend": { "calcs": [ "min", "mean", - "p50", - "max", + "median", "lastNotNull" ], "displayMode": "table", @@ -1805,11 +1818,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_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}\"\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": "HTTP Handler Times", + "title": "Visible slot numbers deltas", "type": "timeseries" }, { @@ -1877,7 +1890,7 @@ "h": 10, "w": 12, "x": 0, - "y": 33 + "y": 34 }, "id": 42, "options": { @@ -1920,7 +1933,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": { @@ -1931,7 +1943,7 @@ "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", - "axisPlacement": "auto", + "axisPlacement": "left", "barAlignment": 0, "barWidthFactor": 0.6, "drawStyle": "line", @@ -1959,48 +1971,86 @@ "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" }, { - "color": "red", - "value": 80 + "id": "unit", + "value": "short" + }, + { + "id": "custom.axisLabel", + "value": "# of batches to replay" } ] }, - "unit": "µs" - }, - "overrides": [] + { + "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": 10, "w": 12, "x": 12, - "y": 33 + "y": 34 }, - "id": 21, + "id": 25, "options": { "legend": { "calcs": [ "min", "mean", - "p50", "max", - "lastNotNull" + "lastNotNull", + "p50", + "p99" ], "displayMode": "table", "placement": "bottom", - "showLegend": true, - "sortBy": "50th %", - "sortDesc": true + "showLegend": true }, "tooltip": { "hideZeros": false, - "mode": "single", + "mode": "multi", "sort": "none" } }, @@ -2011,11 +2061,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": "\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": "Slot Processing Times", + "title": "State replay workload (batches & txs)", "type": "timeseries" }, { @@ -2105,10 +2155,10 @@ ] }, "gridPos": { - "h": 9, + "h": 10, "w": 12, "x": 0, - "y": 43 + "y": 44 }, "id": 48, "options": { @@ -2140,7 +2190,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}\" \n and r._measurement == \"sov_rollup_preferred_sequencer_fetch_batches_to_replay\" \n and (r._field == \"num_batches\" or r._field == \"num_transactions\" or r._field == \"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 == \"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_fetch_batches_to_replay\" \n and (r._field == \"num_batches\" or r._field == \"num_transactions\" or r._field == \"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: 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" } ], @@ -2152,6 +2202,7 @@ "type": "influxdb", "uid": "${DS}" }, + "description": "Time each handler spent creating a response", "fieldConfig": { "defaults": { "color": { @@ -2161,9 +2212,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", @@ -2188,58 +2238,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": 43 + "y": 44 }, - "id": 49, + "id": 38, "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, @@ -2254,11 +2291,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_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", "refId": "A" } ], - "title": "Side Effects Task Backpressure", + "title": "HTTP Handler Times", "type": "timeseries" }, { @@ -2275,7 +2312,7 @@ "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": "Displays the time taken to update the internal sequencer state and the size of the channel.", "axisPlacement": "auto", "axisSoftMax": -3, "barAlignment": 0, @@ -2315,17 +2352,34 @@ } ] }, - "unit": "none" + "unit": "µs" }, - "overrides": [] + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*channel_size.*/" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "unit", + "value": "sishort" + } + ] + } + ] }, "gridPos": { "h": 9, "w": 12, "x": 0, - "y": 52 + "y": 54 }, - "id": 50, + "id": 55, "options": { "legend": { "calcs": [ @@ -2334,12 +2388,13 @@ "max", "lastNotNull", "p50", - "p99" + "p99", + "count" ], "displayMode": "table", "placement": "bottom", "showLegend": true, - "sortBy": "99th %", + "sortBy": "Last *", "sortDesc": true }, "tooltip": { @@ -2355,11 +2410,11 @@ "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_lock\" \n and (r._field == \"duration_us\") \n )\n |> aggregateWindow(every: ${agg_interval}, fn: sum, createEmpty: false)\n |> group(columns: [\"_field\", \"lock_reason\"])\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_lock\"\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_lock\" \n and (r._field == \"duration_us\") \n )\n |> group(columns: [\"_field\", \"lock_reason\"])\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 if agg_func == \"max\" then\n data |> aggregateWindow(every: ${agg_interval}, fn: max)\n |> drop(columns: [\"_start\", \"_stop\"])\n |> group(columns: [\"_field\", \"lock_reason\"])\n |> pivot(rowKey: [\"_time\"], columnKey: [\"_field\"], valueColumn: \"_value\")\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_channel\" \n and (r._field == \"duration_us\") \n )\n |> aggregateWindow(every: ${agg_interval}, fn: sum, createEmpty: false)\n |> group(columns: [\"_field\", \"reason\"])\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_channel\"\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_channel\" \n and (r._field == \"duration_us\") \n )\n |> group(columns: [\"_field\", \"reason\"])\n\nraw_data_channel_size = 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_channel\" \n and (r._field == \"channel_size\") \n )\n |> group(columns: [\"_field\", \"reason\"])\n\ndata = union(tables: [raw_data, cumulative, total_across_all, raw_data_channel_size])\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 |> aggregateWindow(every: ${agg_interval}, fn: median)", "refId": "A" } ], - "title": "(Under Construction) Lock Duration", + "title": "(Under Construction) Channel Stats", "type": "timeseries" }, { @@ -2418,21 +2473,34 @@ }, "unit": "none" }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 12, - "y": 52 - }, - "id": 51, - "options": { - "legend": { - "calcs": [ - "min", - "mean", - "max", + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "blocked_for_us" + }, + "properties": [ + { + "id": "unit", + "value": "µs" + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 54 + }, + "id": 49, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "max", "lastNotNull", "p50", "p99" @@ -2456,11 +2524,11 @@ "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" }, { @@ -2468,6 +2536,7 @@ "type": "influxdb", "uid": "${DS}" }, + "description": "How often sequencer has been ready during ${agg_interval} intervals query", "fieldConfig": { "defaults": { "color": { @@ -2477,7 +2546,7 @@ "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, @@ -2517,42 +2586,118 @@ } ] }, - "unit": "none" + "unit": "percent" }, - "overrides": [ - { - "__systemRef": "hideSeriesFrom", - "matcher": { - "id": "byNames", - "options": { - "mode": "exclude", - "names": [ - "close_batch_duration_us size_limit_reached" - ], - "prefix": "All except:", - "readOnly": true - } + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 63 + }, + "id": 66, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "max", + "lastNotNull", + "p50", + "p99" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "99th %", + "sortDesc": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.0+security-01", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "query": "import \"strings\"\n\nfrom(bucket: \"${bucket}\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) =>\n r.host == \"${host}\" and\n r._measurement == \"http_response\" and\n r._field == \"http_response_code\" and\n exists r.server and\n strings.containsStr(v: r.server, substr: \"/sequencer/ready\")\n )\n |> group(columns: [\"host\",\"server\"]) // keep series per target\n |> map(fn: (r) => ({\n r with\n _value: if r.result == \"success\" and r.status_code == \"200\" then 1.0 else 0.0\n }))\n |> aggregateWindow(every: ${agg_interval}, fn: mean, createEmpty: false)\n |> map(fn: (r) => ({ r with _value: r._value * 100.0, _field: \"readiness_pct\" }))\n |> keep(columns: [\"_time\", \"_value\"])", + "refId": "A" + } + ], + "title": "Sequencer Readiness", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "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", + "axisPlacement": "auto", + "axisSoftMax": -3, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false }, - "properties": [ + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "dashed" + } + }, + "fieldMinMax": false, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ { - "id": "custom.hideFrom", - "value": { - "legend": false, - "tooltip": false, - "viz": true - } + "color": "green" } ] - } - ] + }, + "unit": "µs" + }, + "overrides": [] }, "gridPos": { - "h": 9, + "h": 10, "w": 12, - "x": 0, - "y": 61 + "x": 12, + "y": 63 }, - "id": 53, + "id": 51, "options": { "legend": { "calcs": [ @@ -2582,11 +2727,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\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": "(Under Construction) Batch Metrics", + "title": "(Under Construction) Side Effects Duration", "type": "timeseries" }, { @@ -2595,7 +2740,7 @@ "h": 1, "w": 24, "x": 0, - "y": 70 + "y": 73 }, "id": 19, "panels": [], @@ -2667,7 +2812,7 @@ "h": 10, "w": 8, "x": 0, - "y": 71 + "y": 74 }, "id": 22, "options": { @@ -2770,7 +2915,7 @@ "h": 10, "w": 8, "x": 8, - "y": 71 + "y": 74 }, "id": 37, "options": { @@ -2801,7 +2946,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_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 == \"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" } ], @@ -2873,7 +3018,7 @@ "h": 10, "w": 8, "x": 16, - "y": 71 + "y": 74 }, "id": 36, "options": { @@ -2904,7 +3049,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_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 == \"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_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" } ], @@ -2976,9 +3121,9 @@ }, "gridPos": { "h": 10, - "w": 12, + "w": 8, "x": 0, - "y": 81 + "y": 84 }, "id": 23, "options": { @@ -3049,7 +3194,7 @@ "type": "linear" }, "showPoints": "auto", - "spanNulls": false, + "spanNulls": 300000, "stacking": { "group": "A", "mode": "none" @@ -3077,9 +3222,9 @@ }, "gridPos": { "h": 10, - "w": 12, - "x": 12, - "y": 81 + "w": 8, + "x": 8, + "y": 84 }, "id": 41, "options": { @@ -3110,7 +3255,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_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\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_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", "refId": "A" } ], @@ -3122,7 +3267,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "How many bytes processed per each batch", + "description": "Breakdown of `committing_storage_time` from process_finalized_transitions time", "fieldConfig": { "defaults": { "color": { @@ -3146,16 +3291,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" @@ -3177,17 +3319,38 @@ } ] }, - "unit": "decbytes" + "unit": "µs" }, - "overrides": [] + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*_attempts_.*/" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + }, + { + "id": "unit", + "value": "sishort" + }, + { + "id": "custom.axisLabel", + "value": "NOMT Write Attempts" + } + ] + } + ] }, "gridPos": { "h": 10, - "w": 12, - "x": 0, - "y": 91 + "w": 8, + "x": 16, + "y": 84 }, - "id": 40, + "id": 62, "options": { "legend": { "calcs": [ @@ -3199,7 +3362,9 @@ ], "displayMode": "table", "placement": "bottom", - "showLegend": true + "showLegend": true, + "sortBy": "50th %", + "sortDesc": true }, "tooltip": { "hideZeros": false, @@ -3212,13 +3377,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 == \"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_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", "refId": "A" } ], - "title": "Batches Bytes Processed", + "title": "Nomt Commit Detailed", "type": "timeseries" }, { @@ -3226,7 +3391,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "How much gas used for slot, in terms of gas unit spent on compute and memory", + "description": "How many bytes processed per each batch", "fieldConfig": { "defaults": { "color": { @@ -3250,13 +3415,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" @@ -3278,17 +3446,17 @@ } ] }, - "unit": "sishort" + "unit": "decbytes" }, "overrides": [] }, "gridPos": { "h": 10, "w": 12, - "x": 12, - "y": 91 + "x": 0, + "y": 94 }, - "id": 29, + "id": 40, "options": { "legend": { "calcs": [ @@ -3304,7 +3472,7 @@ }, "tooltip": { "hideZeros": false, - "mode": "multi", + "mode": "single", "sort": "none" } }, @@ -3313,34 +3481,21 @@ { "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}\"\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_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": "Slot Gas Usage", + "title": "Batches Bytes Processed", "type": "timeseries" }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 101 - }, - "id": 32, - "panels": [], - "title": "Throughput", - "type": "row" - }, { "datasource": { "type": "influxdb", "uid": "${DS}" }, - "description": "", + "description": "How much gas used for slot, in terms of gas unit spent on compute and memory", "fieldConfig": { "defaults": { "color": { @@ -3364,16 +3519,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" @@ -3395,17 +3547,17 @@ } ] }, - "unit": "binBps" + "unit": "sishort" }, "overrides": [] }, "gridPos": { "h": 10, "w": 12, - "x": 0, - "y": 102 + "x": 12, + "y": 94 }, - "id": 33, + "id": 29, "options": { "legend": { "calcs": [ @@ -3421,7 +3573,7 @@ }, "tooltip": { "hideZeros": false, - "mode": "single", + "mode": "multi", "sort": "none" } }, @@ -3430,21 +3582,33 @@ { "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", + "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": "Batch bytes per second", + "title": "Slot Gas Usage", "type": "timeseries" }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 104 + }, + "id": 59, + "panels": [], + "title": "Under Construction", + "type": "row" + }, { "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": { @@ -3454,8 +3618,9 @@ "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", - "axisLabel": "TPS", + "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", @@ -3468,16 +3633,139 @@ }, "insertNulls": false, "lineInterpolation": "linear", - "lineStyle": { - "fill": "solid" + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "dashed" + } + }, + "fieldMinMax": false, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "none" + }, + "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": 0, + "y": 105 + }, + "id": 53, + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "max", + "lastNotNull", + "p50", + "p99" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "99th %", + "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}\" \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": "(Under Construction) Batch Metrics", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS}" + }, + "description": "Time it takes to process single transaction.\nDoes not include signature check", + "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": 15000, + "spanNulls": false, "stacking": { "group": "A", "mode": "none" @@ -3492,9 +3780,14 @@ "steps": [ { "color": "green" + }, + { + "color": "red", + "value": 80 } ] - } + }, + "unit": "µs" }, "overrides": [] }, @@ -3502,9 +3795,9 @@ "h": 10, "w": 12, "x": 12, - "y": 102 + "y": 105 }, - "id": 20, + "id": 58, "options": { "legend": { "calcs": [ @@ -3516,11 +3809,13 @@ ], "displayMode": "table", "placement": "bottom", - "showLegend": true + "showLegend": true, + "sortBy": "Name", + "sortDesc": true }, "tooltip": { "hideZeros": false, - "mode": "single", + "mode": "multi", "sort": "none" } }, @@ -3529,21 +3824,34 @@ { "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) => ({ r with _value: r._value / 30.0 }))\n |> map(fn: (r) => ({ r with _field: \"TPS 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\n data |> aggregateWindow(every: ${agg_interval}, fn: mean)\n", + "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": "Transactions Per Second", + "title": "(Under Construction) Detailed Tx Timing", "type": "timeseries" }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 115 + }, + "id": 32, + "panels": [], + "title": "Throughput", + "type": "row" + }, { "datasource": { "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": { @@ -3553,7 +3861,7 @@ "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", - "axisLabel": "Gas Per Second", + "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "barWidthFactor": 0.6, @@ -3567,13 +3875,16 @@ }, "insertNulls": false, "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", - "spanNulls": false, + "spanNulls": 300000, "stacking": { "group": "A", "mode": "none" @@ -3595,7 +3906,7 @@ } ] }, - "unit": "sishort" + "unit": "binBps" }, "overrides": [] }, @@ -3603,9 +3914,9 @@ "h": 10, "w": 12, "x": 0, - "y": 112 + "y": 116 }, - "id": 34, + "id": 33, "options": { "legend": { "calcs": [ @@ -3617,13 +3928,752 @@ ], "displayMode": "table", "placement": "bottom", - "showLegend": true, - "sortBy": "Mean", - "sortDesc": true + "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": 116 + }, + "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\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": 126 + }, + "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 + } + ] + }, + "unit": "sishort" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 126 + }, + "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": 9, + "w": 12, + "x": 0, + "y": 136 + }, + "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": 136 + }, + "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": 146 + }, + "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": 147 + }, + "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": [ + { + "__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 + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 147 + }, + "id": 31, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true }, "tooltip": { "hideZeros": false, - "mode": "multi", + "mode": "single", "sort": "none" } }, @@ -3634,11 +4684,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_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)", + "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", "refId": "A" } ], - "title": "Slot Gas Per Second", + "title": "Rollup Data Growth Rate", "type": "timeseries" }, { @@ -3646,7 +4696,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "Averaged by 30 seconds", + "description": "The time taken to fetch the block from the Data Availability layer", "fieldConfig": { "defaults": { "color": { @@ -3656,7 +4706,7 @@ "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", - "axisLabel": "Transactions per second", + "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "barWidthFactor": 0.6, @@ -3698,17 +4748,42 @@ } ] }, - "unit": "sishort" + "unit": "ms" }, - "overrides": [] + "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 + } + } + ] + } + ] }, "gridPos": { - "h": 10, + "h": 9, "w": 12, - "x": 12, - "y": 112 + "x": 0, + "y": 156 }, - "id": 35, + "id": 43, "options": { "legend": { "calcs": [ @@ -3720,13 +4795,11 @@ ], "displayMode": "table", "placement": "bottom", - "showLegend": true, - "sortBy": "Mean", - "sortDesc": true + "showLegend": true }, "tooltip": { "hideZeros": false, - "mode": "multi", + "mode": "single", "sort": "none" } }, @@ -3737,11 +4810,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_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_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": "Individual Transactions Throughput", + "title": "Fetch Data Availability block time", "type": "timeseries" }, { @@ -3749,7 +4823,6 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "Throughput per handler", "fieldConfig": { "defaults": { "color": { @@ -3759,7 +4832,7 @@ "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", - "axisLabel": "Requests per Second", + "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "barWidthFactor": 0.6, @@ -3801,31 +4874,23 @@ } ] }, - "unit": "sishort" + "unit": "bytes" }, "overrides": [] }, "gridPos": { "h": 9, "w": 12, - "x": 0, - "y": 122 + "x": 12, + "y": 156 }, - "id": 39, + "id": 30, "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, @@ -3840,31 +4905,19 @@ "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", + "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": "HTTP requests", + "title": "Rollup Data Size", "type": "timeseries" }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 131 - }, - "id": 28, - "panels": [], - "title": "Misc", - "type": "row" - }, { "datasource": { - "type": "loki", - "uid": "${LOKI_DS}" + "type": "influxdb", + "uid": "${DS}" }, + "description": "Distance from synced DA height to the head DA height.", "fieldConfig": { "defaults": { "color": { @@ -3888,13 +4941,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" @@ -3909,31 +4965,35 @@ "steps": [ { "color": "green" + }, + { + "color": "red", + "value": 80 } ] - }, - "unit": "short" + } }, "overrides": [] }, "gridPos": { - "h": 9, + "h": 8, "w": 12, "x": 0, - "y": 132 + "y": 165 }, - "id": 27, + "id": 44, "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, @@ -3945,17 +5005,14 @@ "targets": [ { "datasource": { - "type": "loki", - "uid": "${LOKI_DS}" + "type": "influxdb", + "uid": "provisioned_influxdb_sov" }, - "direction": "backward", - "editorMode": "code", - "expr": "sum by (level) (\n count_over_time(\n {host=\"$host\"}\n [$__interval]\n )\n)", - "queryType": "range", + "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": "Log messages by level", + "title": "Sync Distance", "type": "timeseries" }, { @@ -3963,6 +5020,7 @@ "type": "influxdb", "uid": "${DS}" }, + "description": "", "fieldConfig": { "defaults": { "color": { @@ -4014,21 +5072,27 @@ } ] }, - "unit": "bytes" + "unit": "sishort" }, "overrides": [] }, "gridPos": { - "h": 9, + "h": 8, "w": 12, "x": 12, - "y": 132 + "y": 165 }, - "id": 30, + "id": 47, "options": { "legend": { - "calcs": [], - "displayMode": "list", + "calcs": [ + "min", + "mean", + "p50", + "max", + "lastNotNull" + ], + "displayMode": "table", "placement": "bottom", "showLegend": true }, @@ -4045,11 +5109,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) => 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", + "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", "refId": "A" } ], - "title": "Rollup Data Size", + "title": "NOMT Counts", "type": "timeseries" }, { @@ -4057,7 +5122,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "The time taken to fetch the block from the Data Availability layer", + "description": "Breakdown of `committing_storage_time` from process_finalized_transitions time", "fieldConfig": { "defaults": { "color": { @@ -4070,9 +5135,9 @@ "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 0, + "barWidthFactor": 1, + "drawStyle": "bars", + "fillOpacity": 100, "gradientMode": "none", "hideFrom": { "legend": false, @@ -4081,7 +5146,7 @@ }, "insertNulls": false, "lineInterpolation": "linear", - "lineWidth": 1, + "lineWidth": 5, "pointSize": 5, "scaleDistribution": { "type": "linear" @@ -4090,7 +5155,7 @@ "spanNulls": false, "stacking": { "group": "A", - "mode": "none" + "mode": "percent" }, "thresholdsStyle": { "mode": "off" @@ -4109,17 +5174,17 @@ } ] }, - "unit": "ms" + "unit": "µs" }, "overrides": [] }, "gridPos": { - "h": 8, + "h": 10, "w": 12, "x": 0, - "y": 141 + "y": 173 }, - "id": 43, + "id": 68, "options": { "legend": { "calcs": [ @@ -4131,7 +5196,9 @@ ], "displayMode": "table", "placement": "bottom", - "showLegend": true + "showLegend": true, + "sortBy": "50th %", + "sortDesc": true }, "tooltip": { "hideZeros": false, @@ -4146,12 +5213,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_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": "Fetch Data Availability block time", + "title": "Nomt Commit Ratios", "type": "timeseries" }, { @@ -4159,6 +5225,7 @@ "type": "influxdb", "uid": "${DS}" }, + "description": "", "fieldConfig": { "defaults": { "color": { @@ -4170,6 +5237,8 @@ "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", + "axisSoftMax": 1, + "axisSoftMin": 0, "barAlignment": 0, "barWidthFactor": 0.6, "drawStyle": "line", @@ -4210,21 +5279,27 @@ } ] }, - "unit": "Bps" + "unit": "percentunit" }, "overrides": [] }, "gridPos": { - "h": 8, + "h": 10, "w": 12, "x": 12, - "y": 141 + "y": 173 }, - "id": 31, + "id": 67, "options": { "legend": { - "calcs": [], - "displayMode": "list", + "calcs": [ + "min", + "mean", + "p50", + "max", + "lastNotNull" + ], + "displayMode": "table", "placement": "bottom", "showLegend": true }, @@ -4241,11 +5316,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) => 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", + "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\"])", "refId": "A" } ], - "title": "Rollup Data Growth Rate", + "title": "NOMT Page Cache Misses", "type": "timeseries" }, { @@ -4253,7 +5329,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "Distance from synced DA height to the head DA height.", + "description": "The time taken to fetch the block from the Data Availability layer", "fieldConfig": { "defaults": { "color": { @@ -4277,16 +5353,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" @@ -4307,17 +5380,18 @@ "value": 80 } ] - } + }, + "unit": "µs" }, "overrides": [] }, "gridPos": { - "h": 8, + "h": 10, "w": 12, "x": 0, - "y": 149 + "y": 183 }, - "id": 44, + "id": 45, "options": { "legend": { "calcs": [ @@ -4342,13 +5416,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\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", + "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", "refId": "A" } ], - "title": "Sync Distance", + "title": "Pruning time", "type": "timeseries" }, { @@ -4413,12 +5488,12 @@ "overrides": [] }, "gridPos": { - "h": 8, + "h": 10, "w": 12, "x": 12, - "y": 149 + "y": 183 }, - "id": 47, + "id": 46, "options": { "legend": { "calcs": [ @@ -4446,11 +5521,11 @@ "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[\"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", "refId": "A" } ], - "title": "NOMT Counts", + "title": "Pruning counts", "type": "timeseries" }, { @@ -4458,7 +5533,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "The time taken to fetch the block from the Data Availability layer", + "description": "", "fieldConfig": { "defaults": { "color": { @@ -4515,12 +5590,12 @@ "overrides": [] }, "gridPos": { - "h": 8, + "h": 10, "w": 12, - "x": 0, - "y": 157 + "x": 12, + "y": 193 }, - "id": 45, + "id": 57, "options": { "legend": { "calcs": [ @@ -4532,11 +5607,13 @@ ], "displayMode": "table", "placement": "bottom", - "showLegend": true + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true }, "tooltip": { "hideZeros": false, - "mode": "single", + "mode": "multi", "sort": "none" } }, @@ -4547,12 +5624,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 == \"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) =>\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": "Pruning time", + "title": "Example: SyntheticLoad", "type": "timeseries" }, { @@ -4560,7 +5636,7 @@ "type": "influxdb", "uid": "${DS}" }, - "description": "", + "description": "Tx stats\n", "fieldConfig": { "defaults": { "color": { @@ -4612,17 +5688,17 @@ } ] }, - "unit": "sishort" + "unit": "µs" }, "overrides": [] }, "gridPos": { - "h": 8, + "h": 10, "w": 12, "x": 12, - "y": 157 + "y": 203 }, - "id": 46, + "id": 61, "options": { "legend": { "calcs": [ @@ -4634,7 +5710,9 @@ ], "displayMode": "table", "placement": "bottom", - "showLegend": true + "showLegend": true, + "sortBy": "50th %", + "sortDesc": true }, "tooltip": { "hideZeros": false, @@ -4649,18 +5727,20 @@ "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) =>\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)", "refId": "A" } ], - "title": "Pruning counts", + "title": "Tx Stats", "type": "timeseries" } ], "preload": false, "schemaVersion": 41, - "tags": [], + "tags": [ + "influxdb", + "sovereign" + ], "templating": { "list": [ { @@ -4772,6 +5852,11 @@ "label": "Aggregation Interval", "name": "agg_interval", "options": [ + { + "selected": false, + "text": "5s", + "value": "5s" + }, { "selected": false, "text": "10s", @@ -4833,7 +5918,7 @@ "value": "30d" } ], - "query": "10s,30s,1m,10m,30m,1h,6h,12h,1d,7d,14d,30d", + "query": "5s,10s,30s,1m,10m,30m,1h,6h,12h,1d,7d,14d,30d", "refresh": 2, "type": "interval" } @@ -4847,5 +5932,5 @@ "timezone": "browser", "title": "Sovereign Rollup Node Dashboard", "uid": "sov_rollup_dashboard_influx", - "version": 89 + "version": 181 } \ No newline at end of file