From b422c9261e4af8a87de2895f8a8df69884d2eea3 Mon Sep 17 00:00:00 2001 From: Joe Clapis Date: Sat, 14 Aug 2021 01:03:11 -0400 Subject: [PATCH 01/14] Added validator metrics and metrics for Prysm, moved some ports --- .../network/prater/chains/eth1/start-node.sh | 2 +- .../prater/chains/eth2/start-beacon.sh | 6 ++++++ .../prater/chains/eth2/start-validator.sh | 14 ++++++++++--- .../network/prater/config.yml | 21 ++++++++++++------- .../network/prater/docker-compose-metrics.yml | 6 +++--- .../network/prater/docker-compose.yml | 4 +++- .../network/prater/prometheus.tmpl | 10 ++++++--- .../prater/chains/eth2/start-beacon.sh | 8 ++++++- .../prater/chains/eth2/start-validator.sh | 14 ++++++++++--- .../network/prater/config.yml | 21 ++++++++++++------- .../network/prater/docker-compose-metrics.yml | 6 +++--- .../network/prater/docker-compose.yml | 4 +++- .../network/prater/prometheus.tmpl | 10 ++++++--- 13 files changed, 88 insertions(+), 38 deletions(-) diff --git a/amd64/rp-smartnode-install/network/prater/chains/eth1/start-node.sh b/amd64/rp-smartnode-install/network/prater/chains/eth1/start-node.sh index 51093b88..4878a5df 100755 --- a/amd64/rp-smartnode-install/network/prater/chains/eth1/start-node.sh +++ b/amd64/rp-smartnode-install/network/prater/chains/eth1/start-node.sh @@ -39,7 +39,7 @@ fi # Pocket startup if [ "$CLIENT" = "pocket" ]; then - exec /go/bin/rocketpool-pow-proxy --httpPort 8545 --network eth-goerli --projectId $POCKET_PROJECT_ID --providerType pocket + exec /go/bin/rocketpool-pow-proxy --httpPort 8545 --network eth-goerli --projectId $POCKET_PROJECT_ID --providerType pocket fi diff --git a/amd64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh b/amd64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh index 17a1d053..369b6691 100755 --- a/amd64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh +++ b/amd64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh @@ -60,6 +60,12 @@ if [ "$CLIENT" = "prysm" ]; then CMD="$CMD --p2p-max-peers $ETH2_MAX_PEERS" fi + if [ "$ENABLE_METRICS" -eq "1" ]; then + CMD="$CMD --monitoring-host 0.0.0.0 --monitoring-port $ETH2_METRICS_PORT" + else + CMD="$CMD --disable-monitoring" + fi + exec ${CMD} fi diff --git a/amd64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh b/amd64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh index f278a794..1f91704c 100755 --- a/amd64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh +++ b/amd64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh @@ -12,7 +12,7 @@ fi # Lighthouse startup if [ "$CLIENT" = "lighthouse" ]; then - exec /usr/local/bin/lighthouse validator --network prater --datadir /validators/lighthouse --init-slashing-protection --beacon-node "http://$ETH2_PROVIDER" --graffiti "$GRAFFITI" + exec /usr/local/bin/lighthouse validator --network prater --datadir /validators/lighthouse --init-slashing-protection --beacon-node "$ETH2_PROVIDER" --graffiti "$GRAFFITI" fi @@ -35,7 +35,15 @@ if [ "$CLIENT" = "prysm" ]; then # Get rid of the protocol prefix ETH2_PROVIDER=$(echo $ETH2_PROVIDER | sed -E 's/.*\:\/\/(.*)/\1/') - exec /app/cmd/validator/validator --accept-terms-of-use --prater --wallet-dir /validators/prysm-non-hd --wallet-password-file /validators/prysm-non-hd/direct/accounts/secret --beacon-rpc-provider "$ETH2_PROVIDER" --graffiti "$GRAFFITI" + CMD="/app/cmd/validator/validator --accept-terms-of-use --prater --wallet-dir /validators/prysm-non-hd --wallet-password-file /validators/prysm-non-hd/direct/accounts/secret --beacon-rpc-provider $ETH2_PROVIDER" + + if [ "$ENABLE_METRICS" -eq "1" ]; then + CMD="$CMD --monitoring-host 0.0.0.0 --monitoring-port $VALIDATOR_METRICS_PORT" + else + CMD="$CMD --disable-account-metrics" + fi + + exec ${CMD} --graffiti "$GRAFFITI" fi @@ -43,7 +51,7 @@ fi # Teku startup if [ "$CLIENT" = "teku" ]; then - exec /opt/teku/bin/teku validator-client --network=prater --validator-keys=/validators/teku/keys:/validators/teku/passwords --beacon-node-api-endpoint="http://$ETH2_PROVIDER" --validators-graffiti="$GRAFFITI" + exec /opt/teku/bin/teku validator-client --network=prater --validator-keys=/validators/teku/keys:/validators/teku/passwords --beacon-node-api-endpoint="$ETH2_PROVIDER" --validators-graffiti="$GRAFFITI" fi diff --git a/amd64/rp-smartnode-install/network/prater/config.yml b/amd64/rp-smartnode-install/network/prater/config.yml index 3dcca593..8a7608de 100644 --- a/amd64/rp-smartnode-install/network/prater/config.yml +++ b/amd64/rp-smartnode-install/network/prater/config.yml @@ -219,20 +219,25 @@ metrics: - name: ETH2 Metrics Port desc: The port for the Beacon Chain client to make its metrics available on env: ETH2_METRICS_PORT - blankText: the default of 8008 - default: 8008 + blankText: the default of 9100 + default: 9100 + - name: Validator Metrics Port + desc: The port for the Validator client to make its metrics available on + env: VALIDATOR_METRICS_PORT + blankText: the default of 9101 + default: 9101 type: uint16 - name: Rocket Pool Node Metrics Port desc: The port for the Rocket Pool Node to make its metrics available on env: NODE_METRICS_PORT - blankText: the default of 8009 - default: 8009 + blankText: the default of 9102 + default: 9102 type: uint16 - name: Node Exporter Metrics Port desc: The port for Prometheus's Node Exporter to make its metrics available on env: EXPORTER_METRICS_PORT - blankText: the default of 9101 - default: 9101 + blankText: the default of 9103 + default: 9103 type: uint16 - name: Prometheus Port desc: The port for Prometheus to make its metrics available on @@ -243,6 +248,6 @@ metrics: - name: Grafana Port desc: The port for Grafana to listen on for HTTP requests env: GRAFANA_PORT - blankText: the default of 3001 - default: 3001 + blankText: the default of 3100 + default: 3100 type: uint16 \ No newline at end of file diff --git a/amd64/rp-smartnode-install/network/prater/docker-compose-metrics.yml b/amd64/rp-smartnode-install/network/prater/docker-compose-metrics.yml index 8325fb09..80499010 100644 --- a/amd64/rp-smartnode-install/network/prater/docker-compose-metrics.yml +++ b/amd64/rp-smartnode-install/network/prater/docker-compose-metrics.yml @@ -11,7 +11,7 @@ services: - "--path.procfs=/host/proc" - "--path.sysfs=/host/sys" - "--collector.textfile.directory=/host/textfile_collector" - - "--web.listen-address=:${EXPORTER_METRICS_PORT:-9101}" + - "--web.listen-address=:${EXPORTER_METRICS_PORT:-9103}" volumes: - /proc:/host/proc:ro,rslave - /sys:/host/sys:ro,rslave @@ -37,9 +37,9 @@ services: container_name: ${COMPOSE_PROJECT_NAME}_grafana restart: unless-stopped environment: - - GF_SERVER_HTTP_PORT=${GRAFANA_PORT:-3001} + - GF_SERVER_HTTP_PORT=${GRAFANA_PORT:-3100} ports: - - "${GRAFANA_PORT:-3001}:${GRAFANA_PORT:-3001}/tcp" + - "${GRAFANA_PORT:-3100}:${GRAFANA_PORT:-3100}/tcp" volumes: - "grafana-storage:/var/lib/grafana" networks: diff --git a/amd64/rp-smartnode-install/network/prater/docker-compose.yml b/amd64/rp-smartnode-install/network/prater/docker-compose.yml index 3ddfec38..bbc2243f 100644 --- a/amd64/rp-smartnode-install/network/prater/docker-compose.yml +++ b/amd64/rp-smartnode-install/network/prater/docker-compose.yml @@ -71,6 +71,8 @@ services: - ETH2_PROVIDER=${ETH2_PROVIDER} - CUSTOM_GRAFFITI=${CUSTOM_GRAFFITI} - ROCKET_POOL_VERSION=${ROCKET_POOL_VERSION} + - ENABLE_METRICS=${ENABLE_METRICS} + - VALIDATOR_METRICS_PORT=${VALIDATOR_METRICS_PORT} entrypoint: sh command: "/setup/start-validator.sh" depends_on: @@ -98,7 +100,7 @@ services: - .:/.rocketpool networks: - net - command: "-m 0.0.0.0 -r ${NODE_METRICS_PORT:-8009} node" + command: "-m 0.0.0.0 -r ${NODE_METRICS_PORT:-9102} node" depends_on: - eth1 - eth2 diff --git a/amd64/rp-smartnode-install/network/prater/prometheus.tmpl b/amd64/rp-smartnode-install/network/prater/prometheus.tmpl index 4e92521f..ed7e23ca 100644 --- a/amd64/rp-smartnode-install/network/prater/prometheus.tmpl +++ b/amd64/rp-smartnode-install/network/prater/prometheus.tmpl @@ -13,14 +13,18 @@ scrape_configs: static_configs: # node-exporter is on the host network so it can get access to the actual machine's network info # We have to use 'hosts.docker.internal' to refer to it due to this configuration - - targets: ['host.docker.internal:${NODE_EXPORTER_PORT:-9101}'] + - targets: ['host.docker.internal:${NODE_EXPORTER_PORT:-9103}'] - job_name: 'eth2' static_configs: - - targets: ['eth2:${ETH2_METRICS_PORT:-8008}'] + - targets: ['eth2:${ETH2_METRICS_PORT:-9100}'] + + - job_name: 'validator' + static_configs: + - targets: ['validator:${VALIDATOR_METRICS_PORT:-9101}'] - job_name: 'rocketpool' scrape_interval: 5m scrape_timeout: 5m static_configs: - - targets: ['node:${NODE_METRICS_PORT:-8009}'] \ No newline at end of file + - targets: ['node:${NODE_METRICS_PORT:-9102}'] \ No newline at end of file diff --git a/arm64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh b/arm64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh index bf5c06ac..369b6691 100755 --- a/arm64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh +++ b/arm64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh @@ -48,7 +48,7 @@ fi # Prysm startup if [ "$CLIENT" = "prysm" ]; then - + # Get Prater SSZ if [ ! -f "/validators/genesis.ssz" ]; then wget "https://github.com/eth2-clients/eth2-networks/raw/master/shared/prater/genesis.ssz" -O "/validators/genesis.ssz" @@ -60,6 +60,12 @@ if [ "$CLIENT" = "prysm" ]; then CMD="$CMD --p2p-max-peers $ETH2_MAX_PEERS" fi + if [ "$ENABLE_METRICS" -eq "1" ]; then + CMD="$CMD --monitoring-host 0.0.0.0 --monitoring-port $ETH2_METRICS_PORT" + else + CMD="$CMD --disable-monitoring" + fi + exec ${CMD} fi diff --git a/arm64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh b/arm64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh index f278a794..1f91704c 100755 --- a/arm64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh +++ b/arm64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh @@ -12,7 +12,7 @@ fi # Lighthouse startup if [ "$CLIENT" = "lighthouse" ]; then - exec /usr/local/bin/lighthouse validator --network prater --datadir /validators/lighthouse --init-slashing-protection --beacon-node "http://$ETH2_PROVIDER" --graffiti "$GRAFFITI" + exec /usr/local/bin/lighthouse validator --network prater --datadir /validators/lighthouse --init-slashing-protection --beacon-node "$ETH2_PROVIDER" --graffiti "$GRAFFITI" fi @@ -35,7 +35,15 @@ if [ "$CLIENT" = "prysm" ]; then # Get rid of the protocol prefix ETH2_PROVIDER=$(echo $ETH2_PROVIDER | sed -E 's/.*\:\/\/(.*)/\1/') - exec /app/cmd/validator/validator --accept-terms-of-use --prater --wallet-dir /validators/prysm-non-hd --wallet-password-file /validators/prysm-non-hd/direct/accounts/secret --beacon-rpc-provider "$ETH2_PROVIDER" --graffiti "$GRAFFITI" + CMD="/app/cmd/validator/validator --accept-terms-of-use --prater --wallet-dir /validators/prysm-non-hd --wallet-password-file /validators/prysm-non-hd/direct/accounts/secret --beacon-rpc-provider $ETH2_PROVIDER" + + if [ "$ENABLE_METRICS" -eq "1" ]; then + CMD="$CMD --monitoring-host 0.0.0.0 --monitoring-port $VALIDATOR_METRICS_PORT" + else + CMD="$CMD --disable-account-metrics" + fi + + exec ${CMD} --graffiti "$GRAFFITI" fi @@ -43,7 +51,7 @@ fi # Teku startup if [ "$CLIENT" = "teku" ]; then - exec /opt/teku/bin/teku validator-client --network=prater --validator-keys=/validators/teku/keys:/validators/teku/passwords --beacon-node-api-endpoint="http://$ETH2_PROVIDER" --validators-graffiti="$GRAFFITI" + exec /opt/teku/bin/teku validator-client --network=prater --validator-keys=/validators/teku/keys:/validators/teku/passwords --beacon-node-api-endpoint="$ETH2_PROVIDER" --validators-graffiti="$GRAFFITI" fi diff --git a/arm64/rp-smartnode-install/network/prater/config.yml b/arm64/rp-smartnode-install/network/prater/config.yml index efa008a9..b6dde832 100644 --- a/arm64/rp-smartnode-install/network/prater/config.yml +++ b/arm64/rp-smartnode-install/network/prater/config.yml @@ -222,20 +222,25 @@ metrics: - name: ETH2 Metrics Port desc: The port for the Beacon Chain client to make its metrics available on env: ETH2_METRICS_PORT - blankText: the default of 8008 - default: 8008 + blankText: the default of 9100 + default: 9100 + - name: Validator Metrics Port + desc: The port for the Validator client to make its metrics available on + env: VALIDATOR_METRICS_PORT + blankText: the default of 9101 + default: 9101 type: uint16 - name: Rocket Pool Node Metrics Port desc: The port for the Rocket Pool Node to make its metrics available on env: NODE_METRICS_PORT - blankText: the default of 8009 - default: 8009 + blankText: the default of 9102 + default: 9102 type: uint16 - name: Node Exporter Metrics Port desc: The port for Prometheus's Node Exporter to make its metrics available on env: EXPORTER_METRICS_PORT - blankText: the default of 9101 - default: 9101 + blankText: the default of 9103 + default: 9103 type: uint16 - name: Prometheus Port desc: The port for Prometheus to make its metrics available on @@ -246,6 +251,6 @@ metrics: - name: Grafana Port desc: The port for Grafana to listen on for HTTP requests env: GRAFANA_PORT - blankText: the default of 3001 - default: 3001 + blankText: the default of 3100 + default: 3100 type: uint16 \ No newline at end of file diff --git a/arm64/rp-smartnode-install/network/prater/docker-compose-metrics.yml b/arm64/rp-smartnode-install/network/prater/docker-compose-metrics.yml index 8325fb09..80499010 100644 --- a/arm64/rp-smartnode-install/network/prater/docker-compose-metrics.yml +++ b/arm64/rp-smartnode-install/network/prater/docker-compose-metrics.yml @@ -11,7 +11,7 @@ services: - "--path.procfs=/host/proc" - "--path.sysfs=/host/sys" - "--collector.textfile.directory=/host/textfile_collector" - - "--web.listen-address=:${EXPORTER_METRICS_PORT:-9101}" + - "--web.listen-address=:${EXPORTER_METRICS_PORT:-9103}" volumes: - /proc:/host/proc:ro,rslave - /sys:/host/sys:ro,rslave @@ -37,9 +37,9 @@ services: container_name: ${COMPOSE_PROJECT_NAME}_grafana restart: unless-stopped environment: - - GF_SERVER_HTTP_PORT=${GRAFANA_PORT:-3001} + - GF_SERVER_HTTP_PORT=${GRAFANA_PORT:-3100} ports: - - "${GRAFANA_PORT:-3001}:${GRAFANA_PORT:-3001}/tcp" + - "${GRAFANA_PORT:-3100}:${GRAFANA_PORT:-3100}/tcp" volumes: - "grafana-storage:/var/lib/grafana" networks: diff --git a/arm64/rp-smartnode-install/network/prater/docker-compose.yml b/arm64/rp-smartnode-install/network/prater/docker-compose.yml index 3ddfec38..bbc2243f 100644 --- a/arm64/rp-smartnode-install/network/prater/docker-compose.yml +++ b/arm64/rp-smartnode-install/network/prater/docker-compose.yml @@ -71,6 +71,8 @@ services: - ETH2_PROVIDER=${ETH2_PROVIDER} - CUSTOM_GRAFFITI=${CUSTOM_GRAFFITI} - ROCKET_POOL_VERSION=${ROCKET_POOL_VERSION} + - ENABLE_METRICS=${ENABLE_METRICS} + - VALIDATOR_METRICS_PORT=${VALIDATOR_METRICS_PORT} entrypoint: sh command: "/setup/start-validator.sh" depends_on: @@ -98,7 +100,7 @@ services: - .:/.rocketpool networks: - net - command: "-m 0.0.0.0 -r ${NODE_METRICS_PORT:-8009} node" + command: "-m 0.0.0.0 -r ${NODE_METRICS_PORT:-9102} node" depends_on: - eth1 - eth2 diff --git a/arm64/rp-smartnode-install/network/prater/prometheus.tmpl b/arm64/rp-smartnode-install/network/prater/prometheus.tmpl index 4e92521f..ed7e23ca 100644 --- a/arm64/rp-smartnode-install/network/prater/prometheus.tmpl +++ b/arm64/rp-smartnode-install/network/prater/prometheus.tmpl @@ -13,14 +13,18 @@ scrape_configs: static_configs: # node-exporter is on the host network so it can get access to the actual machine's network info # We have to use 'hosts.docker.internal' to refer to it due to this configuration - - targets: ['host.docker.internal:${NODE_EXPORTER_PORT:-9101}'] + - targets: ['host.docker.internal:${NODE_EXPORTER_PORT:-9103}'] - job_name: 'eth2' static_configs: - - targets: ['eth2:${ETH2_METRICS_PORT:-8008}'] + - targets: ['eth2:${ETH2_METRICS_PORT:-9100}'] + + - job_name: 'validator' + static_configs: + - targets: ['validator:${VALIDATOR_METRICS_PORT:-9101}'] - job_name: 'rocketpool' scrape_interval: 5m scrape_timeout: 5m static_configs: - - targets: ['node:${NODE_METRICS_PORT:-8009}'] \ No newline at end of file + - targets: ['node:${NODE_METRICS_PORT:-9102}'] \ No newline at end of file From 68d4d6c64e112b52efefcf7ee12ac61188a7c1e3 Mon Sep 17 00:00:00 2001 From: Joe Clapis Date: Mon, 16 Aug 2021 01:02:43 -0400 Subject: [PATCH 02/14] Added metrics to LH, added the dashboards --- ... Pool Dashboard v1.0.0 for Lighthouse.json | 3769 ++++++++++++++++ ...cket Pool Dashboard v1.0.0 for Nimbus.json | 3785 ++++++++++++++++ ...ocket Pool Dashboard v1.0.0 for Prysm.json | 3796 +++++++++++++++++ .../prater/chains/eth2/start-beacon.sh | 6 +- .../prater/chains/eth2/start-validator.sh | 8 +- .../network/prater/version-check.sh | 8 +- .../prater/chains/eth2/start-beacon.sh | 6 +- .../prater/chains/eth2/start-validator.sh | 8 +- .../network/prater/version-check.sh | 8 +- 9 files changed, 11382 insertions(+), 12 deletions(-) create mode 100644 Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json create mode 100644 Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json create mode 100644 Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json diff --git a/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json b/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json new file mode 100644 index 00000000..0f98bc14 --- /dev/null +++ b/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json @@ -0,0 +1,3769 @@ +{ + "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" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": 4, + "iteration": 1629089543563, + "links": [], + "panels": [ + { + "datasource": null, + "gridPos": { + "h": 1, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 163, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "title": "Hardware Stats", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "gridPos": { + "h": 1, + "w": 9, + "x": 13, + "y": 0 + }, + "id": 165, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "title": "Validator Stats", + "transparent": true, + "type": "text" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "A count of how long Lighthouse's Beacon Chain client has been running. If you don't restart it, this is about the same as your total system uptime.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(212, 212, 212)", + "value": null + } + ] + }, + "unit": "dtdhms" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 0, + "y": 1 + }, + "id": 40, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "time() - process_start_time_seconds{job=\"eth2\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Beacon Client Uptime", + "type": "stat" + }, + { + "datasource": null, + "description": "This will turn red when you system needs to be rebooted because of security updates.\n\nSetting this up is Operating System specific, so it doesn't come ready out of the box; see the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "0": { + "color": "transparent", + "index": 1, + "text": "No" + }, + "1": { + "color": "red", + "index": 0, + "text": "Reboot Required" + } + }, + "type": "value" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 3, + "y": 1 + }, + "id": 224, + "options": { + "colorMode": "background", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_reboot_required{job=\"node\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Reboot Needed?", + "type": "stat" + }, + { + "datasource": null, + "description": "Tracks any updates that are available for your OS or for Rocket Pool but haven't been applied yet. When one of these numbers is higher than 0, it means you should update your system or Rocket Pool accordingly.\n\nSetting this up is Operating System specific, so it doesn't come ready out of the box; see the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + }, + { + "color": "red", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 6, + "y": 1 + }, + "id": 94, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "max(apt_upgrades_pending{job=\"node\"})", + "interval": "", + "legendFormat": "OS", + "refId": "A" + }, + { + "exemplar": true, + "expr": "max(rocketpool_version_update{job=\"node\"})", + "hide": false, + "interval": "", + "legendFormat": "Rocket Pool", + "refId": "B" + } + ], + "title": "Available Updates", + "type": "stat" + }, + { + "datasource": null, + "description": "How much of your total swap space you're currently using. If you have swap space enabled, you want this to be as low as possible - otherwise, your system is running out of free RAM.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 20 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 9, + "y": 1 + }, + "id": 92, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "((node_memory_SwapTotal_bytes{job=\"node\"} - node_memory_SwapFree_bytes{job=\"node\"}) / node_memory_SwapTotal_bytes{job=\"node\"})", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Swap Space Usage", + "type": "gauge" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "Tracks the activity of all of your validators on the Beacon Chain. This is a cumulative count; it starts at 0 when Lighthouse first starts up, and then continuously increments as it goes.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 3, + "x": 13, + "y": 1 + }, + "id": 13, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "vc_signed_attestations_total{job=\"validator\", status=\"success\"} OR on() vector(0)", + "hide": false, + "interval": "", + "legendFormat": "Attestations", + "refId": "B" + }, + { + "exemplar": true, + "expr": "vc_signed_beacon_blocks_total{job=\"validator\", status=\"success\"} OR on() vector(0)", + "interval": "", + "legendFormat": "Proposals", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Validator Activity", + "type": "stat" + }, + { + "datasource": null, + "description": "Tracks the activity of all of your validators on the Beacon Chain.", + "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": "stepAfter", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 1, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 16, + "y": 1 + }, + "id": 30, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "(rate(vc_signed_beacon_blocks_total{job=\"validator\", status=\"success\"}[$__rate_interval])) * 45 OR on() vector(0)", + "hide": false, + "interval": "", + "legendFormat": "Proposal", + "refId": "A" + }, + { + "exemplar": true, + "expr": "(rate(vc_signed_attestations_total{job=\"validator\", status=\"success\"}[$__rate_interval])) * 45 OR on() vector(0)", + "interval": "", + "legendFormat": "Attestation", + "refId": "B" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Validator Activity", + "type": "timeseries" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "The total CPU usage of Lighthouse's Beacon Chain and Validator clients combined, with respect to all cores on your CPU.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "semi-dark-blue", + "value": null + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 0, + "y": 5 + }, + "id": 8, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "(sum(avg (irate(process_cpu_seconds_total{job=\"eth2\"}[$__rate_interval]))) + sum(avg (irate(process_cpu_seconds_total{job=\"validator\"}[$__rate_interval])))) * 100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Lighthouse CPU", + "type": "stat" + }, + { + "datasource": null, + "description": "The total CPU usage of your machine, with respect to all cores.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 2, + "y": 5 + }, + "id": 66, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "1 - avg (irate(node_cpu_seconds_total{job=\"node\", mode=\"idle\"}[$__rate_interval]))", + "interval": "", + "legendFormat": "Core {{cpu}}", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Total CPU", + "type": "stat" + }, + { + "datasource": null, + "description": "Your CPU's current clock speed (averaged across all cores)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "yellow", + "value": null + } + ] + }, + "unit": "hertz" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 4, + "y": 5 + }, + "id": 78, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "avg(node_cpu_frequency_max_hertz{job=\"node\"})", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "CPU Speed", + "type": "stat" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "The amount of RAM that the Lighthouse Beacon Chain and Validator clients are using together.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 6, + "y": 5 + }, + "id": 6, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "sum(process_resident_memory_bytes{job=\"eth2\"}) + sum(process_resident_memory_bytes{job=\"validator\"})", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Lighthouse RAM", + "type": "stat" + }, + { + "datasource": null, + "description": "The total amount of RAM that your system is currently using.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 8, + "y": 5 + }, + "id": 62, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_memory_MemTotal_bytes{job=\"node\"} - node_memory_MemAvailable_bytes{job=\"node\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Used RAM", + "type": "stat" + }, + { + "datasource": null, + "description": "The total amount of RAM that your system has installed.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-yellow", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 5 + }, + "id": 64, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_memory_MemTotal_bytes{job=\"node\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total RAM", + "type": "stat" + }, + { + "cards": { + "cardPadding": null, + "cardRound": null + }, + "color": { + "cardColor": "#b4ff00", + "colorScale": "sqrt", + "colorScheme": "interpolateOranges", + "exponent": 0.5, + "mode": "opacity" + }, + "dataFormat": "tsbuckets", + "datasource": null, + "description": "This tracks the delay between when you sent an attestation and your peers on the Beacon Chain network reported receiving it. Ideally, you want most of them to report that they received it within 4 seconds - otherwise you may be penalized for being late.", + "gridPos": { + "h": 6, + "w": 6, + "x": 16, + "y": 5 + }, + "heatmap": {}, + "hideZeroBuckets": true, + "highlightCards": true, + "id": 26, + "interval": "", + "legend": { + "show": false + }, + "pluginVersion": "8.1.1", + "reverseYBuckets": true, + "targets": [ + { + "exemplar": true, + "expr": "sum(rate (validator_monitor_attestation_in_aggregate_delay_seconds_bucket{job=\"eth2\", src=\"gossip\"}[$__rate_interval])) without (validator)", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "{{le}}", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Attestation Delay", + "tooltip": { + "show": true, + "showHistogram": false + }, + "transformations": [], + "type": "heatmap", + "xAxis": { + "show": true + }, + "xBucketNumber": null, + "xBucketSize": null, + "yAxis": { + "decimals": null, + "format": "s", + "logBase": 1, + "max": null, + "min": null, + "show": true, + "splitFactor": null + }, + "yBucketBound": "auto", + "yBucketNumber": null, + "yBucketSize": null + }, + { + "datasource": null, + "description": "The time until your next attestation.\n\n**NOTE: Lighthouse does not currently expose this metric, so this is a placeholder until its developers add it.**", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "color": "text", + "index": 0, + "text": "Not Implemented" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 13, + "y": 7 + }, + "id": 154, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Next Attestation", + "type": "stat" + }, + { + "datasource": null, + "description": "The temperature of your CPU (you can set this to Tctl or Tdie, whichever you prefer to monitor).\n\nTo get the correct chip and sensor ID, you'll want to run `sensors` from the `lm-sensors` package. See the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 65 + } + ] + }, + "unit": "celsius" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 0, + "y": 8 + }, + "id": 82, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_hwmon_temp_celsius{job=\"node\", chip=\"\", sensor=\"\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "CPU Temp", + "type": "stat" + }, + { + "datasource": null, + "description": "Tracks the total amount of RAM usage by the eth2 client and the entire system, versus how much is available.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "decbytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Used" + }, + "properties": [ + { + "id": "custom.fillOpacity", + "value": 70 + }, + { + "id": "custom.lineWidth", + "value": 4 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Beacon (eth2) Client" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#3274D9", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 70 + }, + { + "id": "custom.lineWidth", + "value": 4 + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 6, + "y": 8 + }, + "id": 60, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_memory_MemTotal_bytes{job=\"node\"} - node_memory_MemAvailable_bytes{job=\"node\"}", + "interval": "", + "legendFormat": "Used", + "refId": "A" + }, + { + "exemplar": true, + "expr": "node_memory_MemTotal_bytes{job=\"node\"}", + "hide": false, + "interval": "", + "legendFormat": "Total", + "refId": "B" + }, + { + "exemplar": true, + "expr": "sum(process_resident_memory_bytes{job=\"eth2\"}) + sum(process_resident_memory_bytes{job=\"validator\"})", + "hide": false, + "interval": "", + "legendFormat": "Lighthouse", + "refId": "C" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "RAM Usage", + "type": "timeseries" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "How many peers Lighthouse is currently connected to on the Beacon Chain.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 50, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "#EAB839", + "value": 20 + }, + { + "color": "green", + "value": 40 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 13, + "y": 10 + }, + "id": 12, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "sync_peers_per_status{job=\"eth2\", sync_status=\"Synced\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Peers", + "type": "gauge" + }, + { + "datasource": null, + "description": "How many peers Lighthouse is currently connected to for Beacon Chain traffic.", + "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" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 16, + "y": 11 + }, + "id": 51, + "options": { + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "sync_peers_per_status{job=\"eth2\", sync_status=\"Synced\"}", + "interval": "", + "legendFormat": "", + "refId": "B" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Peers", + "type": "timeseries" + }, + { + "datasource": null, + "description": "Tracks the amount of CPU consumption for the eth2 client and the total system. 100% means all of your CPU core are being used at their full capacity. The yellow line indicates how much CPU a single core can provide in your system.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "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": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Single Core Cap" + }, + "properties": [ + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.lineWidth", + "value": 2 + }, + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Lighthouse" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#3274D9", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 0, + "y": 12 + }, + "id": 56, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "(1 - avg by (instance) (irate(node_cpu_seconds_total{job=\"node\", mode=\"idle\"}[$__rate_interval]))) * 100", + "hide": false, + "interval": "", + "legendFormat": "Total", + "refId": "B" + }, + { + "exemplar": true, + "expr": "(sum(avg (irate(process_cpu_seconds_total{job=\"eth2\"}[$__rate_interval]))) + sum(avg (irate(process_cpu_seconds_total{job=\"validator\"}[$__rate_interval])))) * 100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", + "instant": false, + "interval": "", + "legendFormat": "Lighthouse", + "refId": "A" + }, + { + "exemplar": true, + "expr": "100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "Single Core Cap", + "refId": "C" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "CPU Usage", + "type": "timeseries" + }, + { + "datasource": null, + "description": "The disk space used by your primary (Operating System) hard drive. Change the `device` option in this query to be your machine's hard drive.\n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 0.75 + }, + { + "color": "red", + "value": 0.9 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 6, + "y": 14 + }, + "id": 88, + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "(node_filesystem_size_bytes{job=\"node\", device=\"\", mountpoint=\"/\"} - node_filesystem_avail_bytes{job=\"node\", device=\"\", mountpoint=\"/\"}) / node_filesystem_size_bytes{job=\"node\", device=\"\", mountpoint=\"/\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "OS Disk Space Used", + "type": "gauge" + }, + { + "datasource": null, + "description": "An optional space monitor for a second disk or partition on your system. If you store your chain data on a separate drive or partition from your OS (such as with a Raspberry Pi), you can configure this to track that disk. Just modify the `device` setting in the query with your storage partition's path.\n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 0.75 + }, + { + "color": "red", + "value": 0.9 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 9, + "y": 14 + }, + "id": 90, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "(node_filesystem_size_bytes{job=\"node\", device=\"\"} - node_filesystem_avail_bytes{job=\"node\", device=\"\"}) / node_filesystem_size_bytes{job=\"node\", device=\"\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Disk 2 Space Used", + "type": "gauge" + }, + { + "datasource": null, + "description": "", + "gridPos": { + "h": 1, + "w": 9, + "x": 13, + "y": 15 + }, + "id": 184, + "options": { + "content": "
s", + "mode": "html" + }, + "pluginVersion": "8.1.1", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "gridPos": { + "h": 1, + "w": 9, + "x": 13, + "y": 16 + }, + "id": 212, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "title": "Beacon Chain Rewards (Updates Every 5 Minutes)", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "The average read/write latency of your SSD. The lower it is, the faster your machine can process and respond to Beacon Chain activities like attesting. Change the `device` setting in the queries to be the SSD you want to track (typically the one with your chain data on it).\n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "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": 4, + "w": 6, + "x": 0, + "y": 17 + }, + "id": 70, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "irate(node_disk_write_time_seconds_total{job=\"node\", device=\"\"}[$__rate_interval]) / irate(node_disk_writes_completed_total{job=\"node\", device=\"\"}[$__rate_interval])", + "hide": false, + "interval": "", + "legendFormat": "Write", + "refId": "B" + }, + { + "exemplar": true, + "expr": "irate(node_disk_read_time_seconds_total{job=\"node\", device=\"\"}[$__rate_interval]) / irate(node_disk_reads_completed_total{job=\"node\", device=\"\"}[$__rate_interval])", + "interval": "", + "legendFormat": "Read", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "SSD Latency", + "type": "timeseries" + }, + { + "datasource": null, + "description": "The total ETH balance of all of your Rocket Pool validators on the Beacon Chain.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 5, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + }, + "unit": "ETH" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 13, + "y": 17 + }, + "id": 72, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_beacon_balance{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total Validator Balance", + "type": "stat" + }, + { + "datasource": null, + "description": "The total amount of ETH you've earned on the Beacon Chain by running a Rocket Pool node. This is equal to your total share of the rewards, minus the 16 ETH you deposited for each minipool.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 4, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ETH" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 3, + "x": 16, + "y": 17 + }, + "id": 204, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_beacon_share{job=\"rocketpool\"} - rocketpool_node_deposited_eth{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Your Beacon Chain Earnings", + "type": "stat" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "The raw APR from the Beacon Chain across all of your validators. This is what you would get if you were solo staking all of your validators.\n\nCalculated by comparing today's balance with yesterday's balance.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#F2495C", + "value": null + }, + { + "color": "#FADE2A", + "value": 0 + }, + { + "color": "blue", + "value": 0.0001 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 19, + "y": 17 + }, + "id": 152, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "((rocketpool_node_beacon_balance{job=\"rocketpool\"}) - (rocketpool_node_beacon_balance{job=\"rocketpool\"} offset 1d != 0)) / 32 * 365", + "hide": false, + "interval": "", + "legendFormat": "annualized daily return", + "refId": "B" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Solo Staking APR", + "type": "stat" + }, + { + "datasource": null, + "description": "A chart showing the network I/O used by your main network adapter over time. To make it work, change the `device` setting in the queries to match the name of the network adapter you want to track (you can use `ifconfig` to get a list of network adapters and find the right one). \n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "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": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 6, + "y": 19 + }, + "id": 80, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "irate(node_network_transmit_bytes_total{job=\"node\", device=\"\"}[$__rate_interval])", + "hide": false, + "interval": "", + "legendFormat": "Tx", + "refId": "B" + }, + { + "exemplar": true, + "expr": "irate(node_network_receive_bytes_total{job=\"node\", device=\"\"}[$__rate_interval])", + "interval": "", + "legendFormat": "Rx", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Network Usage", + "type": "timeseries" + }, + { + "datasource": null, + "description": "The total network I/O that has gone through your main network adapter. To make it work, change the `device` setting in the queries to match the name of the network adapter you want to track (you can use `ifconfig` to get a list of network adapters and find the right one). \n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 2, + "x": 10, + "y": 19 + }, + "id": 74, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_network_transmit_bytes_total{job=\"node\", device=\"\"}", + "hide": false, + "interval": "", + "legendFormat": "Tx", + "refId": "B" + }, + { + "exemplar": true, + "expr": "node_network_receive_bytes_total{job=\"node\", device=\"\"}", + "interval": "", + "legendFormat": "Rx", + "refId": "A" + } + ], + "title": "Total Net I/O", + "type": "stat" + }, + { + "datasource": null, + "description": "This is how much ETH you will receive if you exit all of your validators on the Beacon Chain; it's your share of the total balance for each Rocket Pool minipool.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 4, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ETH" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 13, + "y": 20 + }, + "id": 210, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_beacon_share{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Your Validator Share", + "type": "stat" + }, + { + "datasource": null, + "description": "Your APR from Beacon Chain rewards, which includes the your minipool's commission.\n\nCalculated by comparing today's balance with yesterday's balance.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 19, + "y": 20 + }, + "id": 206, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "((rocketpool_node_beacon_share{job=\"rocketpool\"}) - (rocketpool_node_beacon_share{job=\"rocketpool\"} offset 1d != 0)) / rocketpool_node_deposited_eth{job=\"rocketpool\"} * 365", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Your Validator APR", + "type": "stat" + }, + { + "datasource": null, + "description": "This tracks how long it takes between one of your processes trying to read from / write to your SSD, and when that operation is actually performed. Think of this like \"how long SSD reads and writes have to wait in a queue before completing\". The longer this time, the longer it takes for your node to perform its Beacon Chain duties.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "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": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 0, + "y": 21 + }, + "id": 76, + "options": { + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "irate(node_pressure_io_waiting_seconds_total{job=\"node\"}[$__rate_interval])", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "I/O Wait Time", + "type": "timeseries" + }, + { + "datasource": null, + "gridPos": { + "h": 1, + "w": 9, + "x": 13, + "y": 23 + }, + "id": 186, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "title": "RPL Rewards (Updates Every 5 Minutes)", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "The time of the next RPL rewards checkpoint. If you have an effective RPL stake greater than zero, you should receive rewards here (unless it's your first checkpoint, in which case you'll need to wait a bit longer).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "text", + "value": null + } + ] + }, + "unit": "dateTimeAsLocalNoDateIfToday" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 5, + "x": 13, + "y": 24 + }, + "id": 218, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_rpl_checkpoint_time{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Next RPL Rewards Checkpoint", + "type": "stat" + }, + { + "datasource": null, + "description": "This tracks how long you have until the next RPL rewards checkpoint.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "text", + "value": null + } + ] + }, + "unit": "dateTimeFromNow" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 18, + "y": 24 + }, + "id": 216, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_rpl_checkpoint_time{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Next RPL Rewards Checkpoint", + "type": "stat" + }, + { + "datasource": null, + "gridPos": { + "h": 1, + "w": 12, + "x": 0, + "y": 25 + }, + "id": 170, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "gridPos": { + "h": 1, + "w": 12, + "x": 0, + "y": 26 + }, + "id": 158, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "title": "Rocket Pool Network Stats (Updates Every 5 Minutes)", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "The total amount of ETH locked on the Rocket Pool network, including staked RPL (but not including Beacon Chain rewards).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + }, + "unit": "ETH" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 0, + "y": 27 + }, + "id": 156, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_demand_deposit_pool_balance{job=\"rocketpool\"} + rocketpool_demand_total_minipool_capacity{job=\"rocketpool\"} + rocketpool_supply_active_minipools{job=\"rocketpool\"} * 32 + rocketpool_rpl_total_value_staked{job=\"rocketpool\"} * rocketpool_rpl_rpl_price{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total ETH Locked", + "type": "stat" + }, + { + "datasource": null, + "description": "The total amount of RPL staked across all node operators in the Rocket Pool network.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "RPL" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 4, + "y": 27 + }, + "id": 214, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_rpl_total_value_staked{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total RPL Staked", + "type": "stat" + }, + { + "datasource": null, + "description": "The total *effective* RPL stake across all node operators on the Rocket Pool network. This accounts for the 150% collateral cap per minipool. If this number is lower than the Total RPL Staked, then some node operators have gone above 150%.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "RPL" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 8, + "y": 27 + }, + "id": 182, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_rpl_total_effective_staked{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total Effective RPL Staked", + "type": "stat" + }, + { + "datasource": null, + "description": "The approximate amount of RPL you'll receive at the next checkpoint, based on your current effective stake and how much RPL is staked on the entire network.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "RPL" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 13, + "y": 28 + }, + "id": 198, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_expected_rpl_rewards{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Approx. Rewards from Next Checkpoint", + "type": "stat" + }, + { + "datasource": null, + "description": "How much \"effective\" RPL you have staked (capped at 150% per minipool).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "RPL" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 17, + "y": 28 + }, + "id": 190, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_effective_staked_rpl{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Effective RPL Staked", + "type": "stat" + }, + { + "datasource": null, + "description": "The amount of RPL you were rewarded that you haven't claimed yet. Normally your node checks for these every 5 minutes and claims them automatically, so if this number persists for a long time then something may be wrong.\n\nPlease see https://docs.rocketpool.net/guides/node/rewards.html for more info on claiming rewards.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + }, + { + "color": "red", + "value": 0.001 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 20, + "y": 28 + }, + "id": 222, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_unclaimed_rewards{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Unclaimed RPL", + "type": "stat" + }, + { + "datasource": null, + "description": "The APR for your RPL stake, based on the rewards you will receive at the next checkpoint.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 13, + "y": 31 + }, + "id": 194, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_rpl_apr{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "APR for Next RPL Checkpoint", + "type": "stat" + }, + { + "datasource": null, + "description": "Your total staked RPL collateral. At 10%, you have 1.6 ETH worth of RPL per minipool; at 150% you have 24 ETH worth of RPL per minipool.\n\nIf you fall below 10% you won't be able to claim your rewards at the next checkpoint until you get back to 10%. If you go over 150%, you'll only be rewarded for the first 150% of your stake.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "max": 1.5, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "green", + "value": 0.1 + }, + { + "color": "red", + "value": 1.5 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 17, + "y": 31 + }, + "id": 196, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_total_staked_rpl{job=\"rocketpool\"} * rocketpool_rpl_rpl_price{job=\"rocketpool\"} / rocketpool_node_deposited_eth{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "RPL Collateral", + "type": "gauge" + }, + { + "datasource": null, + "description": "The amount of ETH that 1 rETH is worth.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 6, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "purple", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 0, + "y": 32 + }, + "id": 178, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_performance_eth_reth_exchange_rate{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "rETH Price (ETH / rETH)", + "type": "stat" + }, + { + "datasource": null, + "description": "The amount of ETH that 1 RPL is worth, as reported by the Oracle DAO. This updates somewhat infrequently, so it's expected if it falls out of sync with other price watchers.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 6, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 3, + "y": 32 + }, + "id": 180, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_rpl_rpl_price{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "RPL Price (ETH / RPL)", + "type": "stat" + }, + { + "datasource": null, + "description": "The relative amount of ETH that was deposited into the staking pool by rETH stakers, which was then used by node operators to create new minipools with validators on the Beacon Chain. The closer this number is to 100%, the more efficiently the Rocket Pool network is operating and the faster rETH's price grows.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "#EAB839", + "value": 0.2 + }, + { + "color": "green", + "value": 0.5 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Value" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 6, + "y": 32 + }, + "id": 168, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": true, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_performance_eth_utilization_rate{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Staking Pool ETH Used", + "type": "gauge" + }, + { + "datasource": null, + "description": "The amount of ETH currently in the staking pool, waiting to be used by node operators to create new minipools.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 5000, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 4000 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 9, + "y": 32 + }, + "id": 160, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": true, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_demand_deposit_pool_balance{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Staking Pool Balance", + "type": "gauge" + }, + { + "datasource": null, + "description": "The total amount of RPL you've earned from RPL rewards for the entire life of your node.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "RPL" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 13, + "y": 34 + }, + "id": 192, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_cumulative_rpl_rewards", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total RPL Rewards Earned", + "type": "stat" + }, + { + "datasource": null, + "description": "The total number of nodes that have registered on the Rocket Pool network.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 37 + }, + "id": 172, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "value" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_supply_node_count{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Node Count", + "type": "stat" + }, + { + "datasource": null, + "description": "A breakdown of the counts of each minipool on the Rocket Pool network by status:\n\n- **Initialized**: waiting for a deposit still\n- **Prelaunch:** deposits are done, waiting to be staked by the node operator's `rocketpool_node` container \n- **Staking:** deposited, validator created, and active (or pending) on the Beacon Chain\n- **Dissolved:** staking failed, funds returned to the node operator and staking pool\n- **Withdrawable:** exited from the Beacon Chain, waiting for rewards to be withdrawn to the minipool\n- **Finalized:** exited, withdrawn from, and essentially closed (inactive)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [] + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "staking" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "initialized" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "finalized" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "dissolved" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "prelaunch" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "withdrawable" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "dark-orange", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 3, + "y": 37 + }, + "id": 176, + "options": { + "legend": { + "displayMode": "table", + "placement": "right", + "values": [ + "value" + ] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_supply_minipool_count{job=\"rocketpool\"}", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{status}}", + "refId": "A" + } + ], + "title": "Minipools by Status", + "type": "piechart" + }, + { + "datasource": null, + "description": "The current commission for new minipools. If you created a minipool right now, this is the commission it would be assigned for its entire lifespan.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "max": 0.2, + "min": 0.05, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "green", + "value": 0.1 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 8, + "y": 37 + }, + "id": 208, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_supply_node_fee{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Current Commission", + "type": "gauge" + }, + { + "datasource": null, + "description": "The balances of your node wallet (only tracks Rocket Pool tokens). Keep an eye on how much ETH you have; if it falls too low, your node won't be able to pay for gas during automatic RPL reward claims or other transactions.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "center", + "displayMode": "auto", + "filterable": false + }, + "decimals": 6, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 9, + "x": 13, + "y": 37 + }, + "id": 200, + "options": { + "showHeader": true + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_balance{job=\"rocketpool\"}", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "{{Token}}", + "refId": "A" + } + ], + "title": "Node Wallet Balances", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "__name__": true, + "instance": true, + "job": true + }, + "indexByName": {}, + "renameByName": {} + } + } + ], + "type": "table" + }, + { + "datasource": null, + "description": "The total number of Rocket Pool minipools (validators) that are active (not exited and withdrawn from the Beacon Chain).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 40 + }, + "id": 174, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_supply_active_minipools{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Active Minipools", + "type": "stat" + } + ], + "refresh": "30s", + "schemaVersion": 30, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "allValue": null, + "current": { + "selected": false, + "text": "eth2:9100", + "value": "eth2:9100" + }, + "datasource": "Prometheus", + "definition": "label_values(process_virtual_memory_bytes,instance)", + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "instance", + "options": [], + "query": { + "query": "label_values(process_virtual_memory_bytes,instance)", + "refId": "Prometheus-instance-Variable-Query" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "Rocket Pool Dashboard v1.0.0 for Lighthouse", + "uid": "Ur22GG77z2", + "version": 16 +} \ No newline at end of file diff --git a/Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json b/Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json new file mode 100644 index 00000000..4ea3913c --- /dev/null +++ b/Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json @@ -0,0 +1,3785 @@ +{ + "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" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": 6, + "iteration": 1629061153211, + "links": [], + "panels": [ + { + "datasource": null, + "gridPos": { + "h": 1, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 163, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "title": "Hardware Stats", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "gridPos": { + "h": 1, + "w": 9, + "x": 13, + "y": 0 + }, + "id": 165, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "title": "Validator Stats", + "transparent": true, + "type": "text" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "A count of how long Nimbus has been running. If you don't restart it, this is about the same as your total system uptime.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(212, 212, 212)", + "value": null + } + ] + }, + "unit": "dtdhms" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 0, + "y": 1 + }, + "id": 40, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "time() - process_start_time_seconds{job=\"eth2\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Beacon Client Uptime", + "type": "stat" + }, + { + "datasource": null, + "description": "This will turn red when you system needs to be rebooted because of security updates.\n\nSetting this up is Operating System specific, so it doesn't come ready out of the box; see the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "0": { + "color": "transparent", + "index": 1, + "text": "No" + }, + "1": { + "color": "red", + "index": 0, + "text": "Reboot Required" + } + }, + "type": "value" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 3, + "y": 1 + }, + "id": 224, + "options": { + "colorMode": "background", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_reboot_required{job=\"node\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Reboot Needed?", + "type": "stat" + }, + { + "datasource": null, + "description": "Tracks any updates that are available for your OS or for Rocket Pool but haven't been applied yet. When one of these numbers is higher than 0, it means you should update your system or Rocket Pool accordingly.\n\nSetting this up is Operating System specific, so it doesn't come ready out of the box; see the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + }, + { + "color": "red", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 6, + "y": 1 + }, + "id": 94, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "max(apt_upgrades_pending{job=\"node\"})", + "interval": "", + "legendFormat": "OS", + "refId": "A" + }, + { + "exemplar": true, + "expr": "max(rocketpool_version_update{job=\"node\"})", + "hide": false, + "interval": "", + "legendFormat": "Rocket Pool", + "refId": "B" + } + ], + "title": "Available Updates", + "type": "stat" + }, + { + "datasource": null, + "description": "How much of your total swap space you're currently using. If you have swap space enabled, you want this to be as low as possible - otherwise, your system is running out of free RAM.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 20 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 9, + "y": 1 + }, + "id": 92, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "((node_memory_SwapTotal_bytes{job=\"node\"} - node_memory_SwapFree_bytes{job=\"node\"}) / node_memory_SwapTotal_bytes{job=\"node\"})", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Swap Space Usage", + "type": "gauge" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "Tracks the activity of all of your validators on the Beacon Chain. This is a cumulative count; it starts at 0 when Nimbus first starts up, and then continuously increments as it goes.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 3, + "x": 13, + "y": 1 + }, + "id": 13, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "sum(beacon_attestations_sent_total{job=\"eth2\"}) OR on() vector(0)", + "hide": false, + "interval": "", + "legendFormat": "Attestations", + "refId": "B" + }, + { + "exemplar": true, + "expr": "sum(beacon_blocks_proposed_total{job=\"eth2\"}) OR on() vector(0)", + "interval": "", + "legendFormat": "Proposals", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Validator Activity", + "type": "stat" + }, + { + "datasource": null, + "description": "Tracks the activity of all of your validators on the Beacon Chain.", + "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": "stepAfter", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 1, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 16, + "y": 1 + }, + "id": 30, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "sum(rate(beacon_blocks_proposed_total{job=\"eth2\"}[$__rate_interval])) * 45 OR on() vector(0)", + "hide": false, + "interval": "", + "legendFormat": "Proposal", + "refId": "A" + }, + { + "exemplar": true, + "expr": "sum(rate(beacon_attestations_sent_total{job=\"eth2\"}[$__rate_interval])) * 45 OR on() vector(0)", + "hide": false, + "interval": "", + "legendFormat": "Attestation", + "refId": "B" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Validator Activity", + "type": "timeseries" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "The total CPU usage of Nimbus with respect to all cores on your CPU.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "semi-dark-blue", + "value": null + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 0, + "y": 5 + }, + "id": 8, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "sum(avg (irate(process_cpu_seconds_total{job=\"eth2\"}[$__rate_interval]))) * 100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Nimbus CPU", + "type": "stat" + }, + { + "datasource": null, + "description": "The total CPU usage of your machine, with respect to all cores.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 2, + "y": 5 + }, + "id": 66, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "1 - avg (irate(node_cpu_seconds_total{job=\"node\", mode=\"idle\"}[$__rate_interval]))", + "interval": "", + "legendFormat": "Core {{cpu}}", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Total CPU", + "type": "stat" + }, + { + "datasource": null, + "description": "Your CPU's current clock speed (averaged across all cores)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "yellow", + "value": null + } + ] + }, + "unit": "hertz" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 4, + "y": 5 + }, + "id": 78, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "avg(node_cpu_frequency_max_hertz{job=\"node\"})", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "CPU Speed", + "type": "stat" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "The amount of RAM that Nimbus is using.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 6, + "y": 5 + }, + "id": 6, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "sum(process_resident_memory_bytes{job=\"eth2\"})", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Nimbus RAM", + "type": "stat" + }, + { + "datasource": null, + "description": "The total amount of RAM that your system is currently using.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 8, + "y": 5 + }, + "id": 62, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_memory_MemTotal_bytes{job=\"node\"} - node_memory_MemAvailable_bytes{job=\"node\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Used RAM", + "type": "stat" + }, + { + "datasource": null, + "description": "The total amount of RAM that your system has installed.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-yellow", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 5 + }, + "id": 64, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_memory_MemTotal_bytes{job=\"node\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total RAM", + "type": "stat" + }, + { + "cards": { + "cardPadding": null, + "cardRound": null + }, + "color": { + "cardColor": "#b4ff00", + "colorScale": "linear", + "colorScheme": "interpolateOranges", + "exponent": 0.5, + "mode": "opacity" + }, + "dataFormat": "tsbuckets", + "datasource": null, + "description": "This tracks how long it took for your attestations to be sent to the Beacon Chain. Anything below 0 seconds (down to -4) is good; anything over means it took longer than the 4-second window, and your attestation may have a larger inclusion distance which could result in lower overall rewards for that attestation.", + "gridPos": { + "h": 6, + "w": 6, + "x": 16, + "y": 5 + }, + "heatmap": {}, + "hideZeroBuckets": true, + "highlightCards": true, + "id": 26, + "interval": "", + "legend": { + "show": false + }, + "pluginVersion": "8.1.1", + "reverseYBuckets": true, + "targets": [ + { + "exemplar": true, + "expr": "rate(beacon_attestation_sent_delay_bucket{job=\"eth2\"}[$__rate_interval])", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "{{le}}", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Attestation Delay", + "tooltip": { + "show": true, + "showHistogram": false + }, + "transformations": [ + { + "id": "filterFieldsByName", + "options": { + "include": { + "names": [ + "-0.05", + "-0.1", + "-0.5", + "-1.0", + "-2.0", + "-4.0", + "0.05", + "0.1", + "0.5", + "1.0", + "2.0", + "4.0", + "8.0", + "Time" + ] + } + } + } + ], + "type": "heatmap", + "xAxis": { + "show": true + }, + "xBucketNumber": null, + "xBucketSize": null, + "yAxis": { + "decimals": null, + "format": "short", + "logBase": 1, + "max": null, + "min": null, + "show": true, + "splitFactor": null + }, + "yBucketBound": "auto", + "yBucketNumber": null, + "yBucketSize": null + }, + { + "datasource": null, + "description": "The time until your next attestation.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "0": { + "color": "text", + "index": 0, + "text": "None Scheduled" + } + }, + "type": "value" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 13, + "y": 7 + }, + "id": 154, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "next_action_wait{job=\"eth2\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Next Attestation", + "type": "stat" + }, + { + "datasource": null, + "description": "The temperature of your CPU (you can set this to Tctl or Tdie, whichever you prefer to monitor).\n\nTo get the correct chip and sensor ID, you'll want to run `sensors` from the `lm-sensors` package. See the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 65 + } + ] + }, + "unit": "celsius" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 0, + "y": 8 + }, + "id": 82, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_hwmon_temp_celsius{job=\"node\", chip=\"\", sensor=\"\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "CPU Temp", + "type": "stat" + }, + { + "datasource": null, + "description": "Tracks the total amount of RAM usage by the eth2 client and the entire system, versus how much is available.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "decbytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Used" + }, + "properties": [ + { + "id": "custom.fillOpacity", + "value": 70 + }, + { + "id": "custom.lineWidth", + "value": 4 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Beacon (eth2) Client" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#3274D9", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 70 + }, + { + "id": "custom.lineWidth", + "value": 4 + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 6, + "y": 8 + }, + "id": 60, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_memory_MemTotal_bytes{job=\"node\"} - node_memory_MemAvailable_bytes{job=\"node\"}", + "interval": "", + "legendFormat": "Used", + "refId": "A" + }, + { + "exemplar": true, + "expr": "node_memory_MemTotal_bytes{job=\"node\"}", + "hide": false, + "interval": "", + "legendFormat": "Total", + "refId": "B" + }, + { + "exemplar": true, + "expr": "sum(process_resident_memory_bytes{job=\"eth2\"})", + "hide": false, + "interval": "", + "legendFormat": "Nimbus", + "refId": "C" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "RAM Usage", + "type": "timeseries" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "How many peers Nimbus is currently connected to on the Beacon Chain.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 160, + "min": -2, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "#EAB839", + "value": 20 + }, + { + "color": "green", + "value": 40 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 13, + "y": 10 + }, + "id": 12, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "nbc_peers{job=\"eth2\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Peers", + "type": "gauge" + }, + { + "datasource": null, + "description": "How many peers Nimbus is currently connected to for Beacon Chain traffic.", + "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" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 16, + "y": 11 + }, + "id": 51, + "options": { + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "nbc_peers{job=\"eth2\"}", + "interval": "", + "legendFormat": "", + "refId": "B" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Peers", + "type": "timeseries" + }, + { + "datasource": null, + "description": "Tracks the amount of CPU consumption for the eth2 client and the total system. 100% means all of your CPU core are being used at their full capacity. The yellow line indicates how much CPU a single core can provide in your system.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "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": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Single Core Cap" + }, + "properties": [ + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.lineWidth", + "value": 2 + }, + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Nimbus" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#3274D9", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 0, + "y": 12 + }, + "id": 56, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "(1 - avg by (instance) (irate(node_cpu_seconds_total{job=\"node\", mode=\"idle\"}[$__rate_interval]))) * 100", + "hide": false, + "interval": "", + "legendFormat": "Total", + "refId": "B" + }, + { + "exemplar": true, + "expr": "avg (irate(process_cpu_seconds_total{job=\"eth2\"}[$__rate_interval])) * 100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", + "instant": false, + "interval": "", + "legendFormat": "Nimbus", + "refId": "A" + }, + { + "exemplar": true, + "expr": "100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "Single Core Cap", + "refId": "C" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "CPU Usage", + "type": "timeseries" + }, + { + "datasource": null, + "description": "The disk space used by your primary (Operating System) hard drive. Change the `device` option in this query to be your machine's hard drive.\n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 0.75 + }, + { + "color": "red", + "value": 0.9 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 6, + "y": 14 + }, + "id": 88, + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "(node_filesystem_size_bytes{job=\"node\", device=\"\", mountpoint=\"/\"} - node_filesystem_avail_bytes{job=\"node\", device=\"\", mountpoint=\"/\"}) / node_filesystem_size_bytes{job=\"node\", device=\"\", mountpoint=\"/\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "OS Disk Space Used", + "type": "gauge" + }, + { + "datasource": null, + "description": "An optional space monitor for a second disk or partition on your system. If you store your chain data on a separate drive or partition from your OS (such as with a Raspberry Pi), you can configure this to track that disk. Just modify the `device` setting in the query with your storage partition's path.\n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 0.75 + }, + { + "color": "red", + "value": 0.9 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 9, + "y": 14 + }, + "id": 90, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "(node_filesystem_size_bytes{job=\"node\", device=\"\"} - node_filesystem_avail_bytes{job=\"node\", device=\"\"}) / node_filesystem_size_bytes{job=\"node\", device=\"\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Disk 2 Space Used", + "type": "gauge" + }, + { + "datasource": null, + "description": "", + "gridPos": { + "h": 1, + "w": 9, + "x": 13, + "y": 15 + }, + "id": 184, + "options": { + "content": "
s", + "mode": "html" + }, + "pluginVersion": "8.1.1", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "gridPos": { + "h": 1, + "w": 9, + "x": 13, + "y": 16 + }, + "id": 212, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "title": "Beacon Chain Rewards (Updates Every 5 Minutes)", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "The average read/write latency of your SSD. The lower it is, the faster your machine can process and respond to Beacon Chain activities like attesting. Change the `device` setting in the queries to be the SSD you want to track (typically the one with your chain data on it).\n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "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": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 0, + "y": 17 + }, + "id": 70, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "irate(node_disk_write_time_seconds_total{job=\"node\", device=\"\"}[$__rate_interval]) / irate(node_disk_writes_completed_total{job=\"node\", device=\"\"}[$__rate_interval])", + "hide": false, + "interval": "", + "legendFormat": "Write", + "refId": "B" + }, + { + "exemplar": true, + "expr": "irate(node_disk_read_time_seconds_total{job=\"node\", device=\"\"}[$__rate_interval]) / irate(node_disk_reads_completed_total{job=\"node\", device=\"\"}[$__rate_interval])", + "interval": "", + "legendFormat": "Read", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "SSD Latency", + "type": "timeseries" + }, + { + "datasource": null, + "description": "The total ETH balance of all of your Rocket Pool validators on the Beacon Chain.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 5, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + }, + "unit": "ETH" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 13, + "y": 17 + }, + "id": 72, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_beacon_balance{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total Validator Balance", + "type": "stat" + }, + { + "datasource": null, + "description": "The total amount of ETH you've earned on the Beacon Chain by running a Rocket Pool node. This is equal to your total share of the rewards, minus the 16 ETH you deposited for each minipool.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 4, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ETH" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 3, + "x": 16, + "y": 17 + }, + "id": 204, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_beacon_share{job=\"rocketpool\"} - rocketpool_node_deposited_eth{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Your Beacon Chain Earnings", + "type": "stat" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "The raw APR from the Beacon Chain across all of your validators. This is what you would get if you were solo staking all of your validators.\n\nCalculated by comparing today's balance with yesterday's balance.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#F2495C", + "value": null + }, + { + "color": "#FADE2A", + "value": 0 + }, + { + "color": "blue", + "value": 0.0001 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 19, + "y": 17 + }, + "id": 152, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "((rocketpool_node_beacon_balance{job=\"rocketpool\"}) - (rocketpool_node_beacon_balance{job=\"rocketpool\"} offset 1d != 0)) / 32 * 365", + "hide": false, + "interval": "", + "legendFormat": "annualized daily return", + "refId": "B" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Solo Staking APR", + "type": "stat" + }, + { + "datasource": null, + "description": "A chart showing the network I/O used by your main network adapter over time. To make it work, change the `device` setting in the queries to match the name of the network adapter you want to track (you can use `ifconfig` to get a list of network adapters and find the right one). \n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "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": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 6, + "y": 19 + }, + "id": 80, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "irate(node_network_transmit_bytes_total{job=\"node\", device=\"\"}[$__rate_interval])", + "hide": false, + "interval": "", + "legendFormat": "Tx", + "refId": "B" + }, + { + "exemplar": true, + "expr": "irate(node_network_receive_bytes_total{job=\"node\", device=\"\"}[$__rate_interval])", + "interval": "", + "legendFormat": "Rx", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Network Usage", + "type": "timeseries" + }, + { + "datasource": null, + "description": "The total network I/O that has gone through your main network adapter. To make it work, change the `device` setting in the queries to match the name of the network adapter you want to track (you can use `ifconfig` to get a list of network adapters and find the right one). \n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 2, + "x": 10, + "y": 19 + }, + "id": 74, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_network_transmit_bytes_total{job=\"node\", device=\"\"}", + "hide": false, + "interval": "", + "legendFormat": "Tx", + "refId": "B" + }, + { + "exemplar": true, + "expr": "node_network_receive_bytes_total{job=\"node\", device=\"\"}", + "interval": "", + "legendFormat": "Rx", + "refId": "A" + } + ], + "title": "Total Net I/O", + "type": "stat" + }, + { + "datasource": null, + "description": "This is how much ETH you will receive if you exit all of your validators on the Beacon Chain; it's your share of the total balance for each Rocket Pool minipool.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 4, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ETH" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 13, + "y": 20 + }, + "id": 210, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_beacon_share{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Your Validator Share", + "type": "stat" + }, + { + "datasource": null, + "description": "Your APR from Beacon Chain rewards, which includes the your minipool's commission.\n\nCalculated by comparing today's balance with yesterday's balance.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 19, + "y": 20 + }, + "id": 206, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "((rocketpool_node_beacon_share{job=\"rocketpool\"}) - (rocketpool_node_beacon_share{job=\"rocketpool\"} offset 1d != 0)) / rocketpool_node_deposited_eth{job=\"rocketpool\"} * 365", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Your Validator APR", + "type": "stat" + }, + { + "datasource": null, + "description": "This tracks how long it takes between one of your processes trying to read from / write to your SSD, and when that operation is actually performed. Think of this like \"how long SSD reads and writes have to wait in a queue before completing\". The longer this time, the longer it takes for your node to perform its Beacon Chain duties.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "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": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 0, + "y": 21 + }, + "id": 76, + "options": { + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "irate(node_pressure_io_waiting_seconds_total{job=\"node\"}[$__rate_interval])", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "I/O Wait Time", + "type": "timeseries" + }, + { + "datasource": null, + "gridPos": { + "h": 1, + "w": 9, + "x": 13, + "y": 23 + }, + "id": 186, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "title": "RPL Rewards (Updates Every 5 Minutes)", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "The time of the next RPL rewards checkpoint. If you have an effective RPL stake greater than zero, you should receive rewards here (unless it's your first checkpoint, in which case you'll need to wait a bit longer).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "text", + "value": null + } + ] + }, + "unit": "dateTimeAsLocalNoDateIfToday" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 5, + "x": 13, + "y": 24 + }, + "id": 218, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_rpl_checkpoint_time{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Next RPL Rewards Checkpoint", + "type": "stat" + }, + { + "datasource": null, + "description": "This tracks how long you have until the next RPL rewards checkpoint.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "text", + "value": null + } + ] + }, + "unit": "dateTimeFromNow" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 18, + "y": 24 + }, + "id": 216, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_rpl_checkpoint_time{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Next RPL Rewards Checkpoint", + "type": "stat" + }, + { + "datasource": null, + "gridPos": { + "h": 1, + "w": 12, + "x": 0, + "y": 25 + }, + "id": 170, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "gridPos": { + "h": 1, + "w": 12, + "x": 0, + "y": 26 + }, + "id": 158, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "title": "Rocket Pool Network Stats (Updates Every 5 Minutes)", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "The total amount of ETH locked on the Rocket Pool network, including staked RPL (but not including Beacon Chain rewards).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + }, + "unit": "ETH" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 0, + "y": 27 + }, + "id": 156, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_demand_deposit_pool_balance{job=\"rocketpool\"} + rocketpool_demand_total_minipool_capacity{job=\"rocketpool\"} + rocketpool_supply_active_minipools{job=\"rocketpool\"} * 32 + rocketpool_rpl_total_value_staked{job=\"rocketpool\"} * rocketpool_rpl_rpl_price{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total ETH Locked", + "type": "stat" + }, + { + "datasource": null, + "description": "The total amount of RPL staked across all node operators in the Rocket Pool network.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "RPL" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 4, + "y": 27 + }, + "id": 214, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_rpl_total_value_staked{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total RPL Staked", + "type": "stat" + }, + { + "datasource": null, + "description": "The total *effective* RPL stake across all node operators on the Rocket Pool network. This accounts for the 150% collateral cap per minipool. If this number is lower than the Total RPL Staked, then some node operators have gone above 150%.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "RPL" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 8, + "y": 27 + }, + "id": 182, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_rpl_total_effective_staked{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total Effective RPL Staked", + "type": "stat" + }, + { + "datasource": null, + "description": "The approximate amount of RPL you'll receive at the next checkpoint, based on your current effective stake and how much RPL is staked on the entire network.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "RPL" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 13, + "y": 28 + }, + "id": 198, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_expected_rpl_rewards{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Approx. Rewards from Next Checkpoint", + "type": "stat" + }, + { + "datasource": null, + "description": "How much \"effective\" RPL you have staked (capped at 150% per minipool).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "RPL" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 17, + "y": 28 + }, + "id": 190, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_effective_staked_rpl{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Effective RPL Staked", + "type": "stat" + }, + { + "datasource": null, + "description": "The amount of RPL you were rewarded that you haven't claimed yet. Normally your node checks for these every 5 minutes and claims them automatically, so if this number persists for a long time then something may be wrong.\n\nPlease see https://docs.rocketpool.net/guides/node/rewards.html for more info on claiming rewards.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + }, + { + "color": "red", + "value": 0.001 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 20, + "y": 28 + }, + "id": 222, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_unclaimed_rewards{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Unclaimed RPL", + "type": "stat" + }, + { + "datasource": null, + "description": "The APR for your RPL stake, based on the rewards you will receive at the next checkpoint.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 13, + "y": 31 + }, + "id": 194, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_rpl_apr{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "APR for Next RPL Checkpoint", + "type": "stat" + }, + { + "datasource": null, + "description": "Your total staked RPL collateral. At 10%, you have 1.6 ETH worth of RPL per minipool; at 150% you have 24 ETH worth of RPL per minipool.\n\nIf you fall below 10% you won't be able to claim your rewards at the next checkpoint until you get back to 10%. If you go over 150%, you'll only be rewarded for the first 150% of your stake.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "max": 1.5, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "green", + "value": 0.1 + }, + { + "color": "red", + "value": 1.5 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 17, + "y": 31 + }, + "id": 196, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_total_staked_rpl{job=\"rocketpool\"} * rocketpool_rpl_rpl_price{job=\"rocketpool\"} / rocketpool_node_deposited_eth{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "RPL Collateral", + "type": "gauge" + }, + { + "datasource": null, + "description": "The amount of ETH that 1 rETH is worth.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 6, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "purple", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 0, + "y": 32 + }, + "id": 178, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_performance_eth_reth_exchange_rate{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "rETH Price (ETH / rETH)", + "type": "stat" + }, + { + "datasource": null, + "description": "The amount of ETH that 1 RPL is worth, as reported by the Oracle DAO. This updates somewhat infrequently, so it's expected if it falls out of sync with other price watchers.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 6, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 3, + "y": 32 + }, + "id": 180, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_rpl_rpl_price{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "RPL Price (ETH / RPL)", + "type": "stat" + }, + { + "datasource": null, + "description": "The relative amount of ETH that was deposited into the staking pool by rETH stakers, which was then used by node operators to create new minipools with validators on the Beacon Chain. The closer this number is to 100%, the more efficiently the Rocket Pool network is operating and the faster rETH's price grows.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "#EAB839", + "value": 0.2 + }, + { + "color": "green", + "value": 0.5 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Value" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 6, + "y": 32 + }, + "id": 168, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": true, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_performance_eth_utilization_rate{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Staking Pool ETH Used", + "type": "gauge" + }, + { + "datasource": null, + "description": "The amount of ETH currently in the staking pool, waiting to be used by node operators to create new minipools.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 5000, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 4000 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 9, + "y": 32 + }, + "id": 160, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": true, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_demand_deposit_pool_balance{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Staking Pool Balance", + "type": "gauge" + }, + { + "datasource": null, + "description": "The total amount of RPL you've earned from RPL rewards for the entire life of your node.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "RPL" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 13, + "y": 34 + }, + "id": 192, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_cumulative_rpl_rewards", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total RPL Rewards Earned", + "type": "stat" + }, + { + "datasource": null, + "description": "The total number of nodes that have registered on the Rocket Pool network.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 37 + }, + "id": 172, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "value" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_supply_node_count{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Node Count", + "type": "stat" + }, + { + "datasource": null, + "description": "A breakdown of the counts of each minipool on the Rocket Pool network by status:\n\n- **Initialized**: waiting for a deposit still\n- **Prelaunch:** deposits are done, waiting to be staked by the node operator's `rocketpool_node` container \n- **Staking:** deposited, validator created, and active (or pending) on the Beacon Chain\n- **Dissolved:** staking failed, funds returned to the node operator and staking pool\n- **Withdrawable:** exited from the Beacon Chain, waiting for rewards to be withdrawn to the minipool\n- **Finalized:** exited, withdrawn from, and essentially closed (inactive)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [] + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "staking" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "initialized" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "finalized" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "dissolved" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "prelaunch" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "withdrawable" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "dark-orange", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 3, + "y": 37 + }, + "id": 176, + "options": { + "legend": { + "displayMode": "table", + "placement": "right", + "values": [ + "value" + ] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_supply_minipool_count{job=\"rocketpool\"}", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{status}}", + "refId": "A" + } + ], + "title": "Minipools by Status", + "type": "piechart" + }, + { + "datasource": null, + "description": "The current commission for new minipools. If you created a minipool right now, this is the commission it would be assigned for its entire lifespan.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "max": 0.2, + "min": 0.05, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "green", + "value": 0.1 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 8, + "y": 37 + }, + "id": 208, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_supply_node_fee{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Current Commission", + "type": "gauge" + }, + { + "datasource": null, + "description": "The balances of your node wallet (only tracks Rocket Pool tokens). Keep an eye on how much ETH you have; if it falls too low, your node won't be able to pay for gas during automatic RPL reward claims or other transactions.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "center", + "displayMode": "auto", + "filterable": false + }, + "decimals": 6, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 9, + "x": 13, + "y": 37 + }, + "id": 200, + "options": { + "showHeader": true + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_balance{job=\"rocketpool\"}", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "{{Token}}", + "refId": "A" + } + ], + "title": "Node Wallet Balances", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "__name__": true, + "instance": true, + "job": true + }, + "indexByName": {}, + "renameByName": {} + } + } + ], + "type": "table" + }, + { + "datasource": null, + "description": "The total number of Rocket Pool minipools (validators) that are active (not exited and withdrawn from the Beacon Chain).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 40 + }, + "id": 174, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_supply_active_minipools{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Active Minipools", + "type": "stat" + } + ], + "refresh": "30s", + "schemaVersion": 30, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "allValue": null, + "current": { + "selected": false, + "text": "eth2:9100", + "value": "eth2:9100" + }, + "datasource": "Prometheus", + "definition": "label_values(process_virtual_memory_bytes,instance)", + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "instance", + "options": [], + "query": { + "query": "label_values(process_virtual_memory_bytes,instance)", + "refId": "Prometheus-instance-Variable-Query" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "Rocket Pool Dashboard v1.0.0 for Nimbus", + "uid": "Ur22GG77z4", + "version": 8 +} \ No newline at end of file diff --git a/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json b/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json new file mode 100644 index 00000000..e7e5b3cd --- /dev/null +++ b/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json @@ -0,0 +1,3796 @@ +{ + "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" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": 5, + "iteration": 1629088135943, + "links": [], + "panels": [ + { + "datasource": null, + "gridPos": { + "h": 1, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 163, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "title": "Hardware Stats", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "gridPos": { + "h": 1, + "w": 9, + "x": 13, + "y": 0 + }, + "id": 165, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "title": "Validator Stats", + "transparent": true, + "type": "text" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "A count of how long Prysm's Beacon Chain client has been running. If you don't restart it, this is about the same as your total system uptime.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(212, 212, 212)", + "value": null + } + ] + }, + "unit": "dtdhms" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 0, + "y": 1 + }, + "id": 40, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "time() - process_start_time_seconds{job=\"eth2\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Beacon Client Uptime", + "type": "stat" + }, + { + "datasource": null, + "description": "This will turn red when you system needs to be rebooted because of security updates.\n\nSetting this up is Operating System specific, so it doesn't come ready out of the box; see the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "0": { + "color": "transparent", + "index": 1, + "text": "No" + }, + "1": { + "color": "red", + "index": 0, + "text": "Reboot Required" + } + }, + "type": "value" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 3, + "y": 1 + }, + "id": 224, + "options": { + "colorMode": "background", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_reboot_required{job=\"node\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Reboot Needed?", + "type": "stat" + }, + { + "datasource": null, + "description": "Tracks any updates that are available for your OS or for Rocket Pool but haven't been applied yet. When one of these numbers is higher than 0, it means you should update your system or Rocket Pool accordingly.\n\nSetting this up is Operating System specific, so it doesn't come ready out of the box; see the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + }, + { + "color": "red", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 6, + "y": 1 + }, + "id": 94, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "max(apt_upgrades_pending{job=\"node\"})", + "interval": "", + "legendFormat": "OS", + "refId": "A" + }, + { + "exemplar": true, + "expr": "max(rocketpool_version_update{job=\"node\"})", + "hide": false, + "interval": "", + "legendFormat": "Rocket Pool", + "refId": "B" + } + ], + "title": "Available Updates", + "type": "stat" + }, + { + "datasource": null, + "description": "How much of your total swap space you're currently using. If you have swap space enabled, you want this to be as low as possible - otherwise, your system is running out of free RAM.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 20 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 9, + "y": 1 + }, + "id": 92, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "((node_memory_SwapTotal_bytes{job=\"node\"} - node_memory_SwapFree_bytes{job=\"node\"}) / node_memory_SwapTotal_bytes{job=\"node\"})", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Swap Space Usage", + "type": "gauge" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "Tracks the activity of all of your validators on the Beacon Chain. This is a cumulative count; it starts at 0 when Prysm first starts up, and then continuously increments as it goes.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 3, + "x": 13, + "y": 1 + }, + "id": 13, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "sum(validator_successful_attestations{job=\"validator\"}) OR on() vector(0)", + "hide": false, + "interval": "", + "legendFormat": "Attestations", + "refId": "B" + }, + { + "exemplar": true, + "expr": "sum(validator_successful_proposals{job=\"validator\"}) OR on() vector(0)", + "interval": "", + "legendFormat": "Proposals", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Validator Activity", + "type": "stat" + }, + { + "datasource": null, + "description": "Tracks the activity of all of your validators on the Beacon Chain.", + "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": "stepAfter", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 1, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 16, + "y": 1 + }, + "id": 30, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "sum(rate(validator_successful_proposals{job=\"validator\"}[$__rate_interval])) * 45 OR on() vector(0)", + "hide": false, + "interval": "", + "legendFormat": "Proposal", + "refId": "A" + }, + { + "exemplar": true, + "expr": "sum(rate(validator_successful_attestations{job=\"validator\"}[$__rate_interval])) * 45 OR on() vector(0)", + "hide": false, + "interval": "", + "legendFormat": "Attestation", + "refId": "B" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Validator Activity", + "type": "timeseries" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "The total CPU usage of Prysm's Beacon Chain and Validator clients combined, with respect to all cores on your CPU.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "semi-dark-blue", + "value": null + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 0, + "y": 5 + }, + "id": 8, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "(sum(avg (irate(process_cpu_seconds_total{job=\"eth2\"}[$__rate_interval]))) + sum(avg (irate(process_cpu_seconds_total{job=\"validator\"}[$__rate_interval])))) * 100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Prysm CPU", + "type": "stat" + }, + { + "datasource": null, + "description": "The total CPU usage of your machine, with respect to all cores.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 2, + "y": 5 + }, + "id": 66, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "1 - avg (irate(node_cpu_seconds_total{job=\"node\", mode=\"idle\"}[$__rate_interval]))", + "interval": "", + "legendFormat": "Core {{cpu}}", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Total CPU", + "type": "stat" + }, + { + "datasource": null, + "description": "Your CPU's current clock speed (averaged across all cores)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "yellow", + "value": null + } + ] + }, + "unit": "hertz" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 4, + "y": 5 + }, + "id": 78, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "avg(node_cpu_frequency_max_hertz{job=\"node\"})", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "CPU Speed", + "type": "stat" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "The amount of RAM that the Prysm Beacon Chain and Validator clients are using together.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 6, + "y": 5 + }, + "id": 6, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "sum(process_resident_memory_bytes{job=\"eth2\"}) + sum(process_resident_memory_bytes{job=\"validator\"})", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Prysm RAM", + "type": "stat" + }, + { + "datasource": null, + "description": "The total amount of RAM that your system is currently using.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 8, + "y": 5 + }, + "id": 62, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_memory_MemTotal_bytes{job=\"node\"} - node_memory_MemAvailable_bytes{job=\"node\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Used RAM", + "type": "stat" + }, + { + "datasource": null, + "description": "The total amount of RAM that your system has installed.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-yellow", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 5 + }, + "id": 64, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_memory_MemTotal_bytes{job=\"node\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total RAM", + "type": "stat" + }, + { + "datasource": null, + "description": "This tracks the inclusion distance for each of your attestations. Ideally they would all be 1, meaning the attestation was received by your peers when it was expected (the very next slot). This corresponds to a 0 on Beaconcha.in's \"Optimal Inclusion Distance\" display.\n\nIf you see a large distance, you should confirm it using a separate block explorer like https://prater.beaconcha.in.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 100, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "stepBefore", + "lineWidth": 0, + "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 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 16, + "y": 5 + }, + "id": 26, + "interval": "", + "options": { + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "sum(irate(validator_successful_attestations{job=\"validator\"}[$__rate_interval]) * on(pubkey) validator_inclusion_distance{job=\"validator\"}) * 15", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Attestation Inclusion Distance", + "transformations": [ + { + "id": "filterByValue", + "options": { + "filters": [ + { + "config": { + "id": "greater", + "options": { + "value": 10000 + } + }, + "fieldName": "sum(irate(validator_successful_attestations{job=\"validator\"}[60s]) * on(pubkey) validator_inclusion_distance{job=\"validator\"}) * 15" + } + ], + "match": "any", + "type": "exclude" + } + } + ], + "type": "timeseries" + }, + { + "datasource": null, + "description": "The time until your next attestation.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "0": { + "color": "text", + "index": 0, + "text": "None Scheduled" + } + }, + "type": "value" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 13, + "y": 7 + }, + "id": 154, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "min((validator_next_attestation_slot{job=\"validator\"} - scalar(beacon_slot{job=\"eth2\"})) > 0 - 1) * 12", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Next Attestation", + "type": "stat" + }, + { + "datasource": null, + "description": "The temperature of your CPU (you can set this to Tctl or Tdie, whichever you prefer to monitor).\n\nTo get the correct chip and sensor ID, you'll want to run `sensors` from the `lm-sensors` package. See the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 65 + } + ] + }, + "unit": "celsius" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 0, + "y": 8 + }, + "id": 82, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_hwmon_temp_celsius{job=\"node\", chip=\"\", sensor=\"\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "CPU Temp", + "type": "stat" + }, + { + "datasource": null, + "description": "Tracks the total amount of RAM usage by the eth2 client and the entire system, versus how much is available.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "decbytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Used" + }, + "properties": [ + { + "id": "custom.fillOpacity", + "value": 70 + }, + { + "id": "custom.lineWidth", + "value": 4 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Prysm" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#3274D9", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 70 + }, + { + "id": "custom.lineWidth", + "value": 4 + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 6, + "y": 8 + }, + "id": 60, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_memory_MemTotal_bytes{job=\"node\"} - node_memory_MemAvailable_bytes{job=\"node\"}", + "interval": "", + "legendFormat": "Used", + "refId": "A" + }, + { + "exemplar": true, + "expr": "node_memory_MemTotal_bytes{job=\"node\"}", + "hide": false, + "interval": "", + "legendFormat": "Total", + "refId": "B" + }, + { + "exemplar": true, + "expr": "sum(process_resident_memory_bytes{job=\"eth2\"}) + sum(process_resident_memory_bytes{job=\"validator\"})", + "hide": false, + "interval": "", + "legendFormat": "Prysm", + "refId": "C" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "RAM Usage", + "type": "timeseries" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "How many peers Prysm is currently connected to on the Beacon Chain.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 45, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "#EAB839", + "value": 20 + }, + { + "color": "green", + "value": 40 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 13, + "y": 10 + }, + "id": 12, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "p2p_peer_count{job=\"eth2\", state=\"Connected\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Peers", + "type": "gauge" + }, + { + "datasource": null, + "description": "How many peers Prysm is currently connected to for Beacon Chain traffic.", + "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" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 16, + "y": 11 + }, + "id": 51, + "options": { + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "p2p_peer_count{job=\"eth2\", state=\"Connected\"}", + "interval": "", + "legendFormat": "", + "refId": "B" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Peers", + "type": "timeseries" + }, + { + "datasource": null, + "description": "Tracks the amount of CPU consumption for the eth2 client and the total system. 100% means all of your CPU core are being used at their full capacity. The yellow line indicates how much CPU a single core can provide in your system.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "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": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Single Core Cap" + }, + "properties": [ + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.lineWidth", + "value": 2 + }, + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Prysm" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#3274D9", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 0, + "y": 12 + }, + "id": 56, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "(1 - avg by (instance) (irate(node_cpu_seconds_total{job=\"node\", mode=\"idle\"}[$__rate_interval]))) * 100", + "hide": false, + "interval": "", + "legendFormat": "Total", + "refId": "B" + }, + { + "exemplar": true, + "expr": "(sum(avg (irate(process_cpu_seconds_total{job=\"eth2\"}[$__rate_interval]))) + sum(avg (irate(process_cpu_seconds_total{job=\"validator\"}[$__rate_interval])))) * 100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", + "instant": false, + "interval": "", + "legendFormat": "Prysm", + "refId": "A" + }, + { + "exemplar": true, + "expr": "100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "Single Core Cap", + "refId": "C" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "CPU Usage", + "type": "timeseries" + }, + { + "datasource": null, + "description": "The disk space used by your primary (Operating System) hard drive. Change the `device` option in this query to be your machine's hard drive.\n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 0.75 + }, + { + "color": "red", + "value": 0.9 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 6, + "y": 14 + }, + "id": 88, + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "(node_filesystem_size_bytes{job=\"node\", device=\"\", mountpoint=\"/\"} - node_filesystem_avail_bytes{job=\"node\", device=\"\", mountpoint=\"/\"}) / node_filesystem_size_bytes{job=\"node\", device=\"\", mountpoint=\"/\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "OS Disk Space Used", + "type": "gauge" + }, + { + "datasource": null, + "description": "An optional space monitor for a second disk or partition on your system. If you store your chain data on a separate drive or partition from your OS (such as with a Raspberry Pi), you can configure this to track that disk. Just modify the `device` setting in the query with your storage partition's path.\n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 0.75 + }, + { + "color": "red", + "value": 0.9 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 9, + "y": 14 + }, + "id": 90, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "(node_filesystem_size_bytes{job=\"node\", device=\"\"} - node_filesystem_avail_bytes{job=\"node\", device=\"\"}) / node_filesystem_size_bytes{job=\"node\", device=\"\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Disk 2 Space Used", + "type": "gauge" + }, + { + "datasource": null, + "description": "", + "gridPos": { + "h": 1, + "w": 9, + "x": 13, + "y": 15 + }, + "id": 184, + "options": { + "content": "
s", + "mode": "html" + }, + "pluginVersion": "8.1.1", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "gridPos": { + "h": 1, + "w": 9, + "x": 13, + "y": 16 + }, + "id": 212, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "title": "Beacon Chain Rewards (Updates Every 5 Minutes)", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "The average read/write latency of your SSD. The lower it is, the faster your machine can process and respond to Beacon Chain activities like attesting. Change the `device` setting in the queries to be the SSD you want to track (typically the one with your chain data on it).\n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "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": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 0, + "y": 17 + }, + "id": 70, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "irate(node_disk_write_time_seconds_total{job=\"node\", device=\"\"}[$__rate_interval]) / irate(node_disk_writes_completed_total{job=\"node\", device=\"\"}[$__rate_interval])", + "hide": false, + "interval": "", + "legendFormat": "Write", + "refId": "B" + }, + { + "exemplar": true, + "expr": "irate(node_disk_read_time_seconds_total{job=\"node\", device=\"\"}[$__rate_interval]) / irate(node_disk_reads_completed_total{job=\"node\", device=\"\"}[$__rate_interval])", + "interval": "", + "legendFormat": "Read", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "SSD Latency", + "type": "timeseries" + }, + { + "datasource": null, + "description": "The total ETH balance of all of your Rocket Pool validators on the Beacon Chain.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 5, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + }, + "unit": "ETH" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 13, + "y": 17 + }, + "id": 72, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_beacon_balance{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total Validator Balance", + "type": "stat" + }, + { + "datasource": null, + "description": "The total amount of ETH you've earned on the Beacon Chain by running a Rocket Pool node. This is equal to your total share of the rewards, minus the 16 ETH you deposited for each minipool.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 4, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ETH" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 3, + "x": 16, + "y": 17 + }, + "id": 204, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_beacon_share{job=\"rocketpool\"} - rocketpool_node_deposited_eth{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Your Beacon Chain Earnings", + "type": "stat" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "The raw APR from the Beacon Chain across all of your validators. This is what you would get if you were solo staking all of your validators.\n\nCalculated by comparing today's balance with yesterday's balance.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#F2495C", + "value": null + }, + { + "color": "#FADE2A", + "value": 0 + }, + { + "color": "blue", + "value": 0.0001 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 19, + "y": 17 + }, + "id": 152, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "((rocketpool_node_beacon_balance{job=\"rocketpool\"}) - (rocketpool_node_beacon_balance{job=\"rocketpool\"} offset 1d != 0)) / 32 * 365", + "hide": false, + "interval": "", + "legendFormat": "annualized daily return", + "refId": "B" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Solo Staking APR", + "type": "stat" + }, + { + "datasource": null, + "description": "A chart showing the network I/O used by your main network adapter over time. To make it work, change the `device` setting in the queries to match the name of the network adapter you want to track (you can use `ifconfig` to get a list of network adapters and find the right one). \n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "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": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 6, + "y": 19 + }, + "id": 80, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "irate(node_network_transmit_bytes_total{job=\"node\", device=\"\"}[$__rate_interval])", + "hide": false, + "interval": "", + "legendFormat": "Tx", + "refId": "B" + }, + { + "exemplar": true, + "expr": "irate(node_network_receive_bytes_total{job=\"node\", device=\"\"}[$__rate_interval])", + "interval": "", + "legendFormat": "Rx", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Network Usage", + "type": "timeseries" + }, + { + "datasource": null, + "description": "The total network I/O that has gone through your main network adapter. To make it work, change the `device` setting in the queries to match the name of the network adapter you want to track (you can use `ifconfig` to get a list of network adapters and find the right one). \n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 2, + "x": 10, + "y": 19 + }, + "id": 74, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_network_transmit_bytes_total{job=\"node\", device=\"\"}", + "hide": false, + "interval": "", + "legendFormat": "Tx", + "refId": "B" + }, + { + "exemplar": true, + "expr": "node_network_receive_bytes_total{job=\"node\", device=\"\"}", + "interval": "", + "legendFormat": "Rx", + "refId": "A" + } + ], + "title": "Total Net I/O", + "type": "stat" + }, + { + "datasource": null, + "description": "This is how much ETH you will receive if you exit all of your validators on the Beacon Chain; it's your share of the total balance for each Rocket Pool minipool.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 4, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ETH" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 13, + "y": 20 + }, + "id": 210, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_beacon_share{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Your Validator Share", + "type": "stat" + }, + { + "datasource": null, + "description": "Your APR from Beacon Chain rewards, which includes the your minipool's commission.\n\nCalculated by comparing today's balance with yesterday's balance.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 19, + "y": 20 + }, + "id": 206, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "((rocketpool_node_beacon_share{job=\"rocketpool\"}) - (rocketpool_node_beacon_share{job=\"rocketpool\"} offset 1d != 0)) / rocketpool_node_deposited_eth{job=\"rocketpool\"} * 365", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Your Validator APR", + "type": "stat" + }, + { + "datasource": null, + "description": "This tracks how long it takes between one of your processes trying to read from / write to your SSD, and when that operation is actually performed. Think of this like \"how long SSD reads and writes have to wait in a queue before completing\". The longer this time, the longer it takes for your node to perform its Beacon Chain duties.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "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": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 0, + "y": 21 + }, + "id": 76, + "options": { + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "irate(node_pressure_io_waiting_seconds_total{job=\"node\"}[$__rate_interval])", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "I/O Wait Time", + "type": "timeseries" + }, + { + "datasource": null, + "gridPos": { + "h": 1, + "w": 9, + "x": 13, + "y": 23 + }, + "id": 186, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "title": "RPL Rewards (Updates Every 5 Minutes)", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "The time of the next RPL rewards checkpoint. If you have an effective RPL stake greater than zero, you should receive rewards here (unless it's your first checkpoint, in which case you'll need to wait a bit longer).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "text", + "value": null + } + ] + }, + "unit": "dateTimeAsLocalNoDateIfToday" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 5, + "x": 13, + "y": 24 + }, + "id": 218, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_rpl_checkpoint_time{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Next RPL Rewards Checkpoint", + "type": "stat" + }, + { + "datasource": null, + "description": "This tracks how long you have until the next RPL rewards checkpoint.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "text", + "value": null + } + ] + }, + "unit": "dateTimeFromNow" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 18, + "y": 24 + }, + "id": 216, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_rpl_checkpoint_time{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Next RPL Rewards Checkpoint", + "type": "stat" + }, + { + "datasource": null, + "gridPos": { + "h": 1, + "w": 12, + "x": 0, + "y": 25 + }, + "id": 170, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "gridPos": { + "h": 1, + "w": 12, + "x": 0, + "y": 26 + }, + "id": 158, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "title": "Rocket Pool Network Stats (Updates Every 5 Minutes)", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "The total amount of ETH locked on the Rocket Pool network, including staked RPL (but not including Beacon Chain rewards).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + }, + "unit": "ETH" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 0, + "y": 27 + }, + "id": 156, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_demand_deposit_pool_balance{job=\"rocketpool\"} + rocketpool_demand_total_minipool_capacity{job=\"rocketpool\"} + rocketpool_supply_active_minipools{job=\"rocketpool\"} * 32 + rocketpool_rpl_total_value_staked{job=\"rocketpool\"} * rocketpool_rpl_rpl_price{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total ETH Locked", + "type": "stat" + }, + { + "datasource": null, + "description": "The total amount of RPL staked across all node operators in the Rocket Pool network.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "RPL" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 4, + "y": 27 + }, + "id": 214, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_rpl_total_value_staked{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total RPL Staked", + "type": "stat" + }, + { + "datasource": null, + "description": "The total *effective* RPL stake across all node operators on the Rocket Pool network. This accounts for the 150% collateral cap per minipool. If this number is lower than the Total RPL Staked, then some node operators have gone above 150%.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "RPL" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 8, + "y": 27 + }, + "id": 182, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_rpl_total_effective_staked{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total Effective RPL Staked", + "type": "stat" + }, + { + "datasource": null, + "description": "The approximate amount of RPL you'll receive at the next checkpoint, based on your current effective stake and how much RPL is staked on the entire network.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "RPL" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 13, + "y": 28 + }, + "id": 198, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_expected_rpl_rewards{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Approx. Rewards from Next Checkpoint", + "type": "stat" + }, + { + "datasource": null, + "description": "How much \"effective\" RPL you have staked (capped at 150% per minipool).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "RPL" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 17, + "y": 28 + }, + "id": 190, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_effective_staked_rpl{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Effective RPL Staked", + "type": "stat" + }, + { + "datasource": null, + "description": "The amount of RPL you were rewarded that you haven't claimed yet. Normally your node checks for these every 5 minutes and claims them automatically, so if this number persists for a long time then something may be wrong.\n\nPlease see https://docs.rocketpool.net/guides/node/rewards.html for more info on claiming rewards.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + }, + { + "color": "red", + "value": 0.001 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 20, + "y": 28 + }, + "id": 222, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_unclaimed_rewards{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Unclaimed RPL", + "type": "stat" + }, + { + "datasource": null, + "description": "The APR for your RPL stake, based on the rewards you will receive at the next checkpoint.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 13, + "y": 31 + }, + "id": 194, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_rpl_apr{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "APR for Next RPL Checkpoint", + "type": "stat" + }, + { + "datasource": null, + "description": "Your total staked RPL collateral. At 10%, you have 1.6 ETH worth of RPL per minipool; at 150% you have 24 ETH worth of RPL per minipool.\n\nIf you fall below 10% you won't be able to claim your rewards at the next checkpoint until you get back to 10%. If you go over 150%, you'll only be rewarded for the first 150% of your stake.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "max": 1.5, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "green", + "value": 0.1 + }, + { + "color": "red", + "value": 1.5 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 17, + "y": 31 + }, + "id": 196, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_total_staked_rpl{job=\"rocketpool\"} * rocketpool_rpl_rpl_price{job=\"rocketpool\"} / rocketpool_node_deposited_eth{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "RPL Collateral", + "type": "gauge" + }, + { + "datasource": null, + "description": "The amount of ETH that 1 rETH is worth.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 6, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "purple", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 0, + "y": 32 + }, + "id": 178, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_performance_eth_reth_exchange_rate{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "rETH Price (ETH / rETH)", + "type": "stat" + }, + { + "datasource": null, + "description": "The amount of ETH that 1 RPL is worth, as reported by the Oracle DAO. This updates somewhat infrequently, so it's expected if it falls out of sync with other price watchers.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 6, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 3, + "y": 32 + }, + "id": 180, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_rpl_rpl_price{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "RPL Price (ETH / RPL)", + "type": "stat" + }, + { + "datasource": null, + "description": "The relative amount of ETH that was deposited into the staking pool by rETH stakers, which was then used by node operators to create new minipools with validators on the Beacon Chain. The closer this number is to 100%, the more efficiently the Rocket Pool network is operating and the faster rETH's price grows.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "#EAB839", + "value": 0.2 + }, + { + "color": "green", + "value": 0.5 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Value" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 6, + "y": 32 + }, + "id": 168, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": true, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_performance_eth_utilization_rate{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Staking Pool ETH Used", + "type": "gauge" + }, + { + "datasource": null, + "description": "The amount of ETH currently in the staking pool, waiting to be used by node operators to create new minipools.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 5000, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 4000 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 9, + "y": 32 + }, + "id": 160, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": true, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_demand_deposit_pool_balance{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Staking Pool Balance", + "type": "gauge" + }, + { + "datasource": null, + "description": "The total amount of RPL you've earned from RPL rewards for the entire life of your node.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "RPL" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 13, + "y": 34 + }, + "id": 192, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_cumulative_rpl_rewards", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total RPL Rewards Earned", + "type": "stat" + }, + { + "datasource": null, + "description": "The total number of nodes that have registered on the Rocket Pool network.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 37 + }, + "id": 172, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "value" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_supply_node_count{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Node Count", + "type": "stat" + }, + { + "datasource": null, + "description": "A breakdown of the counts of each minipool on the Rocket Pool network by status:\n\n- **Initialized**: waiting for a deposit still\n- **Prelaunch:** deposits are done, waiting to be staked by the node operator's `rocketpool_node` container \n- **Staking:** deposited, validator created, and active (or pending) on the Beacon Chain\n- **Dissolved:** staking failed, funds returned to the node operator and staking pool\n- **Withdrawable:** exited from the Beacon Chain, waiting for rewards to be withdrawn to the minipool\n- **Finalized:** exited, withdrawn from, and essentially closed (inactive)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [] + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "staking" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "initialized" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "finalized" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "dissolved" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "prelaunch" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "withdrawable" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "dark-orange", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 3, + "y": 37 + }, + "id": 176, + "options": { + "legend": { + "displayMode": "table", + "placement": "right", + "values": [ + "value" + ] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_supply_minipool_count{job=\"rocketpool\"}", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{status}}", + "refId": "A" + } + ], + "title": "Minipools by Status", + "type": "piechart" + }, + { + "datasource": null, + "description": "The current commission for new minipools. If you created a minipool right now, this is the commission it would be assigned for its entire lifespan.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "max": 0.2, + "min": 0.05, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "green", + "value": 0.1 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 8, + "y": 37 + }, + "id": 208, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_supply_node_fee{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Current Commission", + "type": "gauge" + }, + { + "datasource": null, + "description": "The balances of your node wallet (only tracks Rocket Pool tokens). Keep an eye on how much ETH you have; if it falls too low, your node won't be able to pay for gas during automatic RPL reward claims or other transactions.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "center", + "displayMode": "auto", + "filterable": false + }, + "decimals": 6, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 9, + "x": 13, + "y": 37 + }, + "id": 200, + "options": { + "showHeader": true + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_balance{job=\"rocketpool\"}", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "{{Token}}", + "refId": "A" + } + ], + "title": "Node Wallet Balances", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "__name__": true, + "instance": true, + "job": true + }, + "indexByName": {}, + "renameByName": {} + } + } + ], + "type": "table" + }, + { + "datasource": null, + "description": "The total number of Rocket Pool minipools (validators) that are active (not exited and withdrawn from the Beacon Chain).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 40 + }, + "id": 174, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_supply_active_minipools{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Active Minipools", + "type": "stat" + } + ], + "refresh": "30s", + "schemaVersion": 30, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "allValue": null, + "current": { + "selected": false, + "text": "eth2:9100", + "value": "eth2:9100" + }, + "datasource": "Prometheus", + "definition": "label_values(process_virtual_memory_bytes,instance)", + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "instance", + "options": [], + "query": { + "query": "label_values(process_virtual_memory_bytes,instance)", + "refId": "Prometheus-instance-Variable-Query" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "Rocket Pool Dashboard v1.0.0 for Prysm", + "uid": "Ur22GG77z3", + "version": 10 +} \ No newline at end of file diff --git a/amd64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh b/amd64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh index 369b6691..42adc8ed 100755 --- a/amd64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh +++ b/amd64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh @@ -18,6 +18,10 @@ if [ "$CLIENT" = "lighthouse" ]; then CMD="$CMD --target-peers $ETH2_MAX_PEERS" fi + if [ "$ENABLE_METRICS" -eq "1" ]; then + CMD="$CMD --metrics --metrics-address 0.0.0.0 --metrics-port $ETH2_METRICS_PORT --validator-monitor-auto" + fi + exec ${CMD} fi @@ -36,7 +40,7 @@ if [ "$CLIENT" = "nimbus" ]; then CMD="$CMD --max-peers=$ETH2_MAX_PEERS" fi - if [ ! -z "$ENABLE_METRICS" ]; then + if [ "$ENABLE_METRICS" -eq "1" ]; then CMD="$CMD --metrics --metrics-address=0.0.0.0 --metrics-port=$ETH2_METRICS_PORT" fi diff --git a/amd64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh b/amd64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh index 1f91704c..688ba248 100755 --- a/amd64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh +++ b/amd64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh @@ -12,7 +12,13 @@ fi # Lighthouse startup if [ "$CLIENT" = "lighthouse" ]; then - exec /usr/local/bin/lighthouse validator --network prater --datadir /validators/lighthouse --init-slashing-protection --beacon-node "$ETH2_PROVIDER" --graffiti "$GRAFFITI" + CMD="/usr/local/bin/lighthouse validator --network prater --datadir /validators/lighthouse --init-slashing-protection --beacon-node $ETH2_PROVIDER" + + if [ "$ENABLE_METRICS" -eq "1" ]; then + CMD="$CMD --metrics --metrics-address 0.0.0.0 --metrics-port $VALIDATOR_METRICS_PORT" + fi + + exec ${CMD} --graffiti "$GRAFFITI" fi diff --git a/amd64/rp-smartnode-install/network/prater/version-check.sh b/amd64/rp-smartnode-install/network/prater/version-check.sh index 13d9dcd6..27653b22 100755 --- a/amd64/rp-smartnode-install/network/prater/version-check.sh +++ b/amd64/rp-smartnode-install/network/prater/version-check.sh @@ -3,10 +3,10 @@ LATEST_VERSION=$(curl --silent "https://api.github.com/repos/rocket-pool/smartnode-install/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') CURRENT_VERSION=$(docker exec rocketpool_node /go/bin/rocketpool --version | sed -E 's/rocketpool version (.*)/v\1/') -echo "# HELP rocket_pool_version_update New Rocket Pool version available" -echo "# TYPE rocket_pool_version_update gauge" +echo "# HELP rocketpool_version_update New Rocket Pool version available" +echo "# TYPE rocketpool_version_update gauge" if [ "$LATEST_VERSION" = "$CURRENT_VERSION" ]; then - echo "rocket_pool_version_update 0" + echo "rocketpool_version_update 0" else - echo "rocket_pool_version_update 1" + echo "rocketpool_version_update 1" fi diff --git a/arm64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh b/arm64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh index 369b6691..42adc8ed 100755 --- a/arm64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh +++ b/arm64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh @@ -18,6 +18,10 @@ if [ "$CLIENT" = "lighthouse" ]; then CMD="$CMD --target-peers $ETH2_MAX_PEERS" fi + if [ "$ENABLE_METRICS" -eq "1" ]; then + CMD="$CMD --metrics --metrics-address 0.0.0.0 --metrics-port $ETH2_METRICS_PORT --validator-monitor-auto" + fi + exec ${CMD} fi @@ -36,7 +40,7 @@ if [ "$CLIENT" = "nimbus" ]; then CMD="$CMD --max-peers=$ETH2_MAX_PEERS" fi - if [ ! -z "$ENABLE_METRICS" ]; then + if [ "$ENABLE_METRICS" -eq "1" ]; then CMD="$CMD --metrics --metrics-address=0.0.0.0 --metrics-port=$ETH2_METRICS_PORT" fi diff --git a/arm64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh b/arm64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh index 1f91704c..688ba248 100755 --- a/arm64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh +++ b/arm64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh @@ -12,7 +12,13 @@ fi # Lighthouse startup if [ "$CLIENT" = "lighthouse" ]; then - exec /usr/local/bin/lighthouse validator --network prater --datadir /validators/lighthouse --init-slashing-protection --beacon-node "$ETH2_PROVIDER" --graffiti "$GRAFFITI" + CMD="/usr/local/bin/lighthouse validator --network prater --datadir /validators/lighthouse --init-slashing-protection --beacon-node $ETH2_PROVIDER" + + if [ "$ENABLE_METRICS" -eq "1" ]; then + CMD="$CMD --metrics --metrics-address 0.0.0.0 --metrics-port $VALIDATOR_METRICS_PORT" + fi + + exec ${CMD} --graffiti "$GRAFFITI" fi diff --git a/arm64/rp-smartnode-install/network/prater/version-check.sh b/arm64/rp-smartnode-install/network/prater/version-check.sh index 13d9dcd6..27653b22 100755 --- a/arm64/rp-smartnode-install/network/prater/version-check.sh +++ b/arm64/rp-smartnode-install/network/prater/version-check.sh @@ -3,10 +3,10 @@ LATEST_VERSION=$(curl --silent "https://api.github.com/repos/rocket-pool/smartnode-install/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') CURRENT_VERSION=$(docker exec rocketpool_node /go/bin/rocketpool --version | sed -E 's/rocketpool version (.*)/v\1/') -echo "# HELP rocket_pool_version_update New Rocket Pool version available" -echo "# TYPE rocket_pool_version_update gauge" +echo "# HELP rocketpool_version_update New Rocket Pool version available" +echo "# TYPE rocketpool_version_update gauge" if [ "$LATEST_VERSION" = "$CURRENT_VERSION" ]; then - echo "rocket_pool_version_update 0" + echo "rocketpool_version_update 0" else - echo "rocket_pool_version_update 1" + echo "rocketpool_version_update 1" fi From 89516a93388ade3083d40cfd36a4ca865b6ddcaa Mon Sep 17 00:00:00 2001 From: Joe Clapis Date: Mon, 16 Aug 2021 13:25:18 -0400 Subject: [PATCH 03/14] Updated dashboards --- ... Pool Dashboard v1.0.0 for Lighthouse.json | 509 ++++++++---------- ...cket Pool Dashboard v1.0.0 for Nimbus.json | 503 ++++++++--------- ...ocket Pool Dashboard v1.0.0 for Prysm.json | 501 ++++++++--------- 3 files changed, 667 insertions(+), 846 deletions(-) diff --git a/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json b/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json index 0f98bc14..e31695a4 100644 --- a/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json +++ b/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json @@ -22,7 +22,7 @@ "gnetId": null, "graphTooltip": 0, "id": 4, - "iteration": 1629089543563, + "iteration": 1629134636969, "links": [], "panels": [ { @@ -651,7 +651,7 @@ }, { "datasource": null, - "description": "Your CPU's current clock speed (averaged across all cores)", + "description": "The temperature of your CPU (you can set this to Tctl or Tdie, whichever you prefer to monitor).\n\nTo get the correct chip and sensor ID, you'll want to run `sensors` from the `lm-sensors` package. See the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", "fieldConfig": { "defaults": { "color": { @@ -662,12 +662,20 @@ "mode": "absolute", "steps": [ { - "color": "yellow", + "color": "green", "value": null + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 65 } ] }, - "unit": "hertz" + "unit": "celsius" }, "overrides": [] }, @@ -677,10 +685,10 @@ "x": 4, "y": 5 }, - "id": 78, + "id": 82, "options": { "colorMode": "value", - "graphMode": "none", + "graphMode": "area", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { @@ -697,13 +705,13 @@ "targets": [ { "exemplar": true, - "expr": "avg(node_cpu_frequency_max_hertz{job=\"node\"})", + "expr": "node_hwmon_temp_celsius{job=\"node\", chip=\"\", sensor=\"\"}", "interval": "", "legendFormat": "", "refId": "A" } ], - "title": "CPU Speed", + "title": "CPU Temp", "type": "stat" }, { @@ -1034,11 +1042,39 @@ }, { "datasource": null, - "description": "The temperature of your CPU (you can set this to Tctl or Tdie, whichever you prefer to monitor).\n\nTo get the correct chip and sensor ID, you'll want to run `sensors` from the `lm-sensors` package. See the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "description": "Tracks the amount of CPU consumption for the eth2 client and the total system. 100% means all of your CPU core are being used at their full capacity. The yellow line indicates how much CPU a single core can provide in your system.", "fieldConfig": { "defaults": { "color": { - "mode": "thresholds" + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } }, "mappings": [], "thresholds": { @@ -1047,55 +1083,102 @@ { "color": "green", "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Single Core Cap" + }, + "properties": [ + { + "id": "custom.fillOpacity", + "value": 0 }, { - "color": "#EAB839", - "value": 50 + "id": "custom.lineWidth", + "value": 2 }, { - "color": "red", - "value": 65 + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } } ] }, - "unit": "celsius" - }, - "overrides": [] + { + "matcher": { + "id": "byName", + "options": "Lighthouse" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#3274D9", + "mode": "fixed" + } + } + ] + } + ] }, "gridPos": { - "h": 4, + "h": 6, "w": 6, "x": 0, "y": 8 }, - "id": 82, + "id": 56, "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" }, - "text": {}, - "textMode": "auto" + "tooltip": { + "mode": "single" + } }, "pluginVersion": "8.1.1", "targets": [ { "exemplar": true, - "expr": "node_hwmon_temp_celsius{job=\"node\", chip=\"\", sensor=\"\"}", + "expr": "(1 - avg by (instance) (irate(node_cpu_seconds_total{job=\"node\", mode=\"idle\"}[$__rate_interval]))) * 100", + "hide": false, "interval": "", - "legendFormat": "", + "legendFormat": "Total", + "refId": "B" + }, + { + "exemplar": true, + "expr": "(sum(avg (irate(process_cpu_seconds_total{job=\"eth2\"}[$__rate_interval]))) + sum(avg (irate(process_cpu_seconds_total{job=\"validator\"}[$__rate_interval])))) * 100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", + "instant": false, + "interval": "", + "legendFormat": "Lighthouse", "refId": "A" + }, + { + "exemplar": true, + "expr": "100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "Single Core Cap", + "refId": "C" } ], - "title": "CPU Temp", - "type": "stat" + "timeFrom": null, + "timeShift": null, + "title": "CPU Usage", + "type": "timeseries" }, { "datasource": null, @@ -1166,7 +1249,7 @@ { "matcher": { "id": "byName", - "options": "Beacon (eth2) Client" + "options": "Lighthouse" }, "properties": [ { @@ -1403,7 +1486,7 @@ }, { "datasource": null, - "description": "Tracks the amount of CPU consumption for the eth2 client and the total system. 100% means all of your CPU core are being used at their full capacity. The yellow line indicates how much CPU a single core can provide in your system.", + "description": "This tracks how long it takes between one of your processes trying to read from / write to your SSD, and when that operation is actually performed. Think of this like \"how long SSD reads and writes have to wait in a queue before completing\". The longer this time, the longer it takes for your node to perform its Beacon Chain duties.", "fieldConfig": { "defaults": { "color": { @@ -1447,60 +1530,21 @@ } ] }, - "unit": "short" + "unit": "s" }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Single Core Cap" - }, - "properties": [ - { - "id": "custom.fillOpacity", - "value": 0 - }, - { - "id": "custom.lineWidth", - "value": 2 - }, - { - "id": "color", - "value": { - "fixedColor": "yellow", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Lighthouse" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "#3274D9", - "mode": "fixed" - } - } - ] - } - ] + "overrides": [] }, "gridPos": { "h": 5, "w": 6, "x": 0, - "y": 12 + "y": 14 }, - "id": 56, + "id": 76, "options": { "legend": { "calcs": [], - "displayMode": "list", + "displayMode": "hidden", "placement": "bottom" }, "tooltip": { @@ -1511,34 +1555,15 @@ "targets": [ { "exemplar": true, - "expr": "(1 - avg by (instance) (irate(node_cpu_seconds_total{job=\"node\", mode=\"idle\"}[$__rate_interval]))) * 100", - "hide": false, - "interval": "", - "legendFormat": "Total", - "refId": "B" - }, - { - "exemplar": true, - "expr": "(sum(avg (irate(process_cpu_seconds_total{job=\"eth2\"}[$__rate_interval]))) + sum(avg (irate(process_cpu_seconds_total{job=\"validator\"}[$__rate_interval])))) * 100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", - "instant": false, + "expr": "irate(node_pressure_io_waiting_seconds_total{job=\"node\"}[$__rate_interval])", "interval": "", - "legendFormat": "Lighthouse", + "legendFormat": "", "refId": "A" - }, - { - "exemplar": true, - "expr": "100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "legendFormat": "Single Core Cap", - "refId": "C" } ], "timeFrom": null, "timeShift": null, - "title": "CPU Usage", + "title": "I/O Wait Time", "type": "timeseries" }, { @@ -1706,100 +1731,6 @@ "transparent": true, "type": "text" }, - { - "datasource": null, - "description": "The average read/write latency of your SSD. The lower it is, the faster your machine can process and respond to Beacon Chain activities like attesting. Change the `device` setting in the queries to be the SSD you want to track (typically the one with your chain data on it).\n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 70, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 2, - "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": 4, - "w": 6, - "x": 0, - "y": 17 - }, - "id": 70, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "pluginVersion": "8.1.1", - "targets": [ - { - "exemplar": true, - "expr": "irate(node_disk_write_time_seconds_total{job=\"node\", device=\"\"}[$__rate_interval]) / irate(node_disk_writes_completed_total{job=\"node\", device=\"\"}[$__rate_interval])", - "hide": false, - "interval": "", - "legendFormat": "Write", - "refId": "B" - }, - { - "exemplar": true, - "expr": "irate(node_disk_read_time_seconds_total{job=\"node\", device=\"\"}[$__rate_interval]) / irate(node_disk_reads_completed_total{job=\"node\", device=\"\"}[$__rate_interval])", - "interval": "", - "legendFormat": "Read", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "SSD Latency", - "type": "timeseries" - }, { "datasource": null, "description": "The total ETH balance of all of your Rocket Pool validators on the Beacon Chain.", @@ -2007,7 +1938,7 @@ }, { "datasource": null, - "description": "A chart showing the network I/O used by your main network adapter over time. To make it work, change the `device` setting in the queries to match the name of the network adapter you want to track (you can use `ifconfig` to get a list of network adapters and find the right one). \n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "description": "The average read/write latency of your SSD. The lower it is, the faster your machine can process and respond to Beacon Chain activities like attesting. Change the `device` setting in the queries to be the SSD you want to track (typically the one with your chain data on it).\n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", "fieldConfig": { "defaults": { "color": { @@ -2048,10 +1979,96 @@ { "color": "green", "value": null - }, + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 19 + }, + "id": 70, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "irate(node_disk_write_time_seconds_total{job=\"node\", device=\"\"}[$__rate_interval]) / irate(node_disk_writes_completed_total{job=\"node\", device=\"\"}[$__rate_interval])", + "hide": false, + "interval": "", + "legendFormat": "Write", + "refId": "B" + }, + { + "exemplar": true, + "expr": "irate(node_disk_read_time_seconds_total{job=\"node\", device=\"\"}[$__rate_interval]) / irate(node_disk_reads_completed_total{job=\"node\", device=\"\"}[$__rate_interval])", + "interval": "", + "legendFormat": "Read", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "SSD Latency", + "type": "timeseries" + }, + { + "datasource": null, + "description": "A chart showing the network I/O used by your main network adapter over time. To make it work, change the `device` setting in the queries to match the name of the network adapter you want to track (you can use `ifconfig` to get a list of network adapters and find the right one). \n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ { - "color": "red", - "value": 80 + "color": "green", + "value": null } ] }, @@ -2283,88 +2300,6 @@ "title": "Your Validator APR", "type": "stat" }, - { - "datasource": null, - "description": "This tracks how long it takes between one of your processes trying to read from / write to your SSD, and when that operation is actually performed. Think of this like \"how long SSD reads and writes have to wait in a queue before completing\". The longer this time, the longer it takes for your node to perform its Beacon Chain duties.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 70, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 2, - "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": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 0, - "y": 21 - }, - "id": 76, - "options": { - "legend": { - "calcs": [], - "displayMode": "hidden", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "pluginVersion": "8.1.1", - "targets": [ - { - "exemplar": true, - "expr": "irate(node_pressure_io_waiting_seconds_total{job=\"node\"}[$__rate_interval])", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "I/O Wait Time", - "type": "timeseries" - }, { "datasource": null, "gridPos": { @@ -2552,7 +2487,7 @@ } ] }, - "unit": "ETH" + "unit": "locale" }, "overrides": [] }, @@ -2610,7 +2545,7 @@ } ] }, - "unit": "RPL" + "unit": "locale" }, "overrides": [] }, @@ -2668,7 +2603,7 @@ } ] }, - "unit": "RPL" + "unit": "locale" }, "overrides": [] }, @@ -3765,5 +3700,5 @@ "timezone": "", "title": "Rocket Pool Dashboard v1.0.0 for Lighthouse", "uid": "Ur22GG77z2", - "version": 16 + "version": 20 } \ No newline at end of file diff --git a/Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json b/Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json index 4ea3913c..5a621b66 100644 --- a/Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json +++ b/Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json @@ -22,7 +22,7 @@ "gnetId": null, "graphTooltip": 0, "id": 6, - "iteration": 1629061153211, + "iteration": 1629127721331, "links": [], "panels": [ { @@ -652,7 +652,7 @@ }, { "datasource": null, - "description": "Your CPU's current clock speed (averaged across all cores)", + "description": "The temperature of your CPU (you can set this to Tctl or Tdie, whichever you prefer to monitor).\n\nTo get the correct chip and sensor ID, you'll want to run `sensors` from the `lm-sensors` package. See the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", "fieldConfig": { "defaults": { "color": { @@ -663,12 +663,20 @@ "mode": "absolute", "steps": [ { - "color": "yellow", + "color": "green", "value": null + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 65 } ] }, - "unit": "hertz" + "unit": "celsius" }, "overrides": [] }, @@ -678,10 +686,10 @@ "x": 4, "y": 5 }, - "id": 78, + "id": 82, "options": { "colorMode": "value", - "graphMode": "none", + "graphMode": "area", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { @@ -698,13 +706,13 @@ "targets": [ { "exemplar": true, - "expr": "avg(node_cpu_frequency_max_hertz{job=\"node\"})", + "expr": "node_hwmon_temp_celsius{job=\"node\", chip=\"\", sensor=\"\"}", "interval": "", "legendFormat": "", "refId": "A" } ], - "title": "CPU Speed", + "title": "CPU Temp", "type": "stat" }, { @@ -1058,11 +1066,39 @@ }, { "datasource": null, - "description": "The temperature of your CPU (you can set this to Tctl or Tdie, whichever you prefer to monitor).\n\nTo get the correct chip and sensor ID, you'll want to run `sensors` from the `lm-sensors` package. See the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "description": "Tracks the amount of CPU consumption for the eth2 client and the total system. 100% means all of your CPU core are being used at their full capacity. The yellow line indicates how much CPU a single core can provide in your system.", "fieldConfig": { "defaults": { "color": { - "mode": "thresholds" + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } }, "mappings": [], "thresholds": { @@ -1071,55 +1107,102 @@ { "color": "green", "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Single Core Cap" + }, + "properties": [ + { + "id": "custom.fillOpacity", + "value": 0 }, { - "color": "#EAB839", - "value": 50 + "id": "custom.lineWidth", + "value": 2 }, { - "color": "red", - "value": 65 + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } } ] }, - "unit": "celsius" - }, - "overrides": [] + { + "matcher": { + "id": "byName", + "options": "Nimbus" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#3274D9", + "mode": "fixed" + } + } + ] + } + ] }, "gridPos": { - "h": 4, + "h": 6, "w": 6, "x": 0, "y": 8 }, - "id": 82, + "id": 56, "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" }, - "text": {}, - "textMode": "auto" + "tooltip": { + "mode": "single" + } }, "pluginVersion": "8.1.1", "targets": [ { "exemplar": true, - "expr": "node_hwmon_temp_celsius{job=\"node\", chip=\"\", sensor=\"\"}", + "expr": "(1 - avg by (instance) (irate(node_cpu_seconds_total{job=\"node\", mode=\"idle\"}[$__rate_interval]))) * 100", + "hide": false, "interval": "", - "legendFormat": "", + "legendFormat": "Total", + "refId": "B" + }, + { + "exemplar": true, + "expr": "avg (irate(process_cpu_seconds_total{job=\"eth2\"}[$__rate_interval])) * 100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", + "instant": false, + "interval": "", + "legendFormat": "Nimbus", "refId": "A" + }, + { + "exemplar": true, + "expr": "100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "Single Core Cap", + "refId": "C" } ], - "title": "CPU Temp", - "type": "stat" + "timeFrom": null, + "timeShift": null, + "title": "CPU Usage", + "type": "timeseries" }, { "datasource": null, @@ -1190,7 +1273,7 @@ { "matcher": { "id": "byName", - "options": "Beacon (eth2) Client" + "options": "Nimbus" }, "properties": [ { @@ -1427,7 +1510,7 @@ }, { "datasource": null, - "description": "Tracks the amount of CPU consumption for the eth2 client and the total system. 100% means all of your CPU core are being used at their full capacity. The yellow line indicates how much CPU a single core can provide in your system.", + "description": "This tracks how long it takes between one of your processes trying to read from / write to your SSD, and when that operation is actually performed. Think of this like \"how long SSD reads and writes have to wait in a queue before completing\". The longer this time, the longer it takes for your node to perform its Beacon Chain duties.", "fieldConfig": { "defaults": { "color": { @@ -1471,60 +1554,21 @@ } ] }, - "unit": "short" + "unit": "s" }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Single Core Cap" - }, - "properties": [ - { - "id": "custom.fillOpacity", - "value": 0 - }, - { - "id": "custom.lineWidth", - "value": 2 - }, - { - "id": "color", - "value": { - "fixedColor": "yellow", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Nimbus" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "#3274D9", - "mode": "fixed" - } - } - ] - } - ] + "overrides": [] }, "gridPos": { "h": 5, "w": 6, "x": 0, - "y": 12 + "y": 14 }, - "id": 56, + "id": 76, "options": { "legend": { "calcs": [], - "displayMode": "list", + "displayMode": "hidden", "placement": "bottom" }, "tooltip": { @@ -1535,34 +1579,15 @@ "targets": [ { "exemplar": true, - "expr": "(1 - avg by (instance) (irate(node_cpu_seconds_total{job=\"node\", mode=\"idle\"}[$__rate_interval]))) * 100", - "hide": false, - "interval": "", - "legendFormat": "Total", - "refId": "B" - }, - { - "exemplar": true, - "expr": "avg (irate(process_cpu_seconds_total{job=\"eth2\"}[$__rate_interval])) * 100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", - "instant": false, + "expr": "irate(node_pressure_io_waiting_seconds_total{job=\"node\"}[$__rate_interval])", "interval": "", - "legendFormat": "Nimbus", + "legendFormat": "", "refId": "A" - }, - { - "exemplar": true, - "expr": "100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "legendFormat": "Single Core Cap", - "refId": "C" } ], "timeFrom": null, "timeShift": null, - "title": "CPU Usage", + "title": "I/O Wait Time", "type": "timeseries" }, { @@ -1730,96 +1755,6 @@ "transparent": true, "type": "text" }, - { - "datasource": null, - "description": "The average read/write latency of your SSD. The lower it is, the faster your machine can process and respond to Beacon Chain activities like attesting. Change the `device` setting in the queries to be the SSD you want to track (typically the one with your chain data on it).\n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 70, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 2, - "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": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 0, - "y": 17 - }, - "id": 70, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "pluginVersion": "8.1.1", - "targets": [ - { - "exemplar": true, - "expr": "irate(node_disk_write_time_seconds_total{job=\"node\", device=\"\"}[$__rate_interval]) / irate(node_disk_writes_completed_total{job=\"node\", device=\"\"}[$__rate_interval])", - "hide": false, - "interval": "", - "legendFormat": "Write", - "refId": "B" - }, - { - "exemplar": true, - "expr": "irate(node_disk_read_time_seconds_total{job=\"node\", device=\"\"}[$__rate_interval]) / irate(node_disk_reads_completed_total{job=\"node\", device=\"\"}[$__rate_interval])", - "interval": "", - "legendFormat": "Read", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "SSD Latency", - "type": "timeseries" - }, { "datasource": null, "description": "The total ETH balance of all of your Rocket Pool validators on the Beacon Chain.", @@ -2013,7 +1948,7 @@ "targets": [ { "exemplar": true, - "expr": "((rocketpool_node_beacon_balance{job=\"rocketpool\"}) - (rocketpool_node_beacon_balance{job=\"rocketpool\"} offset 1d != 0)) / 32 * 365", + "expr": "((rocketpool_node_beacon_balance{job=\"rocketpool\"}) - (rocketpool_node_beacon_balance{job=\"rocketpool\"} offset 1d != 0)) / 32 / 2 * 365", "hide": false, "interval": "", "legendFormat": "annualized daily return", @@ -2025,6 +1960,96 @@ "title": "Solo Staking APR", "type": "stat" }, + { + "datasource": null, + "description": "The average read/write latency of your SSD. The lower it is, the faster your machine can process and respond to Beacon Chain activities like attesting. Change the `device` setting in the queries to be the SSD you want to track (typically the one with your chain data on it).\n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "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": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 19 + }, + "id": 70, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "irate(node_disk_write_time_seconds_total{job=\"node\", device=\"\"}[$__rate_interval]) / irate(node_disk_writes_completed_total{job=\"node\", device=\"\"}[$__rate_interval])", + "hide": false, + "interval": "", + "legendFormat": "Write", + "refId": "B" + }, + { + "exemplar": true, + "expr": "irate(node_disk_read_time_seconds_total{job=\"node\", device=\"\"}[$__rate_interval]) / irate(node_disk_reads_completed_total{job=\"node\", device=\"\"}[$__rate_interval])", + "interval": "", + "legendFormat": "Read", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "SSD Latency", + "type": "timeseries" + }, { "datasource": null, "description": "A chart showing the network I/O used by your main network adapter over time. To make it work, change the `device` setting in the queries to match the name of the network adapter you want to track (you can use `ifconfig` to get a list of network adapters and find the right one). \n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", @@ -2299,88 +2324,6 @@ "title": "Your Validator APR", "type": "stat" }, - { - "datasource": null, - "description": "This tracks how long it takes between one of your processes trying to read from / write to your SSD, and when that operation is actually performed. Think of this like \"how long SSD reads and writes have to wait in a queue before completing\". The longer this time, the longer it takes for your node to perform its Beacon Chain duties.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 70, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 2, - "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": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 0, - "y": 21 - }, - "id": 76, - "options": { - "legend": { - "calcs": [], - "displayMode": "hidden", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "pluginVersion": "8.1.1", - "targets": [ - { - "exemplar": true, - "expr": "irate(node_pressure_io_waiting_seconds_total{job=\"node\"}[$__rate_interval])", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "I/O Wait Time", - "type": "timeseries" - }, { "datasource": null, "gridPos": { @@ -2568,7 +2511,7 @@ } ] }, - "unit": "ETH" + "unit": "locale" }, "overrides": [] }, @@ -2626,7 +2569,7 @@ } ] }, - "unit": "RPL" + "unit": "locale" }, "overrides": [] }, @@ -2684,7 +2627,7 @@ } ] }, - "unit": "RPL" + "unit": "locale" }, "overrides": [] }, @@ -3781,5 +3724,5 @@ "timezone": "", "title": "Rocket Pool Dashboard v1.0.0 for Nimbus", "uid": "Ur22GG77z4", - "version": 8 + "version": 13 } \ No newline at end of file diff --git a/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json b/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json index e7e5b3cd..2457337a 100644 --- a/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json +++ b/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json @@ -22,7 +22,7 @@ "gnetId": null, "graphTooltip": 0, "id": 5, - "iteration": 1629088135943, + "iteration": 1629134353595, "links": [], "panels": [ { @@ -652,7 +652,7 @@ }, { "datasource": null, - "description": "Your CPU's current clock speed (averaged across all cores)", + "description": "The temperature of your CPU (you can set this to Tctl or Tdie, whichever you prefer to monitor).\n\nTo get the correct chip and sensor ID, you'll want to run `sensors` from the `lm-sensors` package. See the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", "fieldConfig": { "defaults": { "color": { @@ -663,12 +663,20 @@ "mode": "absolute", "steps": [ { - "color": "yellow", + "color": "green", "value": null + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 65 } ] }, - "unit": "hertz" + "unit": "celsius" }, "overrides": [] }, @@ -678,10 +686,10 @@ "x": 4, "y": 5 }, - "id": 78, + "id": 82, "options": { "colorMode": "value", - "graphMode": "none", + "graphMode": "area", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { @@ -698,13 +706,13 @@ "targets": [ { "exemplar": true, - "expr": "avg(node_cpu_frequency_max_hertz{job=\"node\"})", + "expr": "node_hwmon_temp_celsius{job=\"node\", chip=\"\", sensor=\"\"}", "interval": "", "legendFormat": "", "refId": "A" } ], - "title": "CPU Speed", + "title": "CPU Temp", "type": "stat" }, { @@ -965,7 +973,7 @@ "targets": [ { "exemplar": true, - "expr": "sum(irate(validator_successful_attestations{job=\"validator\"}[$__rate_interval]) * on(pubkey) validator_inclusion_distance{job=\"validator\"}) * 15", + "expr": "sum(rate(validator_successful_attestations{job=\"validator\"}[$__rate_interval]) * on(pubkey) validator_inclusion_distance{job=\"validator\"}) * 45", "format": "time_series", "hide": false, "instant": false, @@ -1069,11 +1077,39 @@ }, { "datasource": null, - "description": "The temperature of your CPU (you can set this to Tctl or Tdie, whichever you prefer to monitor).\n\nTo get the correct chip and sensor ID, you'll want to run `sensors` from the `lm-sensors` package. See the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "description": "Tracks the amount of CPU consumption for the eth2 client and the total system. 100% means all of your CPU core are being used at their full capacity. The yellow line indicates how much CPU a single core can provide in your system.", "fieldConfig": { "defaults": { "color": { - "mode": "thresholds" + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } }, "mappings": [], "thresholds": { @@ -1082,55 +1118,102 @@ { "color": "green", "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Single Core Cap" + }, + "properties": [ + { + "id": "custom.fillOpacity", + "value": 0 }, { - "color": "#EAB839", - "value": 50 + "id": "custom.lineWidth", + "value": 2 }, { - "color": "red", - "value": 65 + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } } ] }, - "unit": "celsius" - }, - "overrides": [] + { + "matcher": { + "id": "byName", + "options": "Prysm" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#3274D9", + "mode": "fixed" + } + } + ] + } + ] }, "gridPos": { - "h": 4, + "h": 6, "w": 6, "x": 0, "y": 8 }, - "id": 82, + "id": 56, "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" }, - "text": {}, - "textMode": "auto" + "tooltip": { + "mode": "single" + } }, "pluginVersion": "8.1.1", "targets": [ { "exemplar": true, - "expr": "node_hwmon_temp_celsius{job=\"node\", chip=\"\", sensor=\"\"}", + "expr": "(1 - avg by (instance) (irate(node_cpu_seconds_total{job=\"node\", mode=\"idle\"}[$__rate_interval]))) * 100", + "hide": false, "interval": "", - "legendFormat": "", + "legendFormat": "Total", + "refId": "B" + }, + { + "exemplar": true, + "expr": "(sum(avg (irate(process_cpu_seconds_total{job=\"eth2\"}[$__rate_interval]))) + sum(avg (irate(process_cpu_seconds_total{job=\"validator\"}[$__rate_interval])))) * 100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", + "instant": false, + "interval": "", + "legendFormat": "Prysm", "refId": "A" + }, + { + "exemplar": true, + "expr": "100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "Single Core Cap", + "refId": "C" } ], - "title": "CPU Temp", - "type": "stat" + "timeFrom": null, + "timeShift": null, + "title": "CPU Usage", + "type": "timeseries" }, { "datasource": null, @@ -1438,7 +1521,7 @@ }, { "datasource": null, - "description": "Tracks the amount of CPU consumption for the eth2 client and the total system. 100% means all of your CPU core are being used at their full capacity. The yellow line indicates how much CPU a single core can provide in your system.", + "description": "This tracks how long it takes between one of your processes trying to read from / write to your SSD, and when that operation is actually performed. Think of this like \"how long SSD reads and writes have to wait in a queue before completing\". The longer this time, the longer it takes for your node to perform its Beacon Chain duties.", "fieldConfig": { "defaults": { "color": { @@ -1482,60 +1565,21 @@ } ] }, - "unit": "short" + "unit": "s" }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Single Core Cap" - }, - "properties": [ - { - "id": "custom.fillOpacity", - "value": 0 - }, - { - "id": "custom.lineWidth", - "value": 2 - }, - { - "id": "color", - "value": { - "fixedColor": "yellow", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Prysm" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "#3274D9", - "mode": "fixed" - } - } - ] - } - ] + "overrides": [] }, "gridPos": { "h": 5, "w": 6, "x": 0, - "y": 12 + "y": 14 }, - "id": 56, + "id": 76, "options": { "legend": { "calcs": [], - "displayMode": "list", + "displayMode": "hidden", "placement": "bottom" }, "tooltip": { @@ -1546,34 +1590,15 @@ "targets": [ { "exemplar": true, - "expr": "(1 - avg by (instance) (irate(node_cpu_seconds_total{job=\"node\", mode=\"idle\"}[$__rate_interval]))) * 100", - "hide": false, - "interval": "", - "legendFormat": "Total", - "refId": "B" - }, - { - "exemplar": true, - "expr": "(sum(avg (irate(process_cpu_seconds_total{job=\"eth2\"}[$__rate_interval]))) + sum(avg (irate(process_cpu_seconds_total{job=\"validator\"}[$__rate_interval])))) * 100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", - "instant": false, + "expr": "irate(node_pressure_io_waiting_seconds_total{job=\"node\"}[$__rate_interval])", "interval": "", - "legendFormat": "Prysm", + "legendFormat": "", "refId": "A" - }, - { - "exemplar": true, - "expr": "100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "legendFormat": "Single Core Cap", - "refId": "C" } ], "timeFrom": null, "timeShift": null, - "title": "CPU Usage", + "title": "I/O Wait Time", "type": "timeseries" }, { @@ -1741,96 +1766,6 @@ "transparent": true, "type": "text" }, - { - "datasource": null, - "description": "The average read/write latency of your SSD. The lower it is, the faster your machine can process and respond to Beacon Chain activities like attesting. Change the `device` setting in the queries to be the SSD you want to track (typically the one with your chain data on it).\n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 70, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 2, - "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": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 0, - "y": 17 - }, - "id": 70, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "pluginVersion": "8.1.1", - "targets": [ - { - "exemplar": true, - "expr": "irate(node_disk_write_time_seconds_total{job=\"node\", device=\"\"}[$__rate_interval]) / irate(node_disk_writes_completed_total{job=\"node\", device=\"\"}[$__rate_interval])", - "hide": false, - "interval": "", - "legendFormat": "Write", - "refId": "B" - }, - { - "exemplar": true, - "expr": "irate(node_disk_read_time_seconds_total{job=\"node\", device=\"\"}[$__rate_interval]) / irate(node_disk_reads_completed_total{job=\"node\", device=\"\"}[$__rate_interval])", - "interval": "", - "legendFormat": "Read", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "SSD Latency", - "type": "timeseries" - }, { "datasource": null, "description": "The total ETH balance of all of your Rocket Pool validators on the Beacon Chain.", @@ -2036,6 +1971,96 @@ "title": "Solo Staking APR", "type": "stat" }, + { + "datasource": null, + "description": "The average read/write latency of your SSD. The lower it is, the faster your machine can process and respond to Beacon Chain activities like attesting. Change the `device` setting in the queries to be the SSD you want to track (typically the one with your chain data on it).\n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "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": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 19 + }, + "id": 70, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "irate(node_disk_write_time_seconds_total{job=\"node\", device=\"\"}[$__rate_interval]) / irate(node_disk_writes_completed_total{job=\"node\", device=\"\"}[$__rate_interval])", + "hide": false, + "interval": "", + "legendFormat": "Write", + "refId": "B" + }, + { + "exemplar": true, + "expr": "irate(node_disk_read_time_seconds_total{job=\"node\", device=\"\"}[$__rate_interval]) / irate(node_disk_reads_completed_total{job=\"node\", device=\"\"}[$__rate_interval])", + "interval": "", + "legendFormat": "Read", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "SSD Latency", + "type": "timeseries" + }, { "datasource": null, "description": "A chart showing the network I/O used by your main network adapter over time. To make it work, change the `device` setting in the queries to match the name of the network adapter you want to track (you can use `ifconfig` to get a list of network adapters and find the right one). \n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", @@ -2310,88 +2335,6 @@ "title": "Your Validator APR", "type": "stat" }, - { - "datasource": null, - "description": "This tracks how long it takes between one of your processes trying to read from / write to your SSD, and when that operation is actually performed. Think of this like \"how long SSD reads and writes have to wait in a queue before completing\". The longer this time, the longer it takes for your node to perform its Beacon Chain duties.", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 70, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 2, - "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": "s" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 6, - "x": 0, - "y": 21 - }, - "id": 76, - "options": { - "legend": { - "calcs": [], - "displayMode": "hidden", - "placement": "bottom" - }, - "tooltip": { - "mode": "single" - } - }, - "pluginVersion": "8.1.1", - "targets": [ - { - "exemplar": true, - "expr": "irate(node_pressure_io_waiting_seconds_total{job=\"node\"}[$__rate_interval])", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "timeFrom": null, - "timeShift": null, - "title": "I/O Wait Time", - "type": "timeseries" - }, { "datasource": null, "gridPos": { @@ -2579,7 +2522,7 @@ } ] }, - "unit": "ETH" + "unit": "locale" }, "overrides": [] }, @@ -2637,7 +2580,7 @@ } ] }, - "unit": "RPL" + "unit": "locale" }, "overrides": [] }, @@ -2695,7 +2638,7 @@ } ] }, - "unit": "RPL" + "unit": "locale" }, "overrides": [] }, @@ -3792,5 +3735,5 @@ "timezone": "", "title": "Rocket Pool Dashboard v1.0.0 for Prysm", "uid": "Ur22GG77z3", - "version": 10 + "version": 11 } \ No newline at end of file From ca4f773ac5e65c8825659a0709a73dcd5b8757d1 Mon Sep 17 00:00:00 2001 From: Joe Clapis Date: Mon, 16 Aug 2021 14:34:51 -0400 Subject: [PATCH 04/14] Updated dashboards so the solo-staking APR is divided by number of minipools --- Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json | 6 +++--- Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json | 6 +++--- Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json b/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json index e31695a4..033d37fd 100644 --- a/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json +++ b/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json @@ -22,7 +22,7 @@ "gnetId": null, "graphTooltip": 0, "id": 4, - "iteration": 1629134636969, + "iteration": 1629138267746, "links": [], "panels": [ { @@ -1924,7 +1924,7 @@ "targets": [ { "exemplar": true, - "expr": "((rocketpool_node_beacon_balance{job=\"rocketpool\"}) - (rocketpool_node_beacon_balance{job=\"rocketpool\"} offset 1d != 0)) / 32 * 365", + "expr": "((rocketpool_node_beacon_balance{job=\"rocketpool\"}) - (rocketpool_node_beacon_balance{job=\"rocketpool\"} offset 1d != 0)) / 32 / rocketpool_node_active_minipool_count{job=\"rocketpool\"} * 365", "hide": false, "interval": "", "legendFormat": "annualized daily return", @@ -3700,5 +3700,5 @@ "timezone": "", "title": "Rocket Pool Dashboard v1.0.0 for Lighthouse", "uid": "Ur22GG77z2", - "version": 20 + "version": 21 } \ No newline at end of file diff --git a/Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json b/Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json index 5a621b66..9c346cb2 100644 --- a/Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json +++ b/Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json @@ -1948,7 +1948,7 @@ "targets": [ { "exemplar": true, - "expr": "((rocketpool_node_beacon_balance{job=\"rocketpool\"}) - (rocketpool_node_beacon_balance{job=\"rocketpool\"} offset 1d != 0)) / 32 / 2 * 365", + "expr": "((rocketpool_node_beacon_balance{job=\"rocketpool\"}) - (rocketpool_node_beacon_balance{job=\"rocketpool\"} offset 1d != 0)) / 32 / rocketpool_node_active_minipool_count{job=\"rocketpool\"} * 365", "hide": false, "interval": "", "legendFormat": "annualized daily return", @@ -3674,7 +3674,7 @@ { "allValue": null, "current": { - "selected": false, + "selected": true, "text": "eth2:9100", "value": "eth2:9100" }, @@ -3724,5 +3724,5 @@ "timezone": "", "title": "Rocket Pool Dashboard v1.0.0 for Nimbus", "uid": "Ur22GG77z4", - "version": 13 + "version": 14 } \ No newline at end of file diff --git a/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json b/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json index 2457337a..4aed4528 100644 --- a/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json +++ b/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json @@ -22,7 +22,7 @@ "gnetId": null, "graphTooltip": 0, "id": 5, - "iteration": 1629134353595, + "iteration": 1629138314346, "links": [], "panels": [ { @@ -1959,7 +1959,7 @@ "targets": [ { "exemplar": true, - "expr": "((rocketpool_node_beacon_balance{job=\"rocketpool\"}) - (rocketpool_node_beacon_balance{job=\"rocketpool\"} offset 1d != 0)) / 32 * 365", + "expr": "((rocketpool_node_beacon_balance{job=\"rocketpool\"}) - (rocketpool_node_beacon_balance{job=\"rocketpool\"} offset 1d != 0)) / 32 / rocketpool_node_active_minipool_count{job=\"rocketpool\"} * 365", "hide": false, "interval": "", "legendFormat": "annualized daily return", @@ -3735,5 +3735,5 @@ "timezone": "", "title": "Rocket Pool Dashboard v1.0.0 for Prysm", "uid": "Ur22GG77z3", - "version": 11 + "version": 12 } \ No newline at end of file From 3635638e85cb6309343921d27ada028f0d44b32a Mon Sep 17 00:00:00 2001 From: Joe Clapis Date: Mon, 16 Aug 2021 15:06:57 -0400 Subject: [PATCH 05/14] Fixed the Prysm inclusion distance graph --- Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json b/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json index 4aed4528..f33e0f60 100644 --- a/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json +++ b/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json @@ -22,7 +22,7 @@ "gnetId": null, "graphTooltip": 0, "id": 5, - "iteration": 1629138314346, + "iteration": 1629139895456, "links": [], "panels": [ { @@ -923,7 +923,7 @@ "viz": false }, "lineInterpolation": "stepBefore", - "lineWidth": 0, + "lineWidth": 3, "pointSize": 5, "scaleDistribution": { "type": "linear" @@ -938,6 +938,7 @@ "mode": "off" } }, + "decimals": 1, "mappings": [], "thresholds": { "mode": "absolute", @@ -973,7 +974,7 @@ "targets": [ { "exemplar": true, - "expr": "sum(rate(validator_successful_attestations{job=\"validator\"}[$__rate_interval]) * on(pubkey) validator_inclusion_distance{job=\"validator\"}) * 45", + "expr": "irate(validator_successful_attestations{job=\"validator\"}[$__rate_interval]) * on(pubkey) validator_inclusion_distance{job=\"validator\"} * 15", "format": "time_series", "hide": false, "instant": false, @@ -3735,5 +3736,5 @@ "timezone": "", "title": "Rocket Pool Dashboard v1.0.0 for Prysm", "uid": "Ur22GG77z3", - "version": 12 + "version": 13 } \ No newline at end of file From 9a30ff7dd58d492859d0a715fab2d1666e28363d Mon Sep 17 00:00:00 2001 From: Joe Clapis Date: Mon, 16 Aug 2021 23:35:45 -0400 Subject: [PATCH 06/14] Added metrics support for Teku, updated to v21.8.1 --- ...Rocket Pool Dashboard v1.0.0 for Teku.json | 3724 +++++++++++++++++ .../prater/chains/eth2/start-beacon.sh | 4 + .../prater/chains/eth2/start-validator.sh | 8 +- .../network/prater/config.yml | 2 +- .../prater/chains/eth2/start-beacon.sh | 4 + .../prater/chains/eth2/start-validator.sh | 8 +- .../network/prater/config.yml | 2 +- 7 files changed, 3748 insertions(+), 4 deletions(-) create mode 100644 Dashboards/Rocket Pool Dashboard v1.0.0 for Teku.json diff --git a/Dashboards/Rocket Pool Dashboard v1.0.0 for Teku.json b/Dashboards/Rocket Pool Dashboard v1.0.0 for Teku.json new file mode 100644 index 00000000..1dfc87b1 --- /dev/null +++ b/Dashboards/Rocket Pool Dashboard v1.0.0 for Teku.json @@ -0,0 +1,3724 @@ +{ + "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" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": 8, + "iteration": 1629168757699, + "links": [], + "panels": [ + { + "datasource": null, + "gridPos": { + "h": 1, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 163, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "title": "Hardware Stats", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "gridPos": { + "h": 1, + "w": 9, + "x": 13, + "y": 0 + }, + "id": 165, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "title": "Validator Stats", + "transparent": true, + "type": "text" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "A count of how long Teku's Beacon Chain client has been running. If you don't restart it, this is about the same as your total system uptime.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgb(212, 212, 212)", + "value": null + } + ] + }, + "unit": "dtdhms" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 0, + "y": 1 + }, + "id": 40, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "time() - process_start_time_seconds{job=\"eth2\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Beacon Client Uptime", + "type": "stat" + }, + { + "datasource": null, + "description": "This will turn red when you system needs to be rebooted because of security updates.\n\nSetting this up is Operating System specific, so it doesn't come ready out of the box; see the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "0": { + "color": "transparent", + "index": 1, + "text": "No" + }, + "1": { + "color": "red", + "index": 0, + "text": "Reboot Required" + } + }, + "type": "value" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 3, + "y": 1 + }, + "id": 224, + "options": { + "colorMode": "background", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_reboot_required{job=\"node\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Reboot Needed?", + "type": "stat" + }, + { + "datasource": null, + "description": "Tracks any updates that are available for your OS or for Rocket Pool but haven't been applied yet. When one of these numbers is higher than 0, it means you should update your system or Rocket Pool accordingly.\n\nSetting this up is Operating System specific, so it doesn't come ready out of the box; see the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + }, + { + "color": "red", + "value": 1 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 6, + "y": 1 + }, + "id": 94, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "max(apt_upgrades_pending{job=\"node\"})", + "interval": "", + "legendFormat": "OS", + "refId": "A" + }, + { + "exemplar": true, + "expr": "max(rocketpool_version_update{job=\"node\"})", + "hide": false, + "interval": "", + "legendFormat": "Rocket Pool", + "refId": "B" + } + ], + "title": "Available Updates", + "type": "stat" + }, + { + "datasource": null, + "description": "How much of your total swap space you're currently using. If you have swap space enabled, you want this to be as low as possible - otherwise, your system is running out of free RAM.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "percentage", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 20 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 9, + "y": 1 + }, + "id": 92, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "((node_memory_SwapTotal_bytes{job=\"node\"} - node_memory_SwapFree_bytes{job=\"node\"}) / node_memory_SwapTotal_bytes{job=\"node\"})", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Swap Space Usage", + "type": "gauge" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "Tracks the activity of all of your validators on the Beacon Chain. This is a cumulative count; it starts at 0 when Teku first starts up, and then continuously increments as it goes.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 3, + "x": 13, + "y": 1 + }, + "id": 13, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "validator_duties_performed{job=\"validator\", type=\"attestation\", result=\"success\"}", + "hide": false, + "interval": "", + "legendFormat": "Attestations", + "refId": "B" + }, + { + "exemplar": true, + "expr": "validator_duties_performed{job=\"validator\", type=\"block\", result=\"success\"}", + "interval": "", + "legendFormat": "Proposals", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Validator Activity", + "type": "stat" + }, + { + "datasource": null, + "description": "Tracks the activity of all of your validators on the Beacon Chain.", + "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": "stepAfter", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 1, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 16, + "y": 1 + }, + "id": 30, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rate(validator_duties_performed{job=\"validator\", type=\"block\", result=\"success\"}[$__rate_interval]) * 45", + "hide": false, + "interval": "", + "legendFormat": "Proposal", + "refId": "A" + }, + { + "exemplar": true, + "expr": "rate(validator_duties_performed{job=\"validator\", type=\"attestation\", result=\"success\"}[$__rate_interval]) * 45", + "interval": "", + "legendFormat": "Attestation", + "refId": "B" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Validator Activity", + "type": "timeseries" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "The total CPU usage of Teku's Beacon Chain and Validator clients combined, with respect to all cores on your CPU.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "semi-dark-blue", + "value": null + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 0, + "y": 5 + }, + "id": 8, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "(sum(avg (irate(process_cpu_seconds_total{job=\"eth2\"}[$__rate_interval]))) + sum(avg (irate(process_cpu_seconds_total{job=\"validator\"}[$__rate_interval])))) * 100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Teku CPU", + "type": "stat" + }, + { + "datasource": null, + "description": "The total CPU usage of your machine, with respect to all cores.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 2, + "y": 5 + }, + "id": 66, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "1 - avg (irate(node_cpu_seconds_total{job=\"node\", mode=\"idle\"}[$__rate_interval]))", + "interval": "", + "legendFormat": "Core {{cpu}}", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Total CPU", + "type": "stat" + }, + { + "datasource": null, + "description": "The temperature of your CPU (you can set this to Tctl or Tdie, whichever you prefer to monitor).\n\nTo get the correct chip and sensor ID, you'll want to run `sensors` from the `lm-sensors` package. See the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 50 + }, + { + "color": "red", + "value": 65 + } + ] + }, + "unit": "celsius" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 4, + "y": 5 + }, + "id": 82, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_hwmon_temp_celsius{job=\"node\", chip=\"\", sensor=\"\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "CPU Temp", + "type": "stat" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "The amount of RAM that the Teku Beacon Chain and Validator clients are using together.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 6, + "y": 5 + }, + "id": 6, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "sum(process_resident_memory_bytes{job=\"eth2\"}) + sum(process_resident_memory_bytes{job=\"validator\"})", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Teku RAM", + "type": "stat" + }, + { + "datasource": null, + "description": "The total amount of RAM that your system is currently using.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 8, + "y": 5 + }, + "id": 62, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_memory_MemTotal_bytes{job=\"node\"} - node_memory_MemAvailable_bytes{job=\"node\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Used RAM", + "type": "stat" + }, + { + "datasource": null, + "description": "The total amount of RAM that your system has installed.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "dark-yellow", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 5 + }, + "id": 64, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_memory_MemTotal_bytes{job=\"node\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total RAM", + "type": "stat" + }, + { + "datasource": null, + "description": "This tracks the average inclusion distance for your attestations - a distance of 1 means your attestations were sent as quickly as possible to the network and arrived on time. Anything larger than 1 and you might have a small penalty for being late.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "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": 6, + "w": 6, + "x": 16, + "y": 5 + }, + "id": 26, + "interval": "", + "options": { + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "validator_performance_inclusion_distance_average{job=\"eth2\"}", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Average Inclusion Distance", + "transformations": [], + "type": "timeseries" + }, + { + "datasource": null, + "description": "How many attestations are currently scheduled for your validators.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "color": "text", + "index": 0, + "text": "Not Implemented" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 13, + "y": 7 + }, + "id": 154, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "validator_scheduled_attestation_duties_current{job=\"validator\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Scheduled Attestations", + "type": "stat" + }, + { + "datasource": null, + "description": "Tracks the amount of CPU consumption for the eth2 client and the total system. 100% means all of your CPU core are being used at their full capacity. The yellow line indicates how much CPU a single core can provide in your system.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "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": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Single Core Cap" + }, + "properties": [ + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.lineWidth", + "value": 2 + }, + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Teku" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#3274D9", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 8 + }, + "id": 56, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "(1 - avg by (instance) (irate(node_cpu_seconds_total{job=\"node\", mode=\"idle\"}[$__rate_interval]))) * 100", + "hide": false, + "interval": "", + "legendFormat": "Total", + "refId": "B" + }, + { + "exemplar": true, + "expr": "(sum(avg (irate(process_cpu_seconds_total{job=\"eth2\"}[$__rate_interval]))) + sum(avg (irate(process_cpu_seconds_total{job=\"validator\"}[$__rate_interval])))) * 100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", + "instant": false, + "interval": "", + "legendFormat": "Teku", + "refId": "A" + }, + { + "exemplar": true, + "expr": "100 / (count (node_cpu_seconds_total{job=\"node\", mode=\"idle\"}))", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "Single Core Cap", + "refId": "C" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "CPU Usage", + "type": "timeseries" + }, + { + "datasource": null, + "description": "Tracks the total amount of RAM usage by the eth2 client and the entire system, versus how much is available.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "decbytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Used" + }, + "properties": [ + { + "id": "custom.fillOpacity", + "value": 70 + }, + { + "id": "custom.lineWidth", + "value": 4 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Teku" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#3274D9", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 70 + }, + { + "id": "custom.lineWidth", + "value": 4 + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 6, + "y": 8 + }, + "id": 60, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_memory_MemTotal_bytes{job=\"node\"} - node_memory_MemAvailable_bytes{job=\"node\"}", + "interval": "", + "legendFormat": "Used", + "refId": "A" + }, + { + "exemplar": true, + "expr": "node_memory_MemTotal_bytes{job=\"node\"}", + "hide": false, + "interval": "", + "legendFormat": "Total", + "refId": "B" + }, + { + "exemplar": true, + "expr": "sum(process_resident_memory_bytes{job=\"eth2\"}) + sum(process_resident_memory_bytes{job=\"validator\"})", + "hide": false, + "interval": "", + "legendFormat": "Teku", + "refId": "C" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "RAM Usage", + "type": "timeseries" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "How many peers Teku is currently connected to on the Beacon Chain.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 74, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "#EAB839", + "value": 20 + }, + { + "color": "green", + "value": 40 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 13, + "y": 10 + }, + "id": 12, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "beacon_peer_count{job=\"eth2\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Peers", + "type": "gauge" + }, + { + "datasource": null, + "description": "How many peers Teku is currently connected to for Beacon Chain traffic.", + "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" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 16, + "y": 11 + }, + "id": 51, + "options": { + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "beacon_peer_count{job=\"eth2\"}", + "interval": "", + "legendFormat": "", + "refId": "B" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Peers", + "type": "timeseries" + }, + { + "datasource": null, + "description": "This tracks how long it takes between one of your processes trying to read from / write to your SSD, and when that operation is actually performed. Think of this like \"how long SSD reads and writes have to wait in a queue before completing\". The longer this time, the longer it takes for your node to perform its Beacon Chain duties.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "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": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 6, + "x": 0, + "y": 14 + }, + "id": 76, + "options": { + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "irate(node_pressure_io_waiting_seconds_total{job=\"node\"}[$__rate_interval])", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "I/O Wait Time", + "type": "timeseries" + }, + { + "datasource": null, + "description": "The disk space used by your primary (Operating System) hard drive. Change the `device` option in this query to be your machine's hard drive.\n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 0.75 + }, + { + "color": "red", + "value": 0.9 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 6, + "y": 14 + }, + "id": 88, + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "(node_filesystem_size_bytes{job=\"node\", device=\"\", mountpoint=\"/\"} - node_filesystem_avail_bytes{job=\"node\", device=\"\", mountpoint=\"/\"}) / node_filesystem_size_bytes{job=\"node\", device=\"\", mountpoint=\"/\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "OS Disk Space Used", + "type": "gauge" + }, + { + "datasource": null, + "description": "An optional space monitor for a second disk or partition on your system. If you store your chain data on a separate drive or partition from your OS (such as with a Raspberry Pi), you can configure this to track that disk. Just modify the `device` setting in the query with your storage partition's path.\n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 0.75 + }, + { + "color": "red", + "value": 0.9 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 9, + "y": 14 + }, + "id": 90, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "(node_filesystem_size_bytes{job=\"node\", device=\"\"} - node_filesystem_avail_bytes{job=\"node\", device=\"\"}) / node_filesystem_size_bytes{job=\"node\", device=\"\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Disk 2 Space Used", + "type": "gauge" + }, + { + "datasource": null, + "description": "", + "gridPos": { + "h": 1, + "w": 9, + "x": 13, + "y": 15 + }, + "id": 184, + "options": { + "content": "
s", + "mode": "html" + }, + "pluginVersion": "8.1.1", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "gridPos": { + "h": 1, + "w": 9, + "x": 13, + "y": 16 + }, + "id": 212, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "title": "Beacon Chain Rewards (Updates Every 5 Minutes)", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "The total ETH balance of all of your Rocket Pool validators on the Beacon Chain.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 5, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + }, + "unit": "ETH" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 13, + "y": 17 + }, + "id": 72, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_beacon_balance{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total Validator Balance", + "type": "stat" + }, + { + "datasource": null, + "description": "The total amount of ETH you've earned on the Beacon Chain by running a Rocket Pool node. This is equal to your total share of the rewards, minus the 16 ETH you deposited for each minipool.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 4, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ETH" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 3, + "x": 16, + "y": 17 + }, + "id": 204, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_beacon_share{job=\"rocketpool\"} - rocketpool_node_deposited_eth{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Your Beacon Chain Earnings", + "type": "stat" + }, + { + "cacheTimeout": null, + "datasource": null, + "description": "The raw APR from the Beacon Chain across all of your validators. This is what you would get if you were solo staking all of your validators.\n\nCalculated by comparing today's balance with yesterday's balance.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#F2495C", + "value": null + }, + { + "color": "#FADE2A", + "value": 0 + }, + { + "color": "blue", + "value": 0.0001 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 19, + "y": 17 + }, + "id": 152, + "interval": null, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "((rocketpool_node_beacon_balance{job=\"rocketpool\"}) - (rocketpool_node_beacon_balance{job=\"rocketpool\"} offset 1d != 0)) / 32 / rocketpool_node_active_minipool_count{job=\"rocketpool\"} * 365", + "hide": false, + "interval": "", + "legendFormat": "annualized daily return", + "refId": "B" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Solo Staking APR", + "type": "stat" + }, + { + "datasource": null, + "description": "The average read/write latency of your SSD. The lower it is, the faster your machine can process and respond to Beacon Chain activities like attesting. Change the `device` setting in the queries to be the SSD you want to track (typically the one with your chain data on it).\n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "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": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 19 + }, + "id": 70, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "irate(node_disk_write_time_seconds_total{job=\"node\", device=\"\"}[$__rate_interval]) / irate(node_disk_writes_completed_total{job=\"node\", device=\"\"}[$__rate_interval])", + "hide": false, + "interval": "", + "legendFormat": "Write", + "refId": "B" + }, + { + "exemplar": true, + "expr": "irate(node_disk_read_time_seconds_total{job=\"node\", device=\"\"}[$__rate_interval]) / irate(node_disk_reads_completed_total{job=\"node\", device=\"\"}[$__rate_interval])", + "interval": "", + "legendFormat": "Read", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "SSD Latency", + "type": "timeseries" + }, + { + "datasource": null, + "description": "A chart showing the network I/O used by your main network adapter over time. To make it work, change the `device` setting in the queries to match the name of the network adapter you want to track (you can use `ifconfig` to get a list of network adapters and find the right one). \n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 70, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 2, + "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": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 6, + "y": 19 + }, + "id": 80, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "irate(node_network_transmit_bytes_total{job=\"node\", device=\"\"}[$__rate_interval])", + "hide": false, + "interval": "", + "legendFormat": "Tx", + "refId": "B" + }, + { + "exemplar": true, + "expr": "irate(node_network_receive_bytes_total{job=\"node\", device=\"\"}[$__rate_interval])", + "interval": "", + "legendFormat": "Rx", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Network Usage", + "type": "timeseries" + }, + { + "datasource": null, + "description": "The total network I/O that has gone through your main network adapter. To make it work, change the `device` setting in the queries to match the name of the network adapter you want to track (you can use `ifconfig` to get a list of network adapters and find the right one). \n\nSee the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 2, + "x": 10, + "y": 19 + }, + "id": 74, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "node_network_transmit_bytes_total{job=\"node\", device=\"\"}", + "hide": false, + "interval": "", + "legendFormat": "Tx", + "refId": "B" + }, + { + "exemplar": true, + "expr": "node_network_receive_bytes_total{job=\"node\", device=\"\"}", + "interval": "", + "legendFormat": "Rx", + "refId": "A" + } + ], + "title": "Total Net I/O", + "type": "stat" + }, + { + "datasource": null, + "description": "This is how much ETH you will receive if you exit all of your validators on the Beacon Chain; it's your share of the total balance for each Rocket Pool minipool.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 4, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ETH" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 13, + "y": 20 + }, + "id": 210, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_beacon_share{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Your Validator Share", + "type": "stat" + }, + { + "datasource": null, + "description": "Your APR from Beacon Chain rewards, which includes the your minipool's commission.\n\nCalculated by comparing today's balance with yesterday's balance.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 19, + "y": 20 + }, + "id": 206, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "((rocketpool_node_beacon_share{job=\"rocketpool\"}) - (rocketpool_node_beacon_share{job=\"rocketpool\"} offset 1d != 0)) / rocketpool_node_deposited_eth{job=\"rocketpool\"} * 365", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Your Validator APR", + "type": "stat" + }, + { + "datasource": null, + "gridPos": { + "h": 1, + "w": 9, + "x": 13, + "y": 23 + }, + "id": 186, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "title": "RPL Rewards (Updates Every 5 Minutes)", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "The time of the next RPL rewards checkpoint. If you have an effective RPL stake greater than zero, you should receive rewards here (unless it's your first checkpoint, in which case you'll need to wait a bit longer).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "text", + "value": null + } + ] + }, + "unit": "dateTimeAsLocalNoDateIfToday" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 5, + "x": 13, + "y": 24 + }, + "id": 218, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_rpl_checkpoint_time{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Next RPL Rewards Checkpoint", + "type": "stat" + }, + { + "datasource": null, + "description": "This tracks how long you have until the next RPL rewards checkpoint.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "text", + "value": null + } + ] + }, + "unit": "dateTimeFromNow" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 18, + "y": 24 + }, + "id": 216, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_rpl_checkpoint_time{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Next RPL Rewards Checkpoint", + "type": "stat" + }, + { + "datasource": null, + "gridPos": { + "h": 1, + "w": 12, + "x": 0, + "y": 25 + }, + "id": 170, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "", + "gridPos": { + "h": 1, + "w": 12, + "x": 0, + "y": 26 + }, + "id": 158, + "options": { + "content": "", + "mode": "markdown" + }, + "pluginVersion": "8.1.1", + "title": "Rocket Pool Network Stats (Updates Every 5 Minutes)", + "transparent": true, + "type": "text" + }, + { + "datasource": null, + "description": "The total amount of ETH locked on the Rocket Pool network, including staked RPL (but not including Beacon Chain rewards).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 0, + "y": 27 + }, + "id": 156, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_demand_deposit_pool_balance{job=\"rocketpool\"} + rocketpool_demand_total_minipool_capacity{job=\"rocketpool\"} + rocketpool_supply_active_minipools{job=\"rocketpool\"} * 32 + rocketpool_rpl_total_value_staked{job=\"rocketpool\"} * rocketpool_rpl_rpl_price{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total ETH Locked", + "type": "stat" + }, + { + "datasource": null, + "description": "The total amount of RPL staked across all node operators in the Rocket Pool network.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 4, + "y": 27 + }, + "id": 214, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_rpl_total_value_staked{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total RPL Staked", + "type": "stat" + }, + { + "datasource": null, + "description": "The total *effective* RPL stake across all node operators on the Rocket Pool network. This accounts for the 150% collateral cap per minipool. If this number is lower than the Total RPL Staked, then some node operators have gone above 150%.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "locale" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 8, + "y": 27 + }, + "id": 182, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_rpl_total_effective_staked{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total Effective RPL Staked", + "type": "stat" + }, + { + "datasource": null, + "description": "The approximate amount of RPL you'll receive at the next checkpoint, based on your current effective stake and how much RPL is staked on the entire network.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "RPL" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 13, + "y": 28 + }, + "id": 198, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_expected_rpl_rewards{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Approx. Rewards from Next Checkpoint", + "type": "stat" + }, + { + "datasource": null, + "description": "How much \"effective\" RPL you have staked (capped at 150% per minipool).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "RPL" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 17, + "y": 28 + }, + "id": 190, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_effective_staked_rpl{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Effective RPL Staked", + "type": "stat" + }, + { + "datasource": null, + "description": "The amount of RPL you were rewarded that you haven't claimed yet. Normally your node checks for these every 5 minutes and claims them automatically, so if this number persists for a long time then something may be wrong.\n\nPlease see https://docs.rocketpool.net/guides/node/rewards.html for more info on claiming rewards.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "transparent", + "value": null + }, + { + "color": "red", + "value": 0.001 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 20, + "y": 28 + }, + "id": 222, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_unclaimed_rewards{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Unclaimed RPL", + "type": "stat" + }, + { + "datasource": null, + "description": "The APR for your RPL stake, based on the rewards you will receive at the next checkpoint.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 13, + "y": 31 + }, + "id": 194, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_rpl_apr{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "APR for Next RPL Checkpoint", + "type": "stat" + }, + { + "datasource": null, + "description": "Your total staked RPL collateral. At 10%, you have 1.6 ETH worth of RPL per minipool; at 150% you have 24 ETH worth of RPL per minipool.\n\nIf you fall below 10% you won't be able to claim your rewards at the next checkpoint until you get back to 10%. If you go over 150%, you'll only be rewarded for the first 150% of your stake.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "max": 1.5, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "green", + "value": 0.1 + }, + { + "color": "red", + "value": 1.5 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 17, + "y": 31 + }, + "id": 196, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_total_staked_rpl{job=\"rocketpool\"} * rocketpool_rpl_rpl_price{job=\"rocketpool\"} / rocketpool_node_deposited_eth{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "RPL Collateral", + "type": "gauge" + }, + { + "datasource": null, + "description": "The amount of ETH that 1 rETH is worth.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 6, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "purple", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 0, + "y": 32 + }, + "id": 178, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_performance_eth_reth_exchange_rate{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "rETH Price (ETH / rETH)", + "type": "stat" + }, + { + "datasource": null, + "description": "The amount of ETH that 1 RPL is worth, as reported by the Oracle DAO. This updates somewhat infrequently, so it's expected if it falls out of sync with other price watchers.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 6, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 3, + "y": 32 + }, + "id": 180, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_rpl_rpl_price{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "RPL Price (ETH / RPL)", + "type": "stat" + }, + { + "datasource": null, + "description": "The relative amount of ETH that was deposited into the staking pool by rETH stakers, which was then used by node operators to create new minipools with validators on the Beacon Chain. The closer this number is to 100%, the more efficiently the Rocket Pool network is operating and the faster rETH's price grows.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "#EAB839", + "value": 0.2 + }, + { + "color": "green", + "value": 0.5 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Value" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 6, + "y": 32 + }, + "id": 168, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": true, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_performance_eth_utilization_rate{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Staking Pool ETH Used", + "type": "gauge" + }, + { + "datasource": null, + "description": "The amount of ETH currently in the staking pool, waiting to be used by node operators to create new minipools.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 5000, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 4000 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 3, + "x": 9, + "y": 32 + }, + "id": 160, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": true, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_demand_deposit_pool_balance{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Staking Pool Balance", + "type": "gauge" + }, + { + "datasource": null, + "description": "The total amount of RPL you've earned from RPL rewards for the entire life of your node.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "orange", + "value": null + } + ] + }, + "unit": "RPL" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 4, + "x": 13, + "y": 34 + }, + "id": 192, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_cumulative_rpl_rewards", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Total RPL Rewards Earned", + "type": "stat" + }, + { + "datasource": null, + "description": "The total number of nodes that have registered on the Rocket Pool network.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 37 + }, + "id": 172, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "value" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_supply_node_count{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Node Count", + "type": "stat" + }, + { + "datasource": null, + "description": "A breakdown of the counts of each minipool on the Rocket Pool network by status:\n\n- **Initialized**: waiting for a deposit still\n- **Prelaunch:** deposits are done, waiting to be staked by the node operator's `rocketpool_node` container \n- **Staking:** deposited, validator created, and active (or pending) on the Beacon Chain\n- **Dissolved:** staking failed, funds returned to the node operator and staking pool\n- **Withdrawable:** exited from the Beacon Chain, waiting for rewards to be withdrawn to the minipool\n- **Finalized:** exited, withdrawn from, and essentially closed (inactive)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [] + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "staking" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "initialized" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "finalized" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "dissolved" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "prelaunch" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "withdrawable" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "dark-orange", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 3, + "y": 37 + }, + "id": 176, + "options": { + "legend": { + "displayMode": "table", + "placement": "right", + "values": [ + "value" + ] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_supply_minipool_count{job=\"rocketpool\"}", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{status}}", + "refId": "A" + } + ], + "title": "Minipools by Status", + "type": "piechart" + }, + { + "datasource": null, + "description": "The current commission for new minipools. If you created a minipool right now, this is the commission it would be assigned for its entire lifespan.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 2, + "mappings": [], + "max": 0.2, + "min": 0.05, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "green", + "value": 0.1 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 4, + "x": 8, + "y": 37 + }, + "id": 208, + "options": { + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_supply_node_fee{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Current Commission", + "type": "gauge" + }, + { + "datasource": null, + "description": "The balances of your node wallet (only tracks Rocket Pool tokens). Keep an eye on how much ETH you have; if it falls too low, your node won't be able to pay for gas during automatic RPL reward claims or other transactions.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "center", + "displayMode": "auto", + "filterable": false + }, + "decimals": 6, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 9, + "x": 13, + "y": 37 + }, + "id": 200, + "options": { + "showHeader": true + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_node_balance{job=\"rocketpool\"}", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "{{Token}}", + "refId": "A" + } + ], + "title": "Node Wallet Balances", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "__name__": true, + "instance": true, + "job": true + }, + "indexByName": {}, + "renameByName": {} + } + } + ], + "type": "table" + }, + { + "datasource": null, + "description": "The total number of Rocket Pool minipools (validators) that are active (not exited and withdrawn from the Beacon Chain).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 40 + }, + "id": 174, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "8.1.1", + "targets": [ + { + "exemplar": true, + "expr": "rocketpool_supply_active_minipools{job=\"rocketpool\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Active Minipools", + "type": "stat" + } + ], + "refresh": "30s", + "schemaVersion": 30, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "allValue": null, + "current": { + "selected": false, + "text": "eth2:9100", + "value": "eth2:9100" + }, + "datasource": "Prometheus", + "definition": "label_values(process_virtual_memory_bytes,instance)", + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "instance", + "options": [], + "query": { + "query": "label_values(process_virtual_memory_bytes,instance)", + "refId": "Prometheus-instance-Variable-Query" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "Rocket Pool Dashboard v1.0.0 for Teku", + "uid": "Ur22GG77z5", + "version": 4 +} \ No newline at end of file diff --git a/amd64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh b/amd64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh index 42adc8ed..8440f4e7 100755 --- a/amd64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh +++ b/amd64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh @@ -84,6 +84,10 @@ if [ "$CLIENT" = "teku" ]; then CMD="$CMD --p2p-peer-lower-bound=$ETH2_MAX_PEERS --p2p-peer-upper-bound=$ETH2_MAX_PEERS" fi + if [ "$ENABLE_METRICS" -eq "1" ]; then + CMD="$CMD --metrics-enabled=true --metrics-interface=0.0.0.0 --metrics-port=$ETH2_METRICS_PORT --metrics-host-allowlist=*" + fi + exec ${CMD} fi diff --git a/amd64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh b/amd64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh index 688ba248..854dc2df 100755 --- a/amd64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh +++ b/amd64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh @@ -57,7 +57,13 @@ fi # Teku startup if [ "$CLIENT" = "teku" ]; then - exec /opt/teku/bin/teku validator-client --network=prater --validator-keys=/validators/teku/keys:/validators/teku/passwords --beacon-node-api-endpoint="$ETH2_PROVIDER" --validators-graffiti="$GRAFFITI" + CMD="/opt/teku/bin/teku validator-client --network=prater --validator-keys=/validators/teku/keys:/validators/teku/passwords --beacon-node-api-endpoint=$ETH2_PROVIDER" + + if [ "$ENABLE_METRICS" -eq "1" ]; then + CMD="$CMD --metrics-enabled=true --metrics-interface=0.0.0.0 --metrics-port=$VALIDATOR_METRICS_PORT --metrics-host-allowlist=*" + fi + + exec ${CMD} --validators-graffiti="$GRAFFITI" fi diff --git a/amd64/rp-smartnode-install/network/prater/config.yml b/amd64/rp-smartnode-install/network/prater/config.yml index 8a7608de..a01b0ebd 100644 --- a/amd64/rp-smartnode-install/network/prater/config.yml +++ b/amd64/rp-smartnode-install/network/prater/config.yml @@ -194,7 +194,7 @@ chains: \t\tinteracting with the core Ethereum platform. Teku is Apache 2\n \t\tlicensed and written in Java, a language notable for its\n \t\tmaturity & ubiquity." - image: consensys/teku:21.8.0 + image: consensys/teku:21.8.1 link: https://docs.teku.consensys.net/en/stable/ params: - name: Custom Graffiti diff --git a/arm64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh b/arm64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh index 42adc8ed..8440f4e7 100755 --- a/arm64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh +++ b/arm64/rp-smartnode-install/network/prater/chains/eth2/start-beacon.sh @@ -84,6 +84,10 @@ if [ "$CLIENT" = "teku" ]; then CMD="$CMD --p2p-peer-lower-bound=$ETH2_MAX_PEERS --p2p-peer-upper-bound=$ETH2_MAX_PEERS" fi + if [ "$ENABLE_METRICS" -eq "1" ]; then + CMD="$CMD --metrics-enabled=true --metrics-interface=0.0.0.0 --metrics-port=$ETH2_METRICS_PORT --metrics-host-allowlist=*" + fi + exec ${CMD} fi diff --git a/arm64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh b/arm64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh index 688ba248..854dc2df 100755 --- a/arm64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh +++ b/arm64/rp-smartnode-install/network/prater/chains/eth2/start-validator.sh @@ -57,7 +57,13 @@ fi # Teku startup if [ "$CLIENT" = "teku" ]; then - exec /opt/teku/bin/teku validator-client --network=prater --validator-keys=/validators/teku/keys:/validators/teku/passwords --beacon-node-api-endpoint="$ETH2_PROVIDER" --validators-graffiti="$GRAFFITI" + CMD="/opt/teku/bin/teku validator-client --network=prater --validator-keys=/validators/teku/keys:/validators/teku/passwords --beacon-node-api-endpoint=$ETH2_PROVIDER" + + if [ "$ENABLE_METRICS" -eq "1" ]; then + CMD="$CMD --metrics-enabled=true --metrics-interface=0.0.0.0 --metrics-port=$VALIDATOR_METRICS_PORT --metrics-host-allowlist=*" + fi + + exec ${CMD} --validators-graffiti="$GRAFFITI" fi diff --git a/arm64/rp-smartnode-install/network/prater/config.yml b/arm64/rp-smartnode-install/network/prater/config.yml index b6dde832..56924cda 100644 --- a/arm64/rp-smartnode-install/network/prater/config.yml +++ b/arm64/rp-smartnode-install/network/prater/config.yml @@ -197,7 +197,7 @@ chains: \t\tinteracting with the core Ethereum platform. Teku is Apache 2\n \t\tlicensed and written in Java, a language notable for its\n \t\tmaturity & ubiquity." - image: rocketpool/teku:21.8.0 + image: rocketpool/teku:21.8.1 link: https://docs.teku.consensys.net/en/stable/ params: - name: Custom Graffiti From 79aee5da3ead5d7d8b4f2ced466831ce67cda748 Mon Sep 17 00:00:00 2001 From: Joe Clapis Date: Tue, 17 Aug 2021 00:48:41 -0400 Subject: [PATCH 07/14] Fixed some syncing metrics with the Lighthouse dashboard --- ... Pool Dashboard v1.0.0 for Lighthouse.json | 33 ++++++++----------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json b/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json index 033d37fd..d2b34db9 100644 --- a/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json +++ b/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json @@ -22,7 +22,7 @@ "gnetId": null, "graphTooltip": 0, "id": 4, - "iteration": 1629138267746, + "iteration": 1629168569396, "links": [], "panels": [ { @@ -348,17 +348,8 @@ "color": { "mode": "thresholds" }, - "mappings": [ - { - "options": { - "match": "null", - "result": { - "text": "N/A" - } - }, - "type": "special" - } - ], + "mappings": [], + "noValue": "0", "thresholds": { "mode": "absolute", "steps": [ @@ -401,7 +392,7 @@ "targets": [ { "exemplar": true, - "expr": "vc_signed_attestations_total{job=\"validator\", status=\"success\"} OR on() vector(0)", + "expr": "sum(vc_signed_attestations_total{job=\"validator\", status=\"success\"} or vector(0))", "hide": false, "interval": "", "legendFormat": "Attestations", @@ -409,7 +400,8 @@ }, { "exemplar": true, - "expr": "vc_signed_beacon_blocks_total{job=\"validator\", status=\"success\"} OR on() vector(0)", + "expr": "sum(vc_signed_beacon_blocks_total{job=\"validator\", status=\"success\"} or vector(0))", + "instant": false, "interval": "", "legendFormat": "Proposals", "refId": "A" @@ -418,6 +410,7 @@ "timeFrom": null, "timeShift": null, "title": "Validator Activity", + "transformations": [], "type": "stat" }, { @@ -494,7 +487,7 @@ "targets": [ { "exemplar": true, - "expr": "(rate(vc_signed_beacon_blocks_total{job=\"validator\", status=\"success\"}[$__rate_interval])) * 45 OR on() vector(0)", + "expr": "sum(rate(vc_signed_beacon_blocks_total{job=\"validator\", status=\"success\"}[$__rate_interval]) or vector(0)) * 45", "hide": false, "interval": "", "legendFormat": "Proposal", @@ -502,7 +495,7 @@ }, { "exemplar": true, - "expr": "(rate(vc_signed_attestations_total{job=\"validator\", status=\"success\"}[$__rate_interval])) * 45 OR on() vector(0)", + "expr": "sum(rate(vc_signed_attestations_total{job=\"validator\", status=\"success\"}[$__rate_interval]) or vector(0)) * 45", "interval": "", "legendFormat": "Attestation", "refId": "B" @@ -935,7 +928,7 @@ "targets": [ { "exemplar": true, - "expr": "sum(rate (validator_monitor_attestation_in_aggregate_delay_seconds_bucket{job=\"eth2\", src=\"gossip\"}[$__rate_interval])) without (validator)", + "expr": "sum(rate(validator_monitor_attestation_in_aggregate_delay_seconds_bucket{job=\"eth2\", src=\"gossip\"}[$__rate_interval])) without (validator)", "format": "time_series", "hide": false, "instant": false, @@ -1389,7 +1382,7 @@ "targets": [ { "exemplar": true, - "expr": "sync_peers_per_status{job=\"eth2\", sync_status=\"Synced\"}", + "expr": "sum(sync_peers_per_status{job=\"eth2\", sync_status=~\"Synced|Advanced\"})", "interval": "", "legendFormat": "", "refId": "A" @@ -1473,7 +1466,7 @@ "targets": [ { "exemplar": true, - "expr": "sync_peers_per_status{job=\"eth2\", sync_status=\"Synced\"}", + "expr": "sum(sync_peers_per_status{job=\"eth2\", sync_status=~\"Synced|Advanced\"})", "interval": "", "legendFormat": "", "refId": "B" @@ -3700,5 +3693,5 @@ "timezone": "", "title": "Rocket Pool Dashboard v1.0.0 for Lighthouse", "uid": "Ur22GG77z2", - "version": 21 + "version": 24 } \ No newline at end of file From 629153731eeb7012f141134e423e14cd4d8a08c5 Mon Sep 17 00:00:00 2001 From: Joe Clapis Date: Tue, 17 Aug 2021 01:34:32 -0400 Subject: [PATCH 08/14] Removed the area display from the reboot required messages --- Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json | 4 ++-- Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json | 4 ++-- Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json | 4 ++-- Dashboards/Rocket Pool Dashboard v1.0.0 for Teku.json | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json b/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json index d2b34db9..b635d043 100644 --- a/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json +++ b/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json @@ -136,7 +136,7 @@ }, { "datasource": null, - "description": "This will turn red when you system needs to be rebooted because of security updates.\n\nSetting this up is Operating System specific, so it doesn't come ready out of the box; see the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "description": "This will turn red when your system needs to be rebooted because of security updates.\n\nSetting this up is Operating System specific, so it doesn't come ready out of the box; see the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", "fieldConfig": { "defaults": { "color": { @@ -180,7 +180,7 @@ "id": 224, "options": { "colorMode": "background", - "graphMode": "area", + "graphMode": "none", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { diff --git a/Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json b/Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json index 9c346cb2..1c377e92 100644 --- a/Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json +++ b/Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json @@ -136,7 +136,7 @@ }, { "datasource": null, - "description": "This will turn red when you system needs to be rebooted because of security updates.\n\nSetting this up is Operating System specific, so it doesn't come ready out of the box; see the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "description": "This will turn red when your system needs to be rebooted because of security updates.\n\nSetting this up is Operating System specific, so it doesn't come ready out of the box; see the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", "fieldConfig": { "defaults": { "color": { @@ -180,7 +180,7 @@ "id": 224, "options": { "colorMode": "background", - "graphMode": "area", + "graphMode": "none", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { diff --git a/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json b/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json index f33e0f60..7ee0c83c 100644 --- a/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json +++ b/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json @@ -136,7 +136,7 @@ }, { "datasource": null, - "description": "This will turn red when you system needs to be rebooted because of security updates.\n\nSetting this up is Operating System specific, so it doesn't come ready out of the box; see the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "description": "This will turn red when your system needs to be rebooted because of security updates.\n\nSetting this up is Operating System specific, so it doesn't come ready out of the box; see the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", "fieldConfig": { "defaults": { "color": { @@ -180,7 +180,7 @@ "id": 224, "options": { "colorMode": "background", - "graphMode": "area", + "graphMode": "none", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { diff --git a/Dashboards/Rocket Pool Dashboard v1.0.0 for Teku.json b/Dashboards/Rocket Pool Dashboard v1.0.0 for Teku.json index 1dfc87b1..d825480c 100644 --- a/Dashboards/Rocket Pool Dashboard v1.0.0 for Teku.json +++ b/Dashboards/Rocket Pool Dashboard v1.0.0 for Teku.json @@ -136,7 +136,7 @@ }, { "datasource": null, - "description": "This will turn red when you system needs to be rebooted because of security updates.\n\nSetting this up is Operating System specific, so it doesn't come ready out of the box; see the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", + "description": "This will turn red when your system needs to be rebooted because of security updates.\n\nSetting this up is Operating System specific, so it doesn't come ready out of the box; see the documentation at https://docs.rocketpool.net/guides/node/grafana.html for more information.", "fieldConfig": { "defaults": { "color": { @@ -180,7 +180,7 @@ "id": 224, "options": { "colorMode": "background", - "graphMode": "area", + "graphMode": "none", "justifyMode": "auto", "orientation": "auto", "reduceOptions": { From 25a32f87ef0893fa378291366ab812c28dcd2d74 Mon Sep 17 00:00:00 2001 From: Joe Clapis Date: Tue, 17 Aug 2021 16:58:25 -0400 Subject: [PATCH 09/14] Started working on an update tracker setup --- .../network/prater/version-check.sh | 12 -- install-update-tracker.sh | 173 ++++++++++++++++++ rp-update-tracker/apt/apt-metrics.sh | 19 ++ rp-update-tracker/apt/apt-prometheus-metrics | 9 + rp-update-tracker/dnf/dnf-metrics.sh | 45 +++++ rp-update-tracker/dnf/rp-dnf-check.sh | 4 + .../dnf/rp-update-tracker.service | 10 + rp-update-tracker/dnf/rp-update-tracker.timer | 10 + .../rp-version-check.sh | 0 9 files changed, 270 insertions(+), 12 deletions(-) delete mode 100755 arm64/rp-smartnode-install/network/prater/version-check.sh create mode 100755 install-update-tracker.sh create mode 100644 rp-update-tracker/apt/apt-metrics.sh create mode 100644 rp-update-tracker/apt/apt-prometheus-metrics create mode 100644 rp-update-tracker/dnf/dnf-metrics.sh create mode 100644 rp-update-tracker/dnf/rp-dnf-check.sh create mode 100644 rp-update-tracker/dnf/rp-update-tracker.service create mode 100644 rp-update-tracker/dnf/rp-update-tracker.timer rename amd64/rp-smartnode-install/network/prater/version-check.sh => rp-update-tracker/rp-version-check.sh (100%) mode change 100755 => 100644 diff --git a/arm64/rp-smartnode-install/network/prater/version-check.sh b/arm64/rp-smartnode-install/network/prater/version-check.sh deleted file mode 100755 index 27653b22..00000000 --- a/arm64/rp-smartnode-install/network/prater/version-check.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -LATEST_VERSION=$(curl --silent "https://api.github.com/repos/rocket-pool/smartnode-install/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') -CURRENT_VERSION=$(docker exec rocketpool_node /go/bin/rocketpool --version | sed -E 's/rocketpool version (.*)/v\1/') - -echo "# HELP rocketpool_version_update New Rocket Pool version available" -echo "# TYPE rocketpool_version_update gauge" -if [ "$LATEST_VERSION" = "$CURRENT_VERSION" ]; then - echo "rocketpool_version_update 0" -else - echo "rocketpool_version_update 1" -fi diff --git a/install-update-tracker.sh b/install-update-tracker.sh new file mode 100755 index 00000000..3295533a --- /dev/null +++ b/install-update-tracker.sh @@ -0,0 +1,173 @@ +#!/bin/sh + +# This script sets up the OS update and Rocket Pool update collector, along with +# integration with Prometheus's node-exporter and auto-running during apt or dnf +# executions. + + +# The path that the node exporter will be configured to look for textfiles in +TEXTFILE_COLLECTOR_PATH="/var/lib/node_exporter/textfile_collector" +UPDATE_SCRIPT_PATH="/usr/share" + + +# Print a failure message to stderr and exit +fail() { + MESSAGE=$1 + >&2 echo -e "\n${COLOR_RED}**ERROR**\n$MESSAGE${COLOR_RESET}" + exit 1 +} + + +# Get the platform type +PLATFORM=$(uname -s) +if [ "$PLATFORM" = "Linux" ]; then + + # Check for /etc/os-release + if [ -f /etc/os-release ]; then + OS_ID=$(awk -F= '/^ID/{print $2}' /etc/os-release) + if [ $(echo $OS_ID | grep -c -E "ubuntu|debian|linuxmint") -gt "0" ]; then + INSTALLER="apt" + elif [ $(echo $OS_ID | grep -c -E "fedora|rhel|centos") -gt "0" ]; then + INSTALLER="dnf" + fi + + # Fall back to `lsb_release` + elif command -v lsb_release &>/dev/null ; then + OS_ID=$(lsb_release -si) + if [ $(echo $OS_ID | grep -c -E "ubuntu|debian|linuxmint") -gt "0" ]; then + INSTALLER="apt" + elif [ $(echo $OS_ID | grep -c -E "fedora|rhel|centos") -gt "0" ]; then + INSTALLER="dnf" + fi + + # Fall back to others + elif [ -f "/etc/centos-release" ]; then + INSTALLER="dnf" + elif [ -f "/etc/fedora-release" ]; then + INSTALLER="dnf" + fi + +fi + + +# The default smart node package version to download +PACKAGE_VERSION="latest" + + +# Print progress +progress() { + STEP_NUMBER=$1 + MESSAGE=$2 + echo "Step $STEP_NUMBER of $TOTAL_STEPS: $MESSAGE" +} + + +# Install +install() { + + +# Parse arguments +while getopts "v:" FLAG; do + case "$FLAG" in + v) PACKAGE_VERSION="$OPTARG" ;; + *) fail "Incorrect usage." ;; + esac +done + + +# Get package files URL +if [ "$PACKAGE_VERSION" = "latest" ]; then + PACKAGE_URL="https://github.com/rocket-pool/smartnode-install/releases/latest/download/rp-update-tracker.tar.xz" +else + PACKAGE_URL="https://github.com/rocket-pool/smartnode-install/releases/download/$PACKAGE_VERSION/rp-update-tracker.tar.xz" +fi + + +# Create temporary data folder; clean up on exit +TEMPDIR=$(mktemp -d 2>/dev/null) || fail "Could not create temporary data directory." +trap 'rm -rf "$TEMPDIR"' EXIT + + +# Get temporary data paths +PACKAGE_FILES_PATH="$TEMPDIR/rp-update-tracker" +NETWORK_FILES_PATH="$PACKAGE_FILES_PATH/network/$NETWORK" + + +case "$INSTALLER" in + + # Distros using apt + apt) + + # The total number of steps in the installation process + TOTAL_STEPS="3" + + # Install dependencies + progress 1 "Installing dependencies..." + { sudo apt -y update || fail "Could not update OS package definitions."; } >&2 + { sudo apt -y install update-notifier-common moreutils || fail "Could not install OS dependencies."; } >&2 + + # Download and extract package files + progress 2 "Downloading Rocket Pool update tracker package files..." + { curl -L "$PACKAGE_URL" | tar -xJ -C "$TEMPDIR" || fail "Could not download and extract the Rocket Pool update tracker package files."; } >&2 + { test -d "$PACKAGE_FILES_PATH" || fail "Could not extract the Rocket Pool update tracker package files."; } >&2 + + # Install the update tracker files + progress 3 "Installing update tracker..." + { sudo mkdir -p "$TEXTFILE_COLLECTOR_PATH" || fail "Could not create textfile collector path."; } >&2 + { sudo mv "$PACKAGE_FILES_PATH/apt/apt-metrics.sh" "$UPDATE_SCRIPT_PATH" || fail "Could not move apt update collector."; } >&2 + { sudo mv "$PACKAGE_FILES_PATH/rp-version-check.sh" "$UPDATE_SCRIPT_PATH" || fail "Could not move Rocket Pool update collector."; } >&2 + { sudo mv "$PACKAGE_FILES_PATH/apt/apt-prometheus-metrics" "/etc/apt/apt.conf.d/60prometheus-metrics" || fail "Could not move apt trigger."; } >&2 + { sudo chmod +x "$UPDATE_SCRIPT_PATH/apt-metrics.sh" || fail "Could not set permissions on apt update collector."; } >&2 + { sudo chmod +x "$UPDATE_SCRIPT_PATH/rp-version-check.sh" || fail "Could not set permissions on Rocket Pool update collector."; } >&2 + + ;; + + # Distros using dnf + dnf) + + # The total number of steps in the installation process + TOTAL_STEPS="4" + + # Install dependencies + progress 1 "Installing dependencies..." + { sudo dnf -y check-update || fail "Could not update OS package definitions."; } >&2 + { sudo dnf -y install dnf-utils moreutils || fail "Could not install OS dependencies."; } >&2 + + # Download and extract package files + progress 2 "Downloading Rocket Pool update tracker package files..." + { curl -L "$PACKAGE_URL" | tar -xJ -C "$TEMPDIR" || fail "Could not download and extract the Rocket Pool update tracker package files."; } >&2 + { test -d "$PACKAGE_FILES_PATH" || fail "Could not extract the Rocket Pool update tracker package files."; } >&2 + + # Install the update tracker files + progress 3 "Installing update tracker..." + { sudo mkdir -p "$TEXTFILE_COLLECTOR_PATH" || fail "Could not create textfile collector path."; } >&2 + { sudo mv "$PACKAGE_FILES_PATH/dnf/dnf-metrics.sh" "$UPDATE_SCRIPT_PATH" || fail "Could not move dnf update collector."; } >&2 + { sudo mv "$PACKAGE_FILES_PATH/rp-version-check.sh" "$UPDATE_SCRIPT_PATH" || fail "Could not move Rocket Pool update collector."; } >&2 + { sudo mv "$PACKAGE_FILES_PATH/dnf/rp-dnf-check.sh" "$UPDATE_SCRIPT_PATH" || fail "Could not move update tracker script."; } >&2 + { sudo mv "$PACKAGE_FILES_PATH/dnf/rp-update-tracker.service" "/etc/systemd/system" || fail "Could not move update tracker service."; } >&2 + { sudo mv "$PACKAGE_FILES_PATH/dnf/rp-update-tracker.timer" "/etc/systemd/system" || fail "Could not move update tracker timer."; } >&2 + { sudo chmod +x "$UPDATE_SCRIPT_PATH/dnf-metrics.sh" || fail "Could not set permissions on dnf update collector."; } >&2 + { sudo chmod +x "$UPDATE_SCRIPT_PATH/rp-version-check.sh" || fail "Could not set permissions on Rocket Pool update collector."; } >&2 + { sudo chmod +x "$UPDATE_SCRIPT_PATH/rp-dnf-check.sh" || fail "Could not set permissions on Rocket Pool update tracker script."; } >&2 + + # Install the update checking service + progress 4 "Installing update tracker service..." + { sudo systemctl daemon-reload || fail "Couldn't update systemctl daemons."; } >&2 + { sudo systemctl enable rp-update-tracker || fail "Couldn't enable update tracker service."; } >&2 + { sudo systemctl start rp-update-tracker || fail "Couldn't start update tracker service."; } >&2 + + ;; + + # Unsupported package manager + *) + RED='\033[0;31m' + echo "" + echo -e "${RED}**ERROR**" + echo "Update tracker installation is only supported for system that use the 'apt' or 'dnf' package managers." + echo "If your operating system uses one of these and you received this message in error, please notify the Rocket Pool team." + exit 1 + ;; + +} + +install "$@" diff --git a/rp-update-tracker/apt/apt-metrics.sh b/rp-update-tracker/apt/apt-metrics.sh new file mode 100644 index 00000000..76e28126 --- /dev/null +++ b/rp-update-tracker/apt/apt-metrics.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +APT_CHECK=$(/usr/lib/update-notifier/apt-check 2>&1 || echo "0;0") + +UPDATES=$(echo "$APT_CHECK" | cut -d ';' -f 1) +SECURITY=$(echo "$APT_CHECK" | cut -d ';' -f 2) +REBOOT=$([ -f /var/run/reboot-required ] && echo 1 || echo 0) + +echo "# HELP os_upgrades_pending Apt package pending updates by origin." +echo "# TYPE os_upgrades_pending gauge" +echo "os_upgrades_pending ${UPDATES}" + +echo "# HELP os_security_upgrades_pending Apt package pending security updates by origin." +echo "# TYPE os_security_upgrades_pending gauge" +echo "os_security_upgrades_pending ${SECURITY}" + +echo "# HELP os_reboot_required Node reboot is required for software updates." +echo "# TYPE os_reboot_required gauge" +echo "os_reboot_required ${REBOOT}" \ No newline at end of file diff --git a/rp-update-tracker/apt/apt-prometheus-metrics b/rp-update-tracker/apt/apt-prometheus-metrics new file mode 100644 index 00000000..c2a9d138 --- /dev/null +++ b/rp-update-tracker/apt/apt-prometheus-metrics @@ -0,0 +1,9 @@ +APT::Update::Post-Invoke-Success { + "/usr/share/apt-metrics.sh | sponge /var/lib/node_exporter/textfile_collector/apt.prom || true"; + "/usr/share/rp-version-check.sh | sponge /var/lib/node_exporter/textfile_collector/rp.prom || true"; +}; + +DPkg::Post-Invoke { + "/usr/share/apt-metrics.sh | sponge /var/lib/node_exporter/textfile_collector/apt.prom || true"; + "/usr/share/rp-version-check.sh | sponge /var/lib/node_exporter/textfile_collector/rp.prom || true"; +}; \ No newline at end of file diff --git a/rp-update-tracker/dnf/dnf-metrics.sh b/rp-update-tracker/dnf/dnf-metrics.sh new file mode 100644 index 00000000..d7a630b4 --- /dev/null +++ b/rp-update-tracker/dnf/dnf-metrics.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +# Expose DNF updates and restart info to Prometheus. +# +# Based on yum.sh by Slawomir Gonet +# and apt.sh by Ben Kochie +# (see https://github.com/prometheus-community/node-exporter-textfile-collector-scripts/blob/master/yum.sh) + +set -u -o pipefail + +# shellcheck disable=SC2016 +filter_awk_script=' +BEGIN { mute=1 } +/Obsoleting Packages/ { + mute=0 +} +mute && /^[[:print:]]+\.[[:print:]]+/ { + print $3 +} +' + +check_upgrades() { + /usr/bin/dnf -q check-update | + /usr/bin/xargs -n3 | + awk "${filter_awk_script}" | + sort | + uniq -c | + awk '{print "os_upgrades_pending{origin=\""$2"\"} "$1}' +} + +upgrades=$(check_upgrades) + +REBOOT=$(needs-restarting -r > /dev/null 2>&1 ; echo "$?") + +echo '# HELP os_upgrades_pending Yum package pending updates by origin.' +echo '# TYPE os_upgrades_pending gauge' +if [[ -n "${upgrades}" ]] ; then + echo "${upgrades}" +else + echo 'os_upgrades_pending{origin=""} 0' +fi + +echo '# HELP os_reboot_required Node reboot is required for software updates.' +echo '# TYPE os_reboot_required gauge' +echo "os_reboot_required ${REBOOT}" diff --git a/rp-update-tracker/dnf/rp-dnf-check.sh b/rp-update-tracker/dnf/rp-dnf-check.sh new file mode 100644 index 00000000..baed0fc9 --- /dev/null +++ b/rp-update-tracker/dnf/rp-dnf-check.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +/usr/share/dnf-metrics.sh | sponge /var/lib/node_exporter/textfile_collector/dnf.prom || true +/usr/share/rp-version-check.sh | sponge /var/lib/node_exporter/textfile_collector/rp.prom || true \ No newline at end of file diff --git a/rp-update-tracker/dnf/rp-update-tracker.service b/rp-update-tracker/dnf/rp-update-tracker.service new file mode 100644 index 00000000..402ecb24 --- /dev/null +++ b/rp-update-tracker/dnf/rp-update-tracker.service @@ -0,0 +1,10 @@ +[Unit] +Description=Checks for system and Rocket Pool updates periodically +Wants=rp-update-tracker.timer + +[Service] +Type=oneshot +ExecStart=/usr/share/rp-dnf-check.sh + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/rp-update-tracker/dnf/rp-update-tracker.timer b/rp-update-tracker/dnf/rp-update-tracker.timer new file mode 100644 index 00000000..170bd6ef --- /dev/null +++ b/rp-update-tracker/dnf/rp-update-tracker.timer @@ -0,0 +1,10 @@ +[Unit] +Description=Timer for the Rocket Pool updates tracker +Requires=rp-update-tracker.service + +[Timer] +Unit=rp-update-tracker.service +OnCalendar=*-*-* *:00:00 + +[Install] +WantedBy=timers.target \ No newline at end of file diff --git a/amd64/rp-smartnode-install/network/prater/version-check.sh b/rp-update-tracker/rp-version-check.sh old mode 100755 new mode 100644 similarity index 100% rename from amd64/rp-smartnode-install/network/prater/version-check.sh rename to rp-update-tracker/rp-version-check.sh From 4bc1abf310b9d2c5ef789739f9a350239a3f3310 Mon Sep 17 00:00:00 2001 From: Joe Clapis Date: Tue, 17 Aug 2021 20:43:24 -0400 Subject: [PATCH 10/14] Added yum support for CentOS 7 --- build-release.sh | 6 +++ install-update-tracker.sh | 52 +++++++++++++++++++ rp-update-tracker/dnf/dnf-metrics.sh | 2 +- .../yum/rp-update-tracker.service | 10 ++++ rp-update-tracker/yum/rp-update-tracker.timer | 10 ++++ rp-update-tracker/yum/rp-yum-check.sh | 4 ++ rp-update-tracker/yum/yum-metrics.sh | 45 ++++++++++++++++ 7 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 rp-update-tracker/yum/rp-update-tracker.service create mode 100644 rp-update-tracker/yum/rp-update-tracker.timer create mode 100644 rp-update-tracker/yum/rp-yum-check.sh create mode 100644 rp-update-tracker/yum/yum-metrics.sh diff --git a/build-release.sh b/build-release.sh index 7e588350..fea62202 100644 --- a/build-release.sh +++ b/build-release.sh @@ -71,6 +71,12 @@ build_install_packages() { mv amd64/rp-smartnode-install-amd64.tar.xz ../$VERSION mv arm64/rp-smartnode-install-arm64.tar.xz ../$VERSION cp install.sh ../$VERSION + cp install-update-tracker.sh ../$VERSION + echo "done!" + + echo -n "Building update tracker package... " + tar cfJ rp-update-tracker.tar.xz rp-update-tracker || fail "Error building update tracker package." + mv rp-update-tracker.tar.xz ../$VERSION echo "done!" cd .. diff --git a/install-update-tracker.sh b/install-update-tracker.sh index 3295533a..1838b991 100755 --- a/install-update-tracker.sh +++ b/install-update-tracker.sh @@ -50,6 +50,18 @@ if [ "$PLATFORM" = "Linux" ]; then fi +# Check for DNF or YUM +if [ "$INSTALLER" == "dnf" ]; then + if ! command -v dnf &>/dev/null ; then + if command -v yum &>/dev/null ; then + INSTALLER="yum" + else + fail "You're using a Fedora / CentOS / RHEL system ($OS_ID) but DNF or YUM don't seem to be installed."; + fi + fi +fi + + # The default smart node package version to download PACKAGE_VERSION="latest" @@ -158,6 +170,45 @@ case "$INSTALLER" in ;; + + # Legacy CentOS / Fedora / RHEL with Yum + yum) + + # The total number of steps in the installation process + TOTAL_STEPS="4" + + # Install dependencies + progress 1 "Installing dependencies..." + { sudo yum -y check-update || fail "Could not update OS package definitions."; } >&2 + { sudo yum -y install epel-release yum-utils || fail "Could not install OS dependencies."; } >&2 + { sudo yum -y install moreutils || fail "Could not install moreutils."; } >&2 + + # Download and extract package files + progress 2 "Downloading Rocket Pool update tracker package files..." + { curl -L "$PACKAGE_URL" | tar -xJ -C "$TEMPDIR" || fail "Could not download and extract the Rocket Pool update tracker package files."; } >&2 + { test -d "$PACKAGE_FILES_PATH" || fail "Could not extract the Rocket Pool update tracker package files."; } >&2 + + # Install the update tracker files + progress 3 "Installing update tracker..." + { sudo mkdir -p "$TEXTFILE_COLLECTOR_PATH" || fail "Could not create textfile collector path."; } >&2 + { sudo mv "$PACKAGE_FILES_PATH/yum/yum-metrics.sh" "$UPDATE_SCRIPT_PATH" || fail "Could not move yum update collector."; } >&2 + { sudo mv "$PACKAGE_FILES_PATH/rp-version-check.sh" "$UPDATE_SCRIPT_PATH" || fail "Could not move Rocket Pool update collector."; } >&2 + { sudo mv "$PACKAGE_FILES_PATH/yum/rp-yum-check.sh" "$UPDATE_SCRIPT_PATH" || fail "Could not move update tracker script."; } >&2 + { sudo mv "$PACKAGE_FILES_PATH/yum/rp-update-tracker.service" "/etc/systemd/system" || fail "Could not move update tracker service."; } >&2 + { sudo mv "$PACKAGE_FILES_PATH/yum/rp-update-tracker.timer" "/etc/systemd/system" || fail "Could not move update tracker timer."; } >&2 + { sudo chmod +x "$UPDATE_SCRIPT_PATH/yum-metrics.sh" || fail "Could not set permissions on dnf update collector."; } >&2 + { sudo chmod +x "$UPDATE_SCRIPT_PATH/rp-version-check.sh" || fail "Could not set permissions on Rocket Pool update collector."; } >&2 + { sudo chmod +x "$UPDATE_SCRIPT_PATH/rp-yum-check.sh" || fail "Could not set permissions on Rocket Pool update tracker script."; } >&2 + + # Install the update checking service + progress 4 "Installing update tracker service..." + { sudo systemctl daemon-reload || fail "Couldn't update systemctl daemons."; } >&2 + { sudo systemctl enable rp-update-tracker || fail "Couldn't enable update tracker service."; } >&2 + { sudo systemctl start rp-update-tracker || fail "Couldn't start update tracker service."; } >&2 + + + ;; + # Unsupported package manager *) RED='\033[0;31m' @@ -168,6 +219,7 @@ case "$INSTALLER" in exit 1 ;; +esac } install "$@" diff --git a/rp-update-tracker/dnf/dnf-metrics.sh b/rp-update-tracker/dnf/dnf-metrics.sh index d7a630b4..75c52eb7 100644 --- a/rp-update-tracker/dnf/dnf-metrics.sh +++ b/rp-update-tracker/dnf/dnf-metrics.sh @@ -32,7 +32,7 @@ upgrades=$(check_upgrades) REBOOT=$(needs-restarting -r > /dev/null 2>&1 ; echo "$?") -echo '# HELP os_upgrades_pending Yum package pending updates by origin.' +echo '# HELP os_upgrades_pending DNF package pending updates by origin.' echo '# TYPE os_upgrades_pending gauge' if [[ -n "${upgrades}" ]] ; then echo "${upgrades}" diff --git a/rp-update-tracker/yum/rp-update-tracker.service b/rp-update-tracker/yum/rp-update-tracker.service new file mode 100644 index 00000000..93fe59d2 --- /dev/null +++ b/rp-update-tracker/yum/rp-update-tracker.service @@ -0,0 +1,10 @@ +[Unit] +Description=Checks for system and Rocket Pool updates periodically +Wants=rp-update-tracker.timer + +[Service] +Type=oneshot +ExecStart=/usr/share/rp-yum-check.sh + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/rp-update-tracker/yum/rp-update-tracker.timer b/rp-update-tracker/yum/rp-update-tracker.timer new file mode 100644 index 00000000..170bd6ef --- /dev/null +++ b/rp-update-tracker/yum/rp-update-tracker.timer @@ -0,0 +1,10 @@ +[Unit] +Description=Timer for the Rocket Pool updates tracker +Requires=rp-update-tracker.service + +[Timer] +Unit=rp-update-tracker.service +OnCalendar=*-*-* *:00:00 + +[Install] +WantedBy=timers.target \ No newline at end of file diff --git a/rp-update-tracker/yum/rp-yum-check.sh b/rp-update-tracker/yum/rp-yum-check.sh new file mode 100644 index 00000000..edadeb06 --- /dev/null +++ b/rp-update-tracker/yum/rp-yum-check.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +/usr/share/yum-metrics.sh | sponge /var/lib/node_exporter/textfile_collector/yum.prom || true +/usr/share/rp-version-check.sh | sponge /var/lib/node_exporter/textfile_collector/rp.prom || true \ No newline at end of file diff --git a/rp-update-tracker/yum/yum-metrics.sh b/rp-update-tracker/yum/yum-metrics.sh new file mode 100644 index 00000000..36cdffb4 --- /dev/null +++ b/rp-update-tracker/yum/yum-metrics.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +# Expose yum updates and restart info to Prometheus. +# +# Based on yum.sh by Slawomir Gonet +# and apt.sh by Ben Kochie +# (see https://github.com/prometheus-community/node-exporter-textfile-collector-scripts/blob/master/yum.sh) + +set -u -o pipefail + +# shellcheck disable=SC2016 +filter_awk_script=' +BEGIN { mute=1 } +/Obsoleting Packages/ { + mute=0 +} +mute && /^[[:print:]]+\.[[:print:]]+/ { + print $3 +} +' + +check_upgrades() { + /usr/bin/yum -q check-update | + /usr/bin/xargs -n3 | + awk "${filter_awk_script}" | + sort | + uniq -c | + awk '{print "os_upgrades_pending{origin=\""$2"\"} "$1}' +} + +upgrades=$(check_upgrades) + +REBOOT=$(needs-restarting -r > /dev/null 2>&1 ; echo "$?") + +echo '# HELP os_upgrades_pending Yum package pending updates by origin.' +echo '# TYPE os_upgrades_pending gauge' +if [[ -n "${upgrades}" ]] ; then + echo "${upgrades}" +else + echo 'os_upgrades_pending{origin=""} 0' +fi + +echo '# HELP os_reboot_required Node reboot is required for software updates.' +echo '# TYPE os_reboot_required gauge' +echo "os_reboot_required ${REBOOT}" From 75ad20e103c12bb20602aa5a2a3f0326afe60501 Mon Sep 17 00:00:00 2001 From: Joe Clapis Date: Tue, 17 Aug 2021 21:06:29 -0400 Subject: [PATCH 11/14] Removed the fail checks for the package updaters because they return non-zero things even if successful --- install-update-tracker.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/install-update-tracker.sh b/install-update-tracker.sh index 1838b991..2fc5ed33 100755 --- a/install-update-tracker.sh +++ b/install-update-tracker.sh @@ -115,7 +115,7 @@ case "$INSTALLER" in # Install dependencies progress 1 "Installing dependencies..." - { sudo apt -y update || fail "Could not update OS package definitions."; } >&2 + { sudo apt -y update; } >&2 { sudo apt -y install update-notifier-common moreutils || fail "Could not install OS dependencies."; } >&2 # Download and extract package files @@ -142,7 +142,7 @@ case "$INSTALLER" in # Install dependencies progress 1 "Installing dependencies..." - { sudo dnf -y check-update || fail "Could not update OS package definitions."; } >&2 + { sudo dnf -y check-update; } >&2 { sudo dnf -y install dnf-utils moreutils || fail "Could not install OS dependencies."; } >&2 # Download and extract package files @@ -179,7 +179,7 @@ case "$INSTALLER" in # Install dependencies progress 1 "Installing dependencies..." - { sudo yum -y check-update || fail "Could not update OS package definitions."; } >&2 + { sudo yum -y check-update; } >&2 { sudo yum -y install epel-release yum-utils || fail "Could not install OS dependencies."; } >&2 { sudo yum -y install moreutils || fail "Could not install moreutils."; } >&2 @@ -206,7 +206,6 @@ case "$INSTALLER" in { sudo systemctl enable rp-update-tracker || fail "Couldn't enable update tracker service."; } >&2 { sudo systemctl start rp-update-tracker || fail "Couldn't start update tracker service."; } >&2 - ;; # Unsupported package manager From c840205a269c2b964ea6152a5bfa2e072ef8adbc Mon Sep 17 00:00:00 2001 From: Joe Clapis Date: Wed, 18 Aug 2021 00:14:40 -0400 Subject: [PATCH 12/14] Got the update tracker working on CentOS 7, 8, and Fedora --- install-update-tracker.sh | 53 ++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/install-update-tracker.sh b/install-update-tracker.sh index 2fc5ed33..d3ec2317 100755 --- a/install-update-tracker.sh +++ b/install-update-tracker.sh @@ -10,6 +10,11 @@ TEXTFILE_COLLECTOR_PATH="/var/lib/node_exporter/textfile_collector" UPDATE_SCRIPT_PATH="/usr/share" +COLOR_RED='\033[0;31m' +COLOR_YELLOW='\033[33m' +COLOR_RESET='\033[0m' + + # Print a failure message to stderr and exit fail() { MESSAGE=$1 @@ -62,6 +67,14 @@ if [ "$INSTALLER" == "dnf" ]; then fi +# Check if SELinux is enabled +if [ $(selinuxenabled && echo $?) -ne 0 ]; then + SELINUX=false +else + SELINUX=true +fi + + # The default smart node package version to download PACKAGE_VERSION="latest" @@ -102,7 +115,6 @@ trap 'rm -rf "$TEMPDIR"' EXIT # Get temporary data paths PACKAGE_FILES_PATH="$TEMPDIR/rp-update-tracker" -NETWORK_FILES_PATH="$PACKAGE_FILES_PATH/network/$NETWORK" case "$INSTALLER" in @@ -143,7 +155,10 @@ case "$INSTALLER" in # Install dependencies progress 1 "Installing dependencies..." { sudo dnf -y check-update; } >&2 - { sudo dnf -y install dnf-utils moreutils || fail "Could not install OS dependencies."; } >&2 + { sudo dnf -y install epel-release dnf-utils || fail "Could not install OS dependencies."; } >&2 + # PowerTools is needed for CentOS 8 to install moreutils, but it will fail for e.g. Fedora + { sudo dnf config-manager --set-enabled powertools || true; } >&2 + { sudo dnf -y install moreutils || fail "Could not install moreutils."; } >&2 # Download and extract package files progress 2 "Downloading Rocket Pool update tracker package files..." @@ -164,9 +179,19 @@ case "$INSTALLER" in # Install the update checking service progress 4 "Installing update tracker service..." - { sudo systemctl daemon-reload || fail "Couldn't update systemctl daemons."; } >&2 - { sudo systemctl enable rp-update-tracker || fail "Couldn't enable update tracker service."; } >&2 - { sudo systemctl start rp-update-tracker || fail "Couldn't start update tracker service."; } >&2 + if [ "$SELINUX" = true ]; then + echo -e "${COLOR_YELLOW}Your system has SELinux enabled, so Rocket Pool can't automatically start the update tracker service." + echo "Please run the following commands manually:" + echo "" + echo -e '\tsudo restorecon /usr/share/rp-dnf-check.sh /usr/share/rp-version-check.sh /etc/systemd/system/rp-update-tracker.service /etc/systemd/system/rp-update-tracker.timer' + echo -e '\tsudo systemctl enable rp-update-tracker' + echo -e '\tsudo systemctl start rp-update-tracker' + echo -e "${COLOR_RESET}" + else + { sudo systemctl daemon-reload || fail "Couldn't update systemctl daemons."; } >&2 + { sudo systemctl enable rp-update-tracker || fail "Couldn't enable update tracker service."; } >&2 + { sudo systemctl start rp-update-tracker || fail "Couldn't start update tracker service."; } >&2 + fi ;; @@ -179,7 +204,7 @@ case "$INSTALLER" in # Install dependencies progress 1 "Installing dependencies..." - { sudo yum -y check-update; } >&2 + { sudo yum -y check-update; } >&2echo { sudo yum -y install epel-release yum-utils || fail "Could not install OS dependencies."; } >&2 { sudo yum -y install moreutils || fail "Could not install moreutils."; } >&2 @@ -202,9 +227,19 @@ case "$INSTALLER" in # Install the update checking service progress 4 "Installing update tracker service..." - { sudo systemctl daemon-reload || fail "Couldn't update systemctl daemons."; } >&2 - { sudo systemctl enable rp-update-tracker || fail "Couldn't enable update tracker service."; } >&2 - { sudo systemctl start rp-update-tracker || fail "Couldn't start update tracker service."; } >&2 + if [ "$SELINUX" = true ]; then + echo -e "${COLOR_YELLOW}Your system has SELinux enabled, so Rocket Pool can't automatically start the update tracker service." + echo "Please run the following commands manually:" + echo "" + echo -e '\tsudo restorecon /usr/share/rp-yum-check.sh /usr/share/rp-version-check.sh /etc/systemd/system/rp-update-tracker.service /etc/systemd/system/rp-update-tracker.timer' + echo -e '\tsudo systemctl enable rp-update-tracker' + echo -e '\tsudo systemctl start rp-update-tracker' + echo -e "${COLOR_RESET}" + else + { sudo systemctl daemon-reload || fail "Couldn't update systemctl daemons."; } >&2 + { sudo systemctl enable rp-update-tracker || fail "Couldn't enable update tracker service."; } >&2 + { sudo systemctl start rp-update-tracker || fail "Couldn't start update tracker service."; } >&2 + fi ;; From f7d83597e279d722d562a80cd3fdc07e341a8bef Mon Sep 17 00:00:00 2001 From: Joe Clapis Date: Wed, 18 Aug 2021 01:20:06 -0400 Subject: [PATCH 13/14] Got update tracking working on Debian --- install-update-tracker.sh | 13 +++++++++---- rp-update-tracker/apt/apt-metrics.sh | 13 ++++++++++--- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/install-update-tracker.sh b/install-update-tracker.sh index d3ec2317..f864b087 100755 --- a/install-update-tracker.sh +++ b/install-update-tracker.sh @@ -128,7 +128,9 @@ case "$INSTALLER" in # Install dependencies progress 1 "Installing dependencies..." { sudo apt -y update; } >&2 - { sudo apt -y install update-notifier-common moreutils || fail "Could not install OS dependencies."; } >&2 + # Debian doesn't have update-notifier-common + { sudo apt -y install update-notifier-common || true; } >&2 + { sudo apt -y install moreutils || fail "Could not install OS dependencies."; } >&2 # Download and extract package files progress 2 "Downloading Rocket Pool update tracker package files..." @@ -155,9 +157,10 @@ case "$INSTALLER" in # Install dependencies progress 1 "Installing dependencies..." { sudo dnf -y check-update; } >&2 - { sudo dnf -y install epel-release dnf-utils || fail "Could not install OS dependencies."; } >&2 - # PowerTools is needed for CentOS 8 to install moreutils, but it will fail for e.g. Fedora + { sudo dnf -y install dnf-utils || fail "Could not install OS dependencies."; } >&2 + # PowerTools and epel-release are needed for CentOS 8 to install moreutils, but it will fail for e.g. Fedora { sudo dnf config-manager --set-enabled powertools || true; } >&2 + { sudo dnf -y install epel-release || true; } >&2 { sudo dnf -y install moreutils || fail "Could not install moreutils."; } >&2 # Download and extract package files @@ -205,7 +208,9 @@ case "$INSTALLER" in # Install dependencies progress 1 "Installing dependencies..." { sudo yum -y check-update; } >&2echo - { sudo yum -y install epel-release yum-utils || fail "Could not install OS dependencies."; } >&2 + { sudo yum -y install yum-utils || fail "Could not install OS dependencies."; } >&2 + # CentOS 7 requires epel-release, but ignore it if it doesn't exist for others + { sudo yum -y install epel-release || true; } >&2 { sudo yum -y install moreutils || fail "Could not install moreutils."; } >&2 # Download and extract package files diff --git a/rp-update-tracker/apt/apt-metrics.sh b/rp-update-tracker/apt/apt-metrics.sh index 76e28126..2cc69490 100644 --- a/rp-update-tracker/apt/apt-metrics.sh +++ b/rp-update-tracker/apt/apt-metrics.sh @@ -1,9 +1,16 @@ #!/bin/sh -APT_CHECK=$(/usr/lib/update-notifier/apt-check 2>&1 || echo "0;0") +if [ -f /usr/lib/update-notifier/apt-check ]; then + # For Ubuntu systems + APT_CHECK=$(/usr/lib/update-notifier/apt-check 2>&1 || echo "0;0") + UPDATES=$(echo "$APT_CHECK" | cut -d ';' -f 1) + SECURITY=$(echo "$APT_CHECK" | cut -d ';' -f 2) +else + # For Debian systems + UPDATES=$(LANG=C apt dist-upgrade -s | grep -P '^\d+ upgraded'| cut -d" " -f1) + SECURITY=0 +fi -UPDATES=$(echo "$APT_CHECK" | cut -d ';' -f 1) -SECURITY=$(echo "$APT_CHECK" | cut -d ';' -f 2) REBOOT=$([ -f /var/run/reboot-required ] && echo 1 || echo 0) echo "# HELP os_upgrades_pending Apt package pending updates by origin." From 7d8cffe287875ed997d7b9da3439d5db3b07e487 Mon Sep 17 00:00:00 2001 From: Joe Clapis Date: Wed, 18 Aug 2021 01:39:55 -0400 Subject: [PATCH 14/14] Updated the dashboards to use the os-prefixed update metrics --- Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json | 4 ++-- Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json | 4 ++-- Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json | 4 ++-- Dashboards/Rocket Pool Dashboard v1.0.0 for Teku.json | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json b/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json index b635d043..5efccd85 100644 --- a/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json +++ b/Dashboards/Rocket Pool Dashboard v1.0.0 for Lighthouse.json @@ -197,7 +197,7 @@ "targets": [ { "exemplar": true, - "expr": "node_reboot_required{job=\"node\"}", + "expr": "os_reboot_required{job=\"node\"}", "interval": "", "legendFormat": "", "refId": "A" @@ -257,7 +257,7 @@ "targets": [ { "exemplar": true, - "expr": "max(apt_upgrades_pending{job=\"node\"})", + "expr": "max(os_upgrades_pending{job=\"node\"})", "interval": "", "legendFormat": "OS", "refId": "A" diff --git a/Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json b/Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json index 1c377e92..5d83e893 100644 --- a/Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json +++ b/Dashboards/Rocket Pool Dashboard v1.0.0 for Nimbus.json @@ -197,7 +197,7 @@ "targets": [ { "exemplar": true, - "expr": "node_reboot_required{job=\"node\"}", + "expr": "os_reboot_required{job=\"node\"}", "interval": "", "legendFormat": "", "refId": "A" @@ -257,7 +257,7 @@ "targets": [ { "exemplar": true, - "expr": "max(apt_upgrades_pending{job=\"node\"})", + "expr": "max(os_upgrades_pending{job=\"node\"})", "interval": "", "legendFormat": "OS", "refId": "A" diff --git a/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json b/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json index 7ee0c83c..8e3ed3c5 100644 --- a/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json +++ b/Dashboards/Rocket Pool Dashboard v1.0.0 for Prysm.json @@ -197,7 +197,7 @@ "targets": [ { "exemplar": true, - "expr": "node_reboot_required{job=\"node\"}", + "expr": "os_reboot_required{job=\"node\"}", "interval": "", "legendFormat": "", "refId": "A" @@ -257,7 +257,7 @@ "targets": [ { "exemplar": true, - "expr": "max(apt_upgrades_pending{job=\"node\"})", + "expr": "max(os_upgrades_pending{job=\"node\"})", "interval": "", "legendFormat": "OS", "refId": "A" diff --git a/Dashboards/Rocket Pool Dashboard v1.0.0 for Teku.json b/Dashboards/Rocket Pool Dashboard v1.0.0 for Teku.json index d825480c..82b49ad0 100644 --- a/Dashboards/Rocket Pool Dashboard v1.0.0 for Teku.json +++ b/Dashboards/Rocket Pool Dashboard v1.0.0 for Teku.json @@ -197,7 +197,7 @@ "targets": [ { "exemplar": true, - "expr": "node_reboot_required{job=\"node\"}", + "expr": "os_reboot_required{job=\"node\"}", "interval": "", "legendFormat": "", "refId": "A" @@ -257,7 +257,7 @@ "targets": [ { "exemplar": true, - "expr": "max(apt_upgrades_pending{job=\"node\"})", + "expr": "max(os_upgrades_pending{job=\"node\"})", "interval": "", "legendFormat": "OS", "refId": "A"