diff --git a/README.md b/README.md index 34e3a7bd75a6..a3d57650f504 100644 --- a/README.md +++ b/README.md @@ -243,6 +243,12 @@ polkadot --chain=polkadot-local --bob -d /tmp/bob --port 30334 --bootnodes '/ip4 Ensure you replace `ALICE_BOOTNODE_ID_HERE` with the node ID from the output of the first terminal. +### Monitoring + +[Setup Prometheus and Grafana](https://wiki.polkadot.network/docs/maintain-guides-how-to-monitor-your-node). + +Once you set this up you can take a look at the [Polkadot Grafana dashboards](grafana/README.md) that we currently maintain. + ### Using Docker [Using Docker](doc/docker.md) diff --git a/grafana/README.md b/grafana/README.md new file mode 100644 index 000000000000..73c5b6feacf2 --- /dev/null +++ b/grafana/README.md @@ -0,0 +1,93 @@ +# Do I need this ? + +Polkadot nodes collect and produce Prometheus metrics and logs. These include health, performance and debug +information such as last finalized block, height of the chain, and many other deeper implementation details +of the Polkadot/Substrate node subsystems. These are crucial pieces of information that one needs to successfully +monitor the liveliness and performance of a network and its validators. + +# How does it work ? + +Just import the dashboard JSON files from this folder in your Grafana installation. All dashboards are grouped in +folder percategory (like for example `parachains`). The files have been created by Grafana export functionality and +follow the data model specified [here](https://grafana.com/docs/grafana/latest/dashboards/json-model/). + +We aim to keep the dashboards here in sync with the implementation, except dashboards for development and +testing. + +# Contributing + +**Your contributions are most welcome!** + +Please make sure to follow the following design guidelines: +- Add a new entry in this file and describe the usecase and key metrics +- Ensure proper names and descriptions for dashboard panels and add relevant documentation when needed. +This is very important as not all users have similar depth of understanding of the implementation +- Have labels for axis +- All values have proper units of measurement +- A crisp and clear color scheme is used + +# Prerequisites + +Before you continue make sure you have Grafana set up, or otherwise follow this +[guide](https://wiki.polkadot.network/docs/maintain-guides-how-to-monitor-your-node). + +You might also need to [setup Loki](https://grafana.com/go/webinar/loki-getting-started/). + +# Alerting + +Alerts are currently out of the scope of the dashboards, but their setup can be done manually or automated +(see [installing and configuring Alert Manager](https://wiki.polkadot.network/docs/maintain-guides-how-to-monitor-your-node#installing-and-configuring-alertmanager-optional)) + +# Dashboards + +This section is a list of dashboards, their use case as well as the key metrics that are covered. + +## Node Versions + +Useful for monitoring versions and logs of validator nodes. Includes time series panels that +track node warning and error log rates. These can be further investigated in Grafana Loki. + +Requires Loki for log aggregation and querying. + +[Dashboard JSON](general/kusama_deployment.json) + +## Parachain Status + +This dashboard allows you to see at a glance how fast are candidates approved, disputed and +finalized. It was originally designed for observing liveliness after parachain deployment in + Kusama/Polkadot, but can be useful generally in production or testing. + +It includes panels covering key subsystems of the parachain node side implementation: +- Backing +- PVF execution +- Approval voting +- Disputes coordinator +- Chain selection + +It is important to note that this dashboard applies only for validator nodes. The prometheus +queries assume the `instance` label value contains the string `validator` only for validator nodes. + +[Dashboard JSON](parachains/status.json) + +### Key liveliness indicators +- **Relay chain finality lag**. How far behind finality is compared to the current best block. By design, + GRANDPA never finalizes past last 2 blocks, so this value is always >=2 blocks. +- **Approval checking finality lag**. The distance (in blocks) between the chain head and the last block +on which Approval voting is happening. The block is generally the highest approved ancestor of the head +block and the metric is computed during relay chain selection. +- **Disputes finality lag**. How far behind the chain head is the last approved and non disputed block. +This value is always higher than approval checking lag as it further restricts finality to only undisputed +chains. +- **PVF preparation and execution time**. Each parachain has it's own PVF (parachain validation function): +a wasm blob that is executed by validators during backing, approval checking and disputing. The PVF +preparation time refers to the time it takes for the PVF wasm to be compiled. This step is done once and +then result cached. PVF execution will use the resulting artifact to execute the PVF for a given candidate. +PVFs are expected to have a limited execution time to ensure there is enough time left for the parachain +block to be included in the relay block. +- **Time to recover and check candidate**. This is part of approval voting and covers the time it takes +to recover the candidate block available data from other validators, check it (includes PVF execution time) +and issue statement or initiate dispute. +- **Assignment delay tranches**. Approval voting is designed such that validators assigned to check a specific +candidate are split up into equal delay tranches (0.5 seconds each). All validators checks are ordered by the delay +tranche index. Early tranches of validators have the opportunity to check the candidate first before later tranches +that act as as backups in case of no shows. diff --git a/grafana/general/kusama_deployment.json b/grafana/general/kusama_deployment.json new file mode 100644 index 000000000000..1d0c6900196f --- /dev/null +++ b/grafana/general/kusama_deployment.json @@ -0,0 +1,928 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "Monitors deployed versions, warnings and errors logged.", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 88, + "iteration": 1640613477360, + "links": [], + "liveNow": false, + "panels": [ + { + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 36, + "title": "Overview", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [] + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 7, + "x": 0, + "y": 1 + }, + "id": 22, + "options": { + "displayLabels": [ + "name", + "percent" + ], + "legend": { + "displayMode": "hidden", + "placement": "bottom", + "values": [ + "percent" + ] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": false, + "expr": "sort_desc (count by (version) (polkadot_build_info{chain=\"kusama\", instance=~\".*validator.*\"}))", + "instant": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ version }}", + "refId": "A" + } + ], + "title": "Versions", + "type": "piechart" + }, + { + "datasource": { + "type": "loki", + "uid": "P367D1C7027A603FA" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [] + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 7, + "x": 7, + "y": 1 + }, + "id": 31, + "links": [], + "options": { + "displayLabels": [ + "name", + "percent" + ], + "legend": { + "displayMode": "hidden", + "placement": "bottom" + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.3", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "P367D1C7027A603FA" + }, + "expr": "sum(count_over_time({host=~\"kusama-validator.*\", level=\"WARN\"} [1h])) by (target)", + "instant": false, + "legendFormat": "{{ target }}", + "range": true, + "refId": "A" + } + ], + "title": "Warnings / h / target", + "transformations": [], + "type": "piechart" + }, + { + "datasource": { + "type": "loki", + "uid": "P367D1C7027A603FA" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [] + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 7, + "x": 14, + "y": 1 + }, + "id": 33, + "links": [], + "options": { + "displayLabels": [ + "name", + "percent" + ], + "legend": { + "displayMode": "list", + "placement": "bottom" + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.3", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "P367D1C7027A603FA" + }, + "expr": "sum(count_over_time({host=~\"kusama-validator.*\", level=\"ERROR\"} [1h])) by (target)", + "instant": false, + "legendFormat": "{{ target }}", + "range": true, + "refId": "A" + } + ], + "title": "Errors / h / target", + "transformations": [], + "type": "piechart" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 14 + }, + "id": 16, + "panels": [], + "title": "Validator versions", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "description": "Version information for all nodes.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-RdYlGr" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "green", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 14, + "x": 0, + "y": 15 + }, + "id": 13, + "options": { + "displayMode": "lcd", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "text": { + "titleSize": 12, + "valueSize": 22 + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": false, + "expr": "sort_desc (count by (version) (polkadot_build_info{chain=\"kusama\", instance=~\".*validator.*\"}))", + "instant": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{ version }}", + "refId": "A" + } + ], + "title": "Versions", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "displayMode": "auto" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Time" + }, + "properties": [ + { + "id": "custom.width", + "value": 232 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "name" + }, + "properties": [ + { + "id": "custom.width", + "value": 220 + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 10, + "x": 14, + "y": 15 + }, + "id": 20, + "options": { + "footer": { + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "frameIndex": 2, + "showHeader": true, + "sortBy": [ + { + "desc": false, + "displayName": "version (lastNotNull)" + } + ] + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": false, + "expr": "polkadot_build_info{instance=~\".*validator.*\",chain=\"kusama\"}", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Node versions ", + "transformations": [ + { + "id": "groupBy", + "options": { + "fields": { + "name": { + "aggregations": [], + "operation": "groupby" + }, + "version": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + } + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 27 + }, + "id": 18, + "panels": [], + "title": "Warnings and errors", + "type": "row" + }, + { + "datasource": { + "type": "loki", + "uid": "P367D1C7027A603FA" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic", + "seriesBy": "last" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "hue", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "orange", + "value": 500 + }, + { + "color": "red", + "value": 1000 + } + ] + }, + "unit": "warnings/h" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 28 + }, + "id": 8, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "multi" + } + }, + "pluginVersion": "8.1.3", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "P367D1C7027A603FA" + }, + "expr": "sum(count_over_time({host=~\"kusama-validator.*\", level=\"WARN\"} [1h])) by (target)", + "instant": false, + "legendFormat": "{{target}}", + "range": true, + "refId": "A" + } + ], + "title": "All warnings / hour", + "transformations": [], + "type": "timeseries" + }, + { + "datasource": { + "type": "loki", + "uid": "P367D1C7027A603FA" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic", + "seriesBy": "last" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "hue", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 500 + }, + { + "color": "red", + "value": 1000 + } + ] + }, + "unit": "warnings/h" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 28 + }, + "id": 30, + "links": [], + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "multi" + } + }, + "pluginVersion": "8.1.3", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "P367D1C7027A603FA" + }, + "expr": "sum(count_over_time({host=~\"kusama-validator.*\", level=\"WARN\", target=\"parachain\"}[1h])) by (subtarget)", + "hide": false, + "instant": false, + "legendFormat": "{{subtarget}}", + "range": true, + "refId": "B" + } + ], + "title": "Parachain warnings/hour", + "transformations": [], + "type": "timeseries" + }, + { + "datasource": { + "type": "loki", + "uid": "P367D1C7027A603FA" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic", + "seriesBy": "last" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "hue", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "dark-red", + "value": 3 + } + ] + }, + "unit": "warnings/h" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 40 + }, + "id": 34, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "multi" + } + }, + "pluginVersion": "8.1.3", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "P367D1C7027A603FA" + }, + "expr": "sum(count_over_time({host=~\"kusama-validator.*\", level=\"ERROR\"} [1h])) by (target)", + "instant": false, + "legendFormat": "{{target}}", + "range": true, + "refId": "A" + } + ], + "title": "All errors / hour", + "transformations": [], + "type": "timeseries" + }, + { + "datasource": { + "type": "loki", + "uid": "P367D1C7027A603FA" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic", + "seriesBy": "last" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "hue", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 5 + }, + { + "color": "red", + "value": 15 + } + ] + }, + "unit": "warnings/h" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 40 + }, + "id": 32, + "links": [], + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "multi" + } + }, + "pluginVersion": "8.1.3", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "P367D1C7027A603FA" + }, + "expr": "sum(count_over_time({host=~\"kusama-validator.*\", level=\"ERROR\", target=\"parachain\"}[1h])) by (subtarget)", + "hide": false, + "instant": false, + "legendFormat": "{{subtarget}}", + "range": true, + "refId": "B" + } + ], + "title": "Parachain errors/hour", + "transformations": [], + "type": "timeseries" + } + ], + "refresh": "15m", + "schemaVersion": 34, + "style": "dark", + "tags": [ + "Kusama", + "Loki", + "Logs" + ], + "templating": { + "list": [ + { + "current": { + "selected": true, + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "definition": "polkadot_build_info{chain=\"$chain\"}", + "description": "Version of the node", + "hide": 0, + "includeAll": true, + "label": "Version", + "multi": true, + "name": "version", + "options": [], + "query": { + "query": "polkadot_build_info{chain=\"$chain\"}", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": ".*version=\"(.*?)\".*", + "skipUrlSync": false, + "sort": 5, + "type": "query" + }, + { + "current": { + "selected": true, + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "definition": "polkadot_sync_peers{chain=\"$chain\"}", + "description": "Validator hosts", + "hide": 0, + "includeAll": true, + "label": "Instance", + "multi": true, + "name": "instance", + "options": [], + "query": { + "query": "polkadot_sync_peers{chain=\"$chain\"}", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": ".*instance=\"(.*validator.*)*", + "skipUrlSync": false, + "sort": 0, + "type": "query" + } + ] + }, + "time": { + "from": "now-7d", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Kusama Validators Overview", + "uid": "0i-QjQ82j", + "version": 29, + "weekStart": "" +} \ No newline at end of file diff --git a/grafana/parachains/status.json b/grafana/parachains/status.json new file mode 100644 index 000000000000..5942cbdf4479 --- /dev/null +++ b/grafana/parachains/status.json @@ -0,0 +1,1826 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "Information related to the operation of parachains", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 93, + "iteration": 1640613381999, + "links": [], + "liveNow": false, + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 31, + "panels": [], + "title": "Overview", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$data_source" + }, + "description": "Measures how far behind finality is compared to the current best block. By design, GRANDPA never finalizes past last 2 blocks, so this value is always >=2.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 15, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "orange", + "value": 5 + }, + { + "color": "red", + "value": 10 + } + ] + }, + "unit": "blocks" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 5, + "x": 0, + "y": 1 + }, + "id": 41, + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": true, + "expr": "avg(polkadot_block_height{chain=\"$chain\",instance=~\".*validator.*\", status=\"best\"} - on( instance) polkadot_block_height{chain=\"$chain\",instance=~\".*validator.*\", status=\"finalized\"})", + "interval": "", + "legendFormat": "", + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Relay chain finality lag (avg)", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$data_source" + }, + "description": "Measures how far behind finality is compared to the current best block. By design, GRANDPA never finalizes past last 2 blocks, so this value is always >=2.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 15, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "orange", + "value": 5 + }, + { + "color": "red", + "value": 10 + } + ] + }, + "unit": "blocks" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 5, + "x": 5, + "y": 1 + }, + "id": 44, + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": true, + "expr": "avg(polkadot_parachain_approval_checking_finality_lag{chain=\"$chain\", instance=~\".*validator.*\"})", + "interval": "", + "legendFormat": "", + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Approval checking finality lag (avg)", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$data_source" + }, + "description": "How far behind the chain head is the last approved and non disputed block. \nThis value is always higher than approval checking lag as it further restricts finality to only undisputed \nchains.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 15, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "orange", + "value": 5 + }, + { + "color": "red", + "value": 10 + } + ] + }, + "unit": "blocks" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 5, + "x": 10, + "y": 1 + }, + "id": 32, + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": true, + "expr": "avg(polkadot_parachain_disputes_finality_lag{chain=\"$chain\"})", + "format": "time_series", + "hide": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Disputes Finality Lag (avg)", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$data_source" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic", + "seriesBy": "last" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 5, + "gradientMode": "hue", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "max": 15, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "blocks" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 9, + "x": 15, + "y": 1 + }, + "id": 29, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "multi" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": true, + "expr": "avg(polkadot_parachain_approval_checking_finality_lag{chain=\"$chain\", instance=~\".*validator.*\"})", + "interval": "", + "legendFormat": "Approval checking finality lag", + "queryType": "randomWalk", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": true, + "expr": "avg(polkadot_block_height{chain=\"$chain\",instance=~\".*validator.*\", status=\"best\"} - on( instance) polkadot_block_height{chain=\"$chain\",instance=~\".*validator.*\", status=\"finalized\"})", + "hide": false, + "interval": "", + "legendFormat": "Relay chain finality lag", + "queryType": "randomWalk", + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": true, + "expr": "avg(polkadot_parachain_disputes_finality_lag{chain=\"$chain\", instance=~\".*validator.*\"})", + "hide": false, + "interval": "", + "legendFormat": "Disputes finality lag", + "queryType": "randomWalk", + "refId": "B" + } + ], + "title": "Finality lag ", + "type": "timeseries" + }, + { + "cards": {}, + "color": { + "cardColor": "#b4ff00", + "colorScale": "sqrt", + "colorScheme": "interpolateInferno", + "exponent": 0.5, + "mode": "spectrum" + }, + "dataFormat": "timeseries", + "datasource": { + "type": "prometheus", + "uid": "$data_source" + }, + "description": "", + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 8 + }, + "heatmap": {}, + "hideZeroBuckets": false, + "highlightCards": true, + "id": 42, + "legend": { + "show": true + }, + "pluginVersion": "7.3.6", + "reverseYBuckets": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": true, + "expr": "polkadot_parachain_approval_checking_finality_lag{chain=\"$chain\", instance=~\".*validator.*\"}", + "format": "time_series", + "interval": "", + "legendFormat": "", + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Approval checking finality lag (heatmap)", + "tooltip": { + "show": true, + "showHistogram": false + }, + "type": "heatmap", + "xAxis": { + "show": true + }, + "xBucketSize": "1m", + "yAxis": { + "format": "blocks", + "logBase": 1, + "max": "10", + "min": "0", + "show": true + }, + "yBucketBound": "auto", + "yBucketSize": 1 + }, + { + "cards": {}, + "color": { + "cardColor": "#b4ff00", + "colorScale": "sqrt", + "colorScheme": "interpolateInferno", + "exponent": 0.5, + "mode": "spectrum" + }, + "dataFormat": "timeseries", + "datasource": { + "type": "prometheus", + "uid": "$data_source" + }, + "description": "", + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 8 + }, + "heatmap": {}, + "hideZeroBuckets": false, + "highlightCards": true, + "id": 33, + "legend": { + "show": true + }, + "pluginVersion": "7.3.6", + "reverseYBuckets": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": true, + "expr": "polkadot_parachain_disputes_finality_lag{chain=\"$chain\", instance=~\".*validator.*\"}", + "format": "time_series", + "interval": "", + "legendFormat": "", + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Disputes finality lag (heatmap)", + "tooltip": { + "show": true, + "showHistogram": true + }, + "type": "heatmap", + "xAxis": { + "show": true + }, + "xBucketSize": "1m", + "yAxis": { + "format": "blocks", + "logBase": 1, + "max": "10", + "min": "0", + "show": true + }, + "yBucketBound": "auto", + "yBucketSize": 1 + }, + { + "cards": {}, + "color": { + "cardColor": "#B877D9", + "colorScale": "sqrt", + "colorScheme": "interpolateInferno", + "exponent": 0.2, + "mode": "spectrum" + }, + "dataFormat": "tsbuckets", + "datasource": { + "type": "prometheus", + "uid": "$data_source" + }, + "description": "The time spent in preparing Parachain Validation Function artifacts in seconds.", + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 18 + }, + "heatmap": {}, + "hideZeroBuckets": true, + "highlightCards": true, + "id": 36, + "legend": { + "show": true + }, + "maxDataPoints": 1340, + "pluginVersion": "8.2.2", + "reverseYBuckets": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": false, + "expr": "sum(rate(polkadot_pvf_preparation_time_bucket{instance=~\".*validator.*\", chain=\"$chain\"}[$__rate_interval])) by (le)", + "format": "heatmap", + "instant": false, + "interval": "", + "legendFormat": "{{le}}", + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "PVF preparation time (heatmap)", + "tooltip": { + "show": true, + "showHistogram": false + }, + "transformations": [], + "type": "heatmap", + "xAxis": { + "show": true + }, + "yAxis": { + "format": "s", + "logBase": 1, + "show": true + }, + "yBucketBound": "auto" + }, + { + "cards": {}, + "color": { + "cardColor": "#b4ff00", + "colorScale": "sqrt", + "colorScheme": "interpolateInferno", + "exponent": 0.5, + "mode": "spectrum" + }, + "dataFormat": "tsbuckets", + "datasource": { + "type": "prometheus", + "uid": "$data_source" + }, + "description": "Parachain Validation Function execution time distribution. PVFs are expected to have a limited execution time to ensure there is enough time left for the parachain block to be included in the relay block. ", + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 18 + }, + "heatmap": {}, + "hideZeroBuckets": true, + "highlightCards": true, + "id": 38, + "legend": { + "show": true + }, + "maxDataPoints": 1340, + "pluginVersion": "8.3.3", + "reverseYBuckets": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": false, + "expr": "sum(increase(polkadot_pvf_execution_time_bucket{instance=~\".*validator.*\", chain=\"$chain\"}[$__rate_interval])) by (le)", + "format": "heatmap", + "instant": false, + "interval": "", + "legendFormat": "{{le}}", + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "PVF execution time (heatmap)", + "tooltip": { + "show": true, + "showHistogram": true + }, + "tooltipDecimals": 0, + "transformations": [], + "type": "heatmap", + "xAxis": { + "show": true + }, + "yAxis": { + "decimals": 0, + "format": "s", + "logBase": 1, + "show": true + }, + "yBucketBound": "auto" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 28 + }, + "id": 35, + "panels": [], + "title": "Candidate backing", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$data_source" + }, + "description": "Number of candidates seconded and signed statements.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic", + "seriesBy": "max" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 29 + }, + "id": 27, + "maxDataPoints": 1340, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.2.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": true, + "expr": "sum(rate(polkadot_parachain_candidate_backing_candidates_seconded_total{chain=\"$chain\"}[$__rate_interval]))", + "format": "time_series", + "instant": false, + "interval": "", + "legendFormat": "Candidates seconded", + "queryType": "randomWalk", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": true, + "expr": "sum(rate(polkadot_parachain_candidate_backing_signed_statements_total{chain=\"$chain\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "interval": "", + "legendFormat": "Statements signed", + "queryType": "randomWalk", + "refId": "B" + } + ], + "title": "Candidate backing", + "transformations": [], + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$data_source" + }, + "description": "Number of erasure-encoded chunks of data belonging to candidate blocks. ", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic", + "seriesBy": "max" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "chunks/s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 29 + }, + "id": 43, + "maxDataPoints": 1340, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.2.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": true, + "expr": "sum(rate(polkadot_parachain_received_availability_chunks_total{chain=\"$chain\", instance=~\".*validator.*\"}[$__rate_interval]))", + "format": "time_series", + "instant": false, + "interval": "", + "legendFormat": "Chunks received", + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Availability", + "transformations": [], + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 37 + }, + "id": 22, + "panels": [], + "title": "Disputes", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${data_source}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "disputes/s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 38 + }, + "id": 39, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": false, + "expr": "sum(rate(polkadot_parachain_candidate_dispute_concluded{chain=\"$chain\"}[$__rate_interval])) by (validity)", + "interval": "", + "legendFormat": "Concluded {{validity}}", + "queryType": "randomWalk", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${data_source}" + }, + "exemplar": false, + "expr": "sum(rate(polkadot_parachain_candidate_disputes_total{chain=\"$chain\"}[$__rate_interval]))", + "hide": false, + "interval": "", + "legendFormat": "disputes raised", + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${data_source}" + }, + "exemplar": false, + "expr": "sum(rate(polkadot_parachain_candidate_dispute_votes{chain=\"$chain\"}[$__rate_interval])) by (validity)", + "hide": false, + "interval": "", + "legendFormat": "{{validity}} votes", + "refId": "C" + } + ], + "title": "Dispute votes and outcomes", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${data_source}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "disputes/s" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 38 + }, + "id": 40, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": false, + "expr": "sum(rate(polkadot_parachain_dispute_participations{chain=\"$chain\"}[$__rate_interval])) by (priority)", + "interval": "", + "legendFormat": "{{priority}}", + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Dispute participations", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 46 + }, + "id": 16, + "panels": [], + "title": "Candidate Validation", + "type": "row" + }, + { + "cards": {}, + "color": { + "cardColor": "#b4ff00", + "colorScale": "sqrt", + "colorScheme": "interpolateInferno", + "exponent": 0.5, + "mode": "spectrum" + }, + "dataFormat": "tsbuckets", + "datasource": { + "type": "prometheus", + "uid": "${data_source}" + }, + "description": "", + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 47 + }, + "heatmap": {}, + "hideZeroBuckets": true, + "highlightCards": true, + "id": 18, + "legend": { + "show": false + }, + "pluginVersion": "8.2.2", + "reverseYBuckets": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": false, + "expr": "sum(increase(polkadot_parachain_candidate_validation_validate_from_chain_state_bucket{chain=\"$chain\"} [$__rate_interval])) by (le) +\nsum(increase(polkadot_parachain_candidate_validation_validate_from_exhaustive_bucket{chain=\"$chain\"} [$__rate_interval])) by (le) +\nsum(increase(polkadot_parachain_candidate_validation_validate_candidate_exhaustive_bucket{chain=\"$chain\"} [$__rate_interval])) by (le)\n", + "format": "heatmap", + "interval": "", + "legendFormat": "{{le}}", + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Candidate Validation Times (distribution)", + "tooltip": { + "show": true, + "showHistogram": false + }, + "type": "heatmap", + "xAxis": { + "show": true + }, + "yAxis": { + "decimals": 0, + "format": "s", + "logBase": 1, + "show": true + }, + "yBucketBound": "auto" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$data_source" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Approvals (success)" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "dark-green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Assignments" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "dark-blue", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 56 + }, + "id": 26, + "interval": "6s", + "maxDataPoints": 1340, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "multi" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": true, + "expr": "sum(rate(polkadot_parachain_imported_candidates_total{chain=\"$chain\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "interval": "", + "legendFormat": "Imported", + "queryType": "randomWalk", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": true, + "expr": "sum(increase(polkadot_parachain_candidate_backing_candidates_seconded_total{chain=\"$chain\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "interval": "", + "legendFormat": "Seconded", + "queryType": "randomWalk", + "refId": "B" + } + ], + "title": "Candidates imported/seconded", + "transformations": [], + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${data_source}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 56 + }, + "id": 20, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "multi" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": true, + "expr": "sum(rate(polkadot_parachain_validation_requests_total{chain=\"$chain\"}[$__rate_interval])) by (validity)", + "interval": "", + "legendFormat": "{{validity}}", + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Candidate validation requests", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 65 + }, + "id": 2, + "panels": [], + "title": "Approval voting", + "type": "row" + }, + { + "cards": {}, + "color": { + "cardColor": "#b4ff00", + "colorScale": "sqrt", + "colorScheme": "interpolatePlasma", + "exponent": 0.5, + "mode": "spectrum" + }, + "dataFormat": "tsbuckets", + "datasource": { + "type": "prometheus", + "uid": "$data_source" + }, + "description": "Approval voting requires that validators which are assigned to check a specific \ncandidate are split up into delay tranches (0.5s each). Then, all validators checks are ordered by the delay \ntranche index. Early tranches of validators will check the candidate first and later tranches act as as backups in case of no shows.", + "gridPos": { + "h": 9, + "w": 18, + "x": 0, + "y": 66 + }, + "heatmap": {}, + "hideZeroBuckets": true, + "highlightCards": true, + "id": 6, + "legend": { + "show": true + }, + "pluginVersion": "8.3.3", + "reverseYBuckets": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": false, + "expr": "sum(increase(polkadot_parachain_assignments_produced_bucket{chain=\"$chain\"}[$__rate_interval])) by (le)", + "format": "heatmap", + "interval": "", + "legendFormat": "{{le}}", + "queryType": "randomWalk", + "refId": "A" + } + ], + "title": "Assignment Delay Tranches", + "tooltip": { + "show": true, + "showHistogram": false + }, + "type": "heatmap", + "xAxis": { + "show": true + }, + "yAxis": { + "format": "short", + "logBase": 1, + "show": true + }, + "yBucketBound": "auto" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$data_source" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [], + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 6, + "x": 18, + "y": 66 + }, + "id": 28, + "options": { + "displayLabels": [ + "percent", + "name" + ], + "legend": { + "displayMode": "hidden", + "placement": "right", + "values": [] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.2.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": true, + "expr": "sum(rate(polkadot_parachain_assignments_produced_count{chain=\"$chain\"}[$__rate_interval]))", + "format": "time_series", + "interval": "", + "legendFormat": "Assignments", + "queryType": "randomWalk", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": true, + "expr": "sum(rate(polkadot_parachain_approvals_produced_total{chain=\"$chain\"}[$__rate_interval])) by (status)", + "interval": "", + "legendFormat": "Approvals ({{status}})", + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": true, + "expr": "sum(rate(polkadot_parachain_approvals_no_shows_total{chain=\"$chain\"}[$__rate_interval]))", + "hide": false, + "interval": "", + "legendFormat": "No shows", + "refId": "C" + } + ], + "title": "Assignments, approvals and no shows", + "transformations": [], + "type": "piechart" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$data_source" + }, + "description": "This covers the full time it takes to: recover candidate available data from other validators; check the candidate; issue statement or initiate dispute", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 75 + }, + "id": 12, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": true, + "expr": "histogram_quantile(0.95, sum(rate(polkadot_parachain_time_recover_and_approve_bucket{chain=\"$chain\"}[$__rate_interval])) by (le))", + "interval": "", + "legendFormat": "99th %", + "queryType": "randomWalk", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "expr": "histogram_quantile(0.5, sum(rate(polkadot_parachain_time_recover_and_approve_bucket{chain=\"$chain\"}[$__rate_interval])) by (le))", + "interval": "", + "legendFormat": "50th %", + "refId": "B" + } + ], + "title": "Time to Recover and Check Candidate", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$data_source" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "cps" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 75 + }, + "id": 8, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "multi" + } + }, + "pluginVersion": "8.2.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": false, + "expr": "sum(rate(polkadot_parachain_assignments_produced_count{chain=\"$chain\"}[$__rate_interval]))", + "format": "time_series", + "interval": "", + "legendFormat": "Assignments", + "queryType": "randomWalk", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "P5CA6DFE95AABF258" + }, + "exemplar": false, + "expr": "sum(rate(polkadot_parachain_approvals_produced_total{chain=\"$chain\"}[$__rate_interval])) by (status)", + "interval": "", + "legendFormat": "Approvals ({{status}})", + "refId": "B" + } + ], + "title": "Assignments and approvals", + "transformations": [], + "type": "timeseries" + } + ], + "refresh": "", + "schemaVersion": 34, + "style": "dark", + "tags": [ + "Kusama", + "Polkadot", + "Parachains", + "On-call" + ], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "prometheus.parity-mgmt", + "value": "prometheus.parity-mgmt" + }, + "hide": 0, + "includeAll": false, + "label": "Source of data", + "multi": false, + "name": "data_source", + "options": [], + "query": "prometheus", + "queryValue": "", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + }, + { + "current": { + "selected": false, + "text": "kusama", + "value": "kusama" + }, + "hide": 0, + "includeAll": false, + "label": "Chain", + "multi": false, + "name": "chain", + "options": [ + { + "selected": true, + "text": "kusama", + "value": "kusama" + }, + { + "selected": false, + "text": "polkadot", + "value": "polkadot" + } + ], + "query": "kusama,polkadot", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { + "from": "now-6h", + "to": "now" + }, + "timepicker": {}, + "timezone": "utc", + "title": "Parachains Liveliness", + "uid": "d10KsNXny", + "version": 62, + "weekStart": "" +} \ No newline at end of file