diff --git a/.gitignore b/.gitignore index 618bd01..78f4561 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,3 @@ -# for prometheus: -.prometheus - # builds: .builds /solana-exporter \ No newline at end of file diff --git a/README.md b/README.md index a26faf4..12d83d3 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,8 @@ solana-exporter \ -monitor-block-sizes ``` +![Solana Exporter Dashboard Sample](assets/solana-dashboard-screenshot.png) + ## Installation ### Build diff --git a/Solana-Dashboard.json b/Solana-Dashboard.json deleted file mode 100644 index 659f532..0000000 --- a/Solana-Dashboard.json +++ /dev/null @@ -1,571 +0,0 @@ -{ - "__inputs": [ - { - "name": "DS_MAIN_PROMETHEUS", - "label": "Main Prometheus", - "description": "", - "type": "datasource", - "pluginId": "prometheus", - "pluginName": "Prometheus" - } - ], - "__requires": [ - { - "type": "grafana", - "id": "grafana", - "name": "Grafana", - "version": "7.0.1" - }, - { - "type": "panel", - "id": "graph", - "name": "Graph", - "version": "" - }, - { - "type": "datasource", - "id": "prometheus", - "name": "Prometheus", - "version": "1.0.0" - } - ], - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "type": "dashboard" - } - ] - }, - "editable": true, - "gnetId": null, - "graphTooltip": 1, - "id": null, - "iteration": 1591625151288, - "links": [], - "panels": [ - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_MAIN_PROMETHEUS}", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 0 - }, - "hiddenSeries": false, - "id": 13, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": true, - "min": true, - "show": true, - "sort": "min", - "sortDesc": false, - "total": false, - "values": true - }, - "lines": false, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pluginVersion": "6.5.3", - "pointradius": 1, - "points": true, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "solana_validator_last_vote - on(service) group_left() max by(env, service) (solana_validator_last_vote{service=~\"$service\"}) > -500000", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "validator desync", - "tooltip": { - "shared": true, - "sort": 2, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": "100", - "min": "-400", - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_MAIN_PROMETHEUS}", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 12, - "y": 0 - }, - "hiddenSeries": false, - "id": 4, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "rate(max by(env, service) (solana_validator_last_vote{service=~\"$service\"})[1m:])", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "rate(max(last_voted))", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_MAIN_PROMETHEUS}", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 12, - "x": 0, - "y": 8 - }, - "hiddenSeries": false, - "id": 2, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "solana_active_validators{service=~\"$service\"}", - "legendFormat": "{{ state }}", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "active / delinquent", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_MAIN_PROMETHEUS}", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 6, - "x": 12, - "y": 8 - }, - "hiddenSeries": false, - "id": 8, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "max(solana_validator_root_slot{service=~\"$service\"})", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "max(root_slot)", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "none", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": "${DS_MAIN_PROMETHEUS}", - "fieldConfig": { - "defaults": { - "custom": {} - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 6, - "x": 18, - "y": 8 - }, - "hiddenSeries": false, - "id": 9, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "dataLinks": [] - }, - "percentage": false, - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "expr": "max(solana_validator_last_vote{service=~\"$service\"})", - "refId": "A" - } - ], - "thresholds": [], - "timeFrom": null, - "timeRegions": [], - "timeShift": null, - "title": "max(last_voted)", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "buckets": null, - "mode": "time", - "name": null, - "show": true, - "values": [] - }, - "yaxes": [ - { - "format": "none", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - }, - { - "format": "short", - "label": null, - "logBase": 1, - "max": null, - "min": null, - "show": true - } - ], - "yaxis": { - "align": false, - "alignLevel": null - } - } - ], - "refresh": "", - "schemaVersion": 25, - "style": "dark", - "tags": [], - "templating": { - "list": [ - { - "allValue": null, - "current": {}, - "datasource": "${DS_MAIN_PROMETHEUS}", - "definition": "label_values(solana_active_validators, service)", - "hide": 0, - "includeAll": true, - "label": null, - "multi": false, - "name": "service", - "options": [], - "query": "label_values(solana_active_validators, service)", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "tagValuesQuery": "", - "tags": [], - "tagsQuery": "", - "type": "query", - "useTags": false - } - ] - }, - "time": { - "from": "now-1h", - "to": "now" - }, - "timepicker": { - "refresh_intervals": [ - "10s", - "30s", - "1m", - "5m", - "15m", - "30m", - "1h", - "2h", - "1d" - ] - }, - "timezone": "", - "title": "Solana Exporter", - "uid": "fU8H9cmGz", - "version": 3 -} \ No newline at end of file diff --git a/assets/solana-dashboard-screenshot.png b/assets/solana-dashboard-screenshot.png new file mode 100644 index 0000000..6efe154 Binary files /dev/null and b/assets/solana-dashboard-screenshot.png differ diff --git a/prometheus/.gitignore b/prometheus/.gitignore new file mode 100644 index 0000000..249cda9 --- /dev/null +++ b/prometheus/.gitignore @@ -0,0 +1 @@ +/data \ No newline at end of file diff --git a/prometheus/README.md b/prometheus/README.md new file mode 100644 index 0000000..6e3f8a0 --- /dev/null +++ b/prometheus/README.md @@ -0,0 +1,9 @@ +# Solana Exporter: Example Prometheus Configuration +## Overview + +This directory contains: + * An example Prometheus configuration. + * Solana recording rules for tracking skip rate. + * An example Grafana dashboard. + +***NOTE***: None of these examples are required - custom tailored configurations are encouraged! diff --git a/prometheus/prometheus.yml b/prometheus/prometheus.yml new file mode 100644 index 0000000..e5d0279 --- /dev/null +++ b/prometheus/prometheus.yml @@ -0,0 +1,13 @@ +global: + scrape_interval: 30s + +rule_files: + - 'solana-rules.yml' + +scrape_configs: + - job_name: 'solana-exporter' + static_configs: + - targets: ['localhost:8080'] + labels: + app: 'solana' + hostname: 'my-host.name' \ No newline at end of file diff --git a/prometheus/solana-dashboard.json b/prometheus/solana-dashboard.json new file mode 100644 index 0000000..ac56f74 --- /dev/null +++ b/prometheus/solana-dashboard.json @@ -0,0 +1,2829 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 6, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 72, + "panels": [], + "title": "Fleet Overview", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [] + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 0, + "y": 1 + }, + "id": 52, + "options": { + "legend": { + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "pieType": "pie", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${ds}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "count by (app, version) (solana_node_version{app=\"$chain_name\"})", + "format": "time_series", + "instant": true, + "legendFormat": "{{ app }} {{version}}", + "range": false, + "refId": "A" + } + ], + "title": "Solana Versions", + "type": "piechart" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "0": { + "color": "red", + "index": 0, + "text": "Down" + } + }, + "type": "value" + } + ], + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "orange", + "value": 80 + }, + { + "color": "yellow", + "value": 90 + }, + { + "color": "green", + "value": 95 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 20, + "x": 4, + "y": 1 + }, + "id": 58, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${ds}" + }, + "editorMode": "code", + "expr": "avg_over_time(up{app=\"$chain_name\", job=\"solana-exporter\"}[$__range])", + "legendFormat": "{{hostname}}", + "range": true, + "refId": "A" + } + ], + "title": "Nodes Availability", + "transformations": [ + { + "id": "renameByRegex", + "options": { + "regex": "/(.*):8080/", + "renamePattern": "$1" + } + } + ], + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "green", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 24, + "x": 0, + "y": 7 + }, + "id": 73, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "editorMode": "code", + "expr": "solana_node_is_healthy{app=\"$chain_name\"}", + "legendFormat": "{{hostname}}", + "range": true, + "refId": "A" + } + ], + "title": "Nodes Health", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "description": "Solana client software version running on the node.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "fixed" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": true, + "inspect": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "instance" + }, + "properties": [ + { + "id": "custom.width", + "value": 395 + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 12 + }, + "id": 54, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "enablePagination": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "frameIndex": 5, + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "version" + } + ] + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${ds}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "solana_node_version{app=\"$chain_name\"}", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "{{hostname}}", + "range": false, + "refId": "A" + } + ], + "title": "Solana Client Versions", + "transformations": [ + { + "disabled": true, + "id": "filterFieldsByName", + "options": { + "include": { + "names": [ + "version", + "hostname" + ] + } + } + }, + { + "id": "groupBy", + "options": { + "fields": { + "hostname": { + "aggregations": [], + "operation": "groupby" + }, + "instance": { + "aggregations": [] + }, + "version": { + "aggregations": [], + "operation": "groupby" + } + } + } + }, + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "field": "version" + } + ] + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "description": "Number of slots that the node is behind.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 12 + }, + "id": 56, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "min", + "max", + "mean", + "firstNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${ds}" + }, + "editorMode": "code", + "expr": "solana_node_num_slots_behind{app=\"$chain_name\"}", + "interval": "", + "legendFormat": "{{hostname}}", + "range": true, + "refId": "A" + } + ], + "title": "Solana Behind", + "transformations": [ + { + "id": "renameByRegex", + "options": { + "regex": "(.*):8080.*", + "renamePattern": "$1" + } + } + ], + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 19 + }, + "id": 69, + "panels": [], + "title": "Validator Performance", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "description": "Rate at which the validator produces blocks (and skips slots) per minute.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "opm" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/skipped/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E02F44", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 80 + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": "/valid/" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#56A64B", + "mode": "fixed" + } + }, + { + "id": "custom.lineWidth", + "value": 2 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 20 + }, + "id": 20, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "max", + "min", + "mean", + "firstNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${ds}" + }, + "editorMode": "code", + "expr": "60 * sum by (nodekey, status) (rate(\n solana_validator_leader_slots_by_epoch_total{app=\"$chain_name\", hostname=\"$host\", nodekey=\"$nodekey\"}[1h])\n)", + "interval": "", + "legendFormat": "{{nodekey}} / {{status}}", + "range": true, + "refId": "A" + } + ], + "title": "Validator Block Production Rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "description": "Total number of transactions per block.", + "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", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 20 + }, + "id": 65, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "min", + "max", + "mean", + "firstNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "editorMode": "code", + "expr": "sum by (transaction_type) (solana_validator_block_size{app=\"$chain_name\", hostname=\"$host\", nodekey=\"$nodekey\"})", + "legendFormat": "{{transaction_type}}", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "editorMode": "code", + "expr": "sum(solana_validator_block_size{app=\"$chain_name\", hostname=\"$host\", nodekey=\"$nodekey\"})", + "hide": false, + "instant": false, + "legendFormat": "total", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "editorMode": "code", + "expr": "increase(solana_node_transactions_total{app=\"$chain_name\", hostname=\"$host\"}[5m]) / increase(solana_node_slot_height{app=\"$chain_name\", hostname=\"$host\"}[5m])", + "hide": false, + "instant": false, + "legendFormat": "cluster average (5min)", + "range": true, + "refId": "C" + } + ], + "title": "Validator Block Size", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "description": "The distance from the configured nodekey's root slot to the maximum observed root slot.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Slots" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 28 + }, + "id": 18, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "max", + "min", + "mean", + "firstNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${ds}" + }, + "editorMode": "code", + "exemplar": true, + "expr": "max(solana_validator_root_slot{app=\"$chain_name\", hostname=\"$host\"}) - sum(solana_validator_root_slot{app=\"$chain_name\", hostname=\"$host\", nodekey=\"$nodekey\"})", + "interval": "", + "legendFormat": "$nodekey", + "range": true, + "refId": "A" + } + ], + "title": "Validator Root Slot Slack Distance", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "description": "Skip rate grouped by epoch, similar to validators.app", + "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", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 28 + }, + "id": 83, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "min", + "max", + "mean", + "firstNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "editorMode": "code", + "expr": "100 * solana:cluster_epoch_skip_rate{hostname=\"$host\"}", + "legendFormat": "cluster", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "editorMode": "code", + "expr": "100 * solana:validator_epoch_skip_rate{hostname=\"$host\", nodekey=\"$nodekey\"}", + "hide": false, + "instant": false, + "legendFormat": "{{nodekey}}", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "editorMode": "code", + "expr": "100 * avg_over_time(solana:cluster_epoch_skip_rate{hostname=\"$host\"}[1d])", + "hide": false, + "instant": false, + "legendFormat": "1d - cluster", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "editorMode": "code", + "expr": "100 * avg_over_time(solana:validator_epoch_skip_rate{hostname=\"$host\", nodekey=\"$nodekey\"}[1d])", + "hide": false, + "instant": false, + "legendFormat": "1d - {{nodekey}}", + "range": true, + "refId": "D" + } + ], + "title": "Epoch Skip Rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "description": "The distance between the highest on-chain last vote slot, and the configured nodekey's last vote slot.", + "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", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 37 + }, + "id": 81, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "min", + "max", + "mean", + "firstNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "editorMode": "code", + "expr": "max(solana_validator_last_vote{app=\"$chain_name\", hostname=\"$host\"}) - max(solana_validator_last_vote{app=\"$chain_name\", hostname=\"$host\", nodekey=\"$nodekey\"})", + "legendFormat": "$nodekey", + "range": true, + "refId": "A" + } + ], + "title": "Validator Vote Slack Distance", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "description": "Average skip rate over a running window.", + "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", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "1h - cluster" + }, + "properties": [ + { + "id": "custom.lineStyle", + "value": { + "dash": [ + 10, + 10 + ], + "fill": "dash" + } + }, + { + "id": "color", + "value": { + "fixedColor": "dark-yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "1h - Certusm1sa411sMpV9FPqU5dXAYhmmhygvxJ23S6hJ24" + }, + "properties": [ + { + "id": "custom.lineStyle", + "value": { + "dash": [ + 10, + 10 + ], + "fill": "dash" + } + }, + { + "id": "color", + "value": { + "fixedColor": "dark-blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "1d - cluster" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "1d - Certusm1sa411sMpV9FPqU5dXAYhmmhygvxJ23S6hJ24" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 37 + }, + "id": 71, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "min", + "max", + "mean", + "firstNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "editorMode": "code", + "expr": "100 * solana:cluster_hour_skip_rate{hostname=\"$host\"}", + "hide": false, + "instant": false, + "legendFormat": "1h - cluster", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "editorMode": "code", + "expr": "100 * solana:validator_hour_skip_rate{hostname=\"$host\", nodekey=\"$nodekey\"}", + "hide": false, + "instant": false, + "legendFormat": "1h - $nodekey", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "editorMode": "code", + "expr": "100 * solana:cluster_day_skip_rate{hostname=\"$host\"}", + "hide": false, + "instant": false, + "legendFormat": "1d - cluster", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "editorMode": "code", + "expr": "100 * solana:validator_day_skip_rate{hostname=\"$host\", nodekey=\"$nodekey\"}", + "hide": false, + "instant": false, + "legendFormat": "1d - $nodekey", + "range": true, + "refId": "D" + } + ], + "title": "Running Skip Rate", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 46 + }, + "id": 67, + "panels": [], + "title": "Validator Rewards & Balances", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "description": "Total validator stake, in SOL", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "k SOL" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 7, + "x": 0, + "y": 47 + }, + "id": 64, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "editorMode": "code", + "expr": "solana_validator_active_stake{app=\"$chain_name\", hostname=\"$host\", nodekey=\"$nodekey\"} / 1000", + "legendFormat": "{{nodekey}}", + "range": true, + "refId": "A" + } + ], + "title": "Validator Active Stake", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "SOL" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 17, + "x": 7, + "y": 47 + }, + "id": 68, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "editorMode": "code", + "expr": "solana_account_balance{app=\"$chain_name\", hostname=\"$host\"}", + "legendFormat": "{{address}}", + "range": true, + "refId": "A" + } + ], + "title": "Current SOL Balances", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "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", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "k SOL" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 54 + }, + "id": 82, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "min", + "max", + "mean", + "firstNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "editorMode": "code", + "expr": "sum(solana_validator_active_stake{app=\"$chain_name\", hostname=\"$host\", nodekey=\"$nodekey\"}) / 1000", + "legendFormat": "$nodekey", + "range": true, + "refId": "A" + } + ], + "title": "Active Stake Over Time", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "description": "Balance (in SOL) of monitored Solana addresses.", + "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", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "SOL" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 54 + }, + "id": 66, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "min", + "max", + "mean", + "firstNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "editorMode": "code", + "expr": "solana_account_balance{app=\"$chain_name\", hostname=\"$host\"}", + "legendFormat": "{{address}}", + "range": true, + "refId": "A" + } + ], + "title": "Solana Account Balances", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "description": "Solana transaction fee rewards earned by tracked validators.", + "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", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "SOL" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 62 + }, + "id": 78, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "min", + "max", + "mean", + "firstNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "editorMode": "code", + "expr": "sum by (nodekey, epoch) (solana_validator_fee_rewards_total{app=\"$chain_name\", hostname=\"$host\"})", + "legendFormat": "{{epoch}} / {{nodekey}}", + "range": true, + "refId": "A" + } + ], + "title": "Fee Rewards", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "description": "Hourly average amount of fee lamports earned per transaction.", + "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", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Lamports" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 62 + }, + "id": 79, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "min", + "max", + "mean", + "firstNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "editorMode": "code", + "expr": "1e9 * \nsum by (nodekey) (increase(solana_validator_fee_rewards_total{app=\"$chain_name\", hostname=\"$host\"}[1h]))\n/\nsum by (nodekey) (sum_over_time(solana_validator_block_size{app=\"$chain_name\", hostname=\"$host\"}[1h]))", + "hide": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "WIP: Lamports Per Transaction", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "description": "Solana transaction fee rewards (in SOL) earned in different epochs.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 70 + }, + "id": 80, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "editorMode": "code", + "expr": "sum by (epoch, nodekey) (solana_validator_fee_rewards_total{app=\"$chain_name\", hostname=\"$host\"})", + "format": "table", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Solana Fee Rewards", + "transformations": [ + { + "id": "groupBy", + "options": { + "fields": { + "Value": { + "aggregations": [ + "last" + ], + "operation": "aggregate" + }, + "epoch": { + "aggregations": [], + "operation": "groupby" + }, + "nodekey": { + "aggregations": [], + "operation": "groupby" + } + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "description": "Solana Inflation rewards (in SOL) for different epochs.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 70 + }, + "id": 76, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "editorMode": "code", + "exemplar": false, + "expr": "sum by (epoch, votekey) (solana_validator_inflation_rewards_total{app=\"$chain_name\", hostname=\"$host\"})", + "format": "table", + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Solana Inflation Rewards", + "transformations": [ + { + "id": "groupBy", + "options": { + "fields": { + "Time": { + "aggregations": [] + }, + "Value": { + "aggregations": [ + "last" + ], + "operation": "aggregate" + }, + "epoch": { + "aggregations": [], + "operation": "groupby" + }, + "votekey": { + "aggregations": [], + "operation": "groupby" + } + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 78 + }, + "id": 74, + "panels": [], + "title": "Cluster Overview", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 79 + }, + "id": 50, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${ds}" + }, + "editorMode": "code", + "expr": "solana_node_epoch_number{app=\"$chain_name\", hostname=\"$host\"}", + "interval": "", + "legendFormat": "epoch", + "range": true, + "refId": "A" + } + ], + "title": "Current Epoch", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "description": "How far the cluster is through the current epoch.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 6, + "y": 79 + }, + "id": 75, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "editorMode": "code", + "expr": "100 * (solana_node_slot_height{app=\"$chain_name\", hostname=\"$host\"} - solana_node_epoch_first_slot{app=\"$chain_name\", hostname=\"$host\"}) / \n(solana_node_epoch_last_slot{app=\"$chain_name\", hostname=\"$host\"} - solana_node_epoch_first_slot{app=\"$chain_name\", hostname=\"$host\"} + 1)", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Epoch Progress", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*total.*/" + }, + "properties": [ + { + "id": "custom.lineStyle", + "value": { + "dash": [ + 10, + 10 + ], + "fill": "dash" + } + } + ] + } + ] + }, + "gridPos": { + "h": 11, + "w": 12, + "x": 12, + "y": 79 + }, + "id": 2, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "min", + "max", + "mean", + "firstNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${ds}" + }, + "editorMode": "code", + "expr": "count (solana_validator_delinquent{app=\"$chain_name\", hostname=\"$host\"} == 1)", + "interval": "", + "legendFormat": "delinquent", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "editorMode": "code", + "expr": "count (solana_validator_delinquent{app=\"$chain_name\", hostname=\"$host\"} == 0)", + "hide": false, + "instant": false, + "legendFormat": "active", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "editorMode": "code", + "expr": "count (solana_validator_delinquent{app=\"$chain_name\", hostname=\"$host\"})", + "hide": false, + "instant": false, + "legendFormat": "total", + "range": true, + "refId": "C" + } + ], + "title": "Cluster Validators: Active/Delinquent", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "description": "Average time between slots.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 85 + }, + "id": 24, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "min", + "max", + "mean", + "firstNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${ds}" + }, + "editorMode": "code", + "expr": "1000 / (rate(solana_node_slot_height{app=\"$chain_name\"}[30m]) > 0)", + "interval": "", + "legendFormat": "{{ hostname }}", + "queryType": "randomWalk", + "range": true, + "refId": "A" + } + ], + "title": "Slot Time", + "transformations": [ + { + "id": "renameByRegex", + "options": { + "regex": "/(.*):8080/", + "renamePattern": "$1" + } + } + ], + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "bars", + "fillOpacity": 100, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 90 + }, + "id": 8, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "max", + "min", + "mean", + "firstNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${ds}" + }, + "editorMode": "code", + "exemplar": true, + "expr": "rate(solana_node_transactions_total{app=\"$chain_name\", hostname=~\"$host\"}[$__rate_interval]) < 10000", + "interval": "", + "legendFormat": "{{ hostname }}", + "range": true, + "refId": "A" + } + ], + "title": "Transactions/s", + "transformations": [ + { + "id": "renameByRegex", + "options": { + "regex": "/(.*):8080/", + "renamePattern": "$1" + } + } + ], + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "description": "Rolling cluster skip rate with different window lengths.", + "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", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 90 + }, + "id": 77, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "min", + "max", + "mean", + "firstNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0-pre", + "targets": [ + { + "editorMode": "code", + "expr": "100 * solana:cluster_hour_skip_rate", + "legendFormat": "1-hour", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "editorMode": "code", + "expr": "100 * solana:cluster_day_skip_rate", + "hide": false, + "instant": false, + "legendFormat": "1-day", + "range": true, + "refId": "B" + } + ], + "title": "Cluster Skip Rate", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "", + "schemaVersion": 40, + "tags": [], + "templating": { + "list": [ + { + "current": { + "text": "solana", + "value": "solana" + }, + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "definition": "label_values(solana_node_version,app)", + "includeAll": false, + "label": "Chain", + "name": "chain_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(solana_node_version,app)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "sort": 2, + "type": "query" + }, + { + "current": { + "text": "Certusm1sa411sMpV9FPqU5dXAYhmmhygvxJ23S6hJ24", + "value": "Certusm1sa411sMpV9FPqU5dXAYhmmhygvxJ23S6hJ24" + }, + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "definition": "label_values(solana_validator_delinquent,nodekey)", + "includeAll": false, + "label": "Nodekey", + "name": "nodekey", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(solana_validator_delinquent,nodekey)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "sort": 2, + "type": "query" + }, + { + "current": { + "text": "my-host.name", + "value": "my-host.name" + }, + "datasource": { + "type": "prometheus", + "uid": "fe2dataaouznkf" + }, + "definition": "label_values(solana_node_version,hostname)", + "description": "Select a host to view cluster-stats from. \n\nNOTE: Make sure this host is running without light mode.", + "includeAll": false, + "label": "Host", + "name": "host", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(solana_node_version,hostname)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "sort": 1, + "type": "query" + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Solana - AR Exporter test", + "uid": "_0xtvsHVz", + "version": 4, + "weekStart": "" +} \ No newline at end of file diff --git a/prometheus/solana-rules.yml b/prometheus/solana-rules.yml new file mode 100644 index 0000000..4abeddb --- /dev/null +++ b/prometheus/solana-rules.yml @@ -0,0 +1,22 @@ +groups: + - name: solana_recording_rules + interval: 30s + rules: + - record: solana:cluster_epoch_skip_rate + expr: |- + sum by (hostname, epoch) (solana_cluster_slots_by_epoch_total{app="solana",status="skipped"}) / sum by (hostname, epoch) (solana_cluster_slots_by_epoch_total{app="solana"}) + - record: solana:validator_epoch_skip_rate + expr: |- + sum by (hostname, epoch, nodekey) (solana_validator_leader_slots_by_epoch_total{app="solana",status="skipped"}) / sum by (hostname, epoch, nodekey) (solana_validator_leader_slots_by_epoch_total{app="solana"}) + - record: solana:cluster_hour_skip_rate + expr: |- + sum by (hostname) (increase(solana_validator_leader_slots_total{app="solana",status="skipped"}[1h])) / sum by (hostname) (increase(solana_validator_leader_slots_total{app="solana"}[1h])) + - record: solana:cluster_day_skip_rate + expr: |- + sum by (hostname) (increase(solana_validator_leader_slots_total{app="solana",status="skipped"}[1d])) / sum by (hostname) (increase(solana_validator_leader_slots_total{app="solana"}[1d])) + - record: solana:validator_hour_skip_rate + expr: |- + sum by (hostname, nodekey) (increase(solana_validator_leader_slots_total{app="solana",status="skipped"}[1h])) / sum by (hostname, nodekey) (increase(solana_validator_leader_slots_total{app="solana"}[1h])) + - record: solana:validator_day_skip_rate + expr: |- + sum by (hostname, nodekey) (increase(solana_validator_leader_slots_total{app="solana",status="skipped"}[1d])) / sum by (hostname, nodekey) (increase(solana_validator_leader_slots_total{app="solana"}[1d])) \ No newline at end of file