├── .gitignore ├── validator └── passwords │ └── wallet-password ├── .env ├── geth └── .gitignore ├── beacon └── .gitignore ├── launchpad └── .gitignore ├── prometheus └── .gitignore ├── slasher └── .gitignore ├── grafana └── provisioning │ ├── dashboards │ ├── dashboard.yml │ ├── more_10_validators.json │ └── less_10_validators.json │ └── datasources │ └── datasource.yml ├── config ├── slasher.yaml ├── spadina │ ├── slasher.yaml │ ├── validator.yaml │ └── beacon.yaml ├── zinken │ ├── slasher.yaml │ ├── validator.yaml │ └── beacon.yaml ├── ha │ ├── slasher.yaml │ ├── validator-wallet.yaml │ └── beacon.yaml ├── validator.yaml ├── beacon-no-geth.yaml ├── beacon.yaml └── prometheus.yaml ├── compose-examples ├── docker-compose.beacon-validator.override.yaml ├── docker-compose.zinken.override.yaml ├── docker-compose.spadina.override.yaml └── docker-compose.arm64.override.yaml ├── create-account.yaml ├── LICENSE ├── docker-compose.yaml └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /validator/passwords/wallet-password: -------------------------------------------------------------------------------- 1 | replace-this-with-your-wallet-password -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | PRYSM_DOCKER_TAG=HEAD-c59edb 2 | PRYSM_ARM64_DOCKER_TAG=v1.0.0-alpha.28 3 | -------------------------------------------------------------------------------- /geth/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore 5 | -------------------------------------------------------------------------------- /beacon/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore 5 | -------------------------------------------------------------------------------- /launchpad/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore 5 | -------------------------------------------------------------------------------- /prometheus/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore 5 | -------------------------------------------------------------------------------- /slasher/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore 5 | -------------------------------------------------------------------------------- /grafana/provisioning/dashboards/dashboard.yml: -------------------------------------------------------------------------------- 1 | apiVersion: 1 2 | 3 | providers: 4 | - name: 'Prometheus' 5 | orgId: 1 6 | folder: '' 7 | type: file 8 | disableDeletion: false 9 | editable: true 10 | options: 11 | path: /etc/grafana/provisioning/dashboards 12 | -------------------------------------------------------------------------------- /config/slasher.yaml: -------------------------------------------------------------------------------- 1 | ############################################################ 2 | ## 3 | ## Read up on parameters on 4 | ## https://docs.prylabs.network/docs/prysm-usage/parameters/ 5 | ## 6 | ############################################################ 7 | 8 | datadir: /data 9 | 10 | ############## 11 | # Connectivity 12 | beacon-rpc-provider: beacon:4000 13 | monitoring-host: 0.0.0.0 -------------------------------------------------------------------------------- /config/spadina/slasher.yaml: -------------------------------------------------------------------------------- 1 | ############################################################ 2 | ## 3 | ## Read up on parameters on 4 | ## https://docs.prylabs.network/docs/prysm-usage/parameters/ 5 | ## 6 | ############################################################ 7 | 8 | datadir: /data 9 | 10 | ############## 11 | # Connectivity 12 | beacon-rpc-provider: beacon:4000 13 | monitoring-host: 0.0.0.0 14 | 15 | spadina: yes -------------------------------------------------------------------------------- /config/zinken/slasher.yaml: -------------------------------------------------------------------------------- 1 | ############################################################ 2 | ## 3 | ## Read up on parameters on 4 | ## https://docs.prylabs.network/docs/prysm-usage/parameters/ 5 | ## 6 | ############################################################ 7 | 8 | datadir: /data 9 | 10 | ############## 11 | # Connectivity 12 | beacon-rpc-provider: beacon:4000 13 | monitoring-host: 0.0.0.0 14 | 15 | zinken: yes 16 | -------------------------------------------------------------------------------- /config/ha/slasher.yaml: -------------------------------------------------------------------------------- 1 | ############################################################ 2 | ## 3 | ## Read up on parameters on 4 | ## https://docs.prylabs.network/docs/prysm-usage/parameters/ 5 | ## 6 | ############################################################ 7 | 8 | datadir: /data 9 | 10 | ############## 11 | # Connectivity 12 | beacon-rpc-provider: haproxy:14000 13 | monitoring-host: 0.0.0.0 14 | monitoring-port: 8680 15 | rpc-host: 0.0.0.0 16 | 17 | # Enables historical attestation detection for the slasher 18 | enable-historical-detection: no -------------------------------------------------------------------------------- /config/validator.yaml: -------------------------------------------------------------------------------- 1 | ############################################################ 2 | ## 3 | ## Read up on parameters on 4 | ## https://docs.prylabs.network/docs/prysm-usage/parameters/ 5 | ## 6 | ############################################################ 7 | 8 | ############## 9 | # Connectivity 10 | beacon-rpc-provider: beacon:4000 11 | monitoring-host: 0.0.0.0 12 | 13 | ##################################### 14 | # Validator database, accounts & key management 15 | datadir: /data/db 16 | wallet-dir: /data/wallets 17 | wallet-password-file: /data/passwords/wallet-password 18 | 19 | ########### 20 | # Fun Stuff 21 | graffiti: "" 22 | -------------------------------------------------------------------------------- /config/spadina/validator.yaml: -------------------------------------------------------------------------------- 1 | ############################################################ 2 | ## 3 | ## Read up on parameters on 4 | ## https://docs.prylabs.network/docs/prysm-usage/parameters/ 5 | ## 6 | ############################################################ 7 | 8 | ############## 9 | # Connectivity 10 | beacon-rpc-provider: beacon:4000 11 | monitoring-host: 0.0.0.0 12 | 13 | ##################################### 14 | # Validator database, accounts & key management 15 | datadir: /data/db 16 | wallet-dir: /data/wallets 17 | wallet-password-file: /data/passwords/wallet-password 18 | 19 | ########### 20 | # Fun Stuff 21 | graffiti: "" 22 | 23 | spadina: yes -------------------------------------------------------------------------------- /config/zinken/validator.yaml: -------------------------------------------------------------------------------- 1 | ############################################################ 2 | ## 3 | ## Read up on parameters on 4 | ## https://docs.prylabs.network/docs/prysm-usage/parameters/ 5 | ## 6 | ############################################################ 7 | 8 | ############## 9 | # Connectivity 10 | beacon-rpc-provider: beacon:4000 11 | monitoring-host: 0.0.0.0 12 | 13 | ##################################### 14 | # Validator database, accounts & key management 15 | datadir: /data/db 16 | wallet-dir: /data/wallets 17 | wallet-password-file: /data/passwords/wallet-password 18 | 19 | ########### 20 | # Fun Stuff 21 | graffiti: "" 22 | 23 | zinken: yes 24 | -------------------------------------------------------------------------------- /compose-examples/docker-compose.beacon-validator.override.yaml: -------------------------------------------------------------------------------- 1 | version: "3.7" 2 | 3 | x-disabled-service: 4 | &disabled-service 5 | image: tianon/true 6 | restart: "no" 7 | command: "" 8 | entrypoint: "" 9 | 10 | services: 11 | geth: 12 | <<: *disabled-service 13 | beacon: 14 | volumes: 15 | - ./config/beacon-no-geth.yaml:/config/beacon.yaml:ro 16 | - ./beacon:/data 17 | slasher: 18 | <<: *disabled-service 19 | prometheus: 20 | <<: *disabled-service 21 | grafana: 22 | <<: *disabled-service 23 | -------------------------------------------------------------------------------- /compose-examples/docker-compose.zinken.override.yaml: -------------------------------------------------------------------------------- 1 | version: "3.7" 2 | 3 | x-disabled-service: &disabled-service 4 | image: tianon/true 5 | restart: "no" 6 | command: "" 7 | entrypoint: "" 8 | 9 | services: 10 | beacon: 11 | volumes: 12 | - ./config/zinken/beacon.yaml:/config/beacon.yaml:ro 13 | - ./beacon:/data 14 | validator: 15 | volumes: 16 | - ./config/zinken/validator.yaml:/config/validator.yaml:ro 17 | - ./validator:/data 18 | slasher: 19 | volumes: 20 | - ./config/zinken/slasher.yaml:/config/slasher.yaml:ro 21 | - ./slasher:/data 22 | -------------------------------------------------------------------------------- /compose-examples/docker-compose.spadina.override.yaml: -------------------------------------------------------------------------------- 1 | version: "3.7" 2 | 3 | x-disabled-service: 4 | &disabled-service 5 | image: tianon/true 6 | restart: "no" 7 | command: "" 8 | entrypoint: "" 9 | 10 | services: 11 | beacon: 12 | volumes: 13 | - ./config/spadina/beacon.yaml:/config/beacon.yaml:ro 14 | - ./beacon:/data 15 | validator: 16 | volumes: 17 | - ./config/spadina/validator.yaml:/config/validator.yaml:ro 18 | - ./validator:/data 19 | slasher: 20 | volumes: 21 | - ./config/spadina/slasher.yaml:/config/slasher.yaml:ro 22 | - ./slasher:/data -------------------------------------------------------------------------------- /config/ha/validator-wallet.yaml: -------------------------------------------------------------------------------- 1 | ############################################################ 2 | ## 3 | ## Read up on parameters on 4 | ## https://docs.prylabs.network/docs/prysm-usage/parameters/ 5 | ## 6 | ############################################################ 7 | 8 | ############## 9 | # Connectivity 10 | beacon-rpc-provider: haproxy:14000 11 | 12 | grpc-retries: 18446744073709551615 13 | 14 | monitoring-host: 0.0.0.0 15 | monitoring-port: 8580 16 | 17 | enable-local-protection: yes 18 | datadir: /data/db 19 | 20 | enable-external-slasher-protection: yes 21 | slasher-rpc-provider: haproxy:14002 22 | 23 | ##################################### 24 | # Validator accounts & key management 25 | disable-accounts-v2: yes 26 | keymanager: wallet 27 | keymanageropts: /data/keystoreWallet.json 28 | 29 | ########### 30 | # Fun Stuff 31 | graffiti: "" -------------------------------------------------------------------------------- /config/beacon-no-geth.yaml: -------------------------------------------------------------------------------- 1 | ############################################################ 2 | ## 3 | ## Read up on parameters on 4 | ## https://docs.prylabs.network/docs/prysm-usage/parameters/ 5 | ## 6 | ############################################################ 7 | 8 | accept-terms-of-use: yes 9 | 10 | datadir: /data 11 | 12 | ####################### 13 | # Connectivity settings 14 | p2p-host-ip: "" 15 | p2p-host-dns: "" 16 | 17 | rpc-host: 0.0.0.0 18 | monitoring-host: 0.0.0.0 19 | 20 | # disable scan of local network 21 | p2p-denylist: ["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16","100.64.0.0/10","169.254.0.0/16"] 22 | 23 | # changing this also needs to be changed in docker-compose.yaml! 24 | p2p-tcp-port: 13000 25 | 26 | # enable db backup endpoint 27 | enable-db-backup-webhook: true 28 | 29 | http-web3provider: https://goerli.prylabs.net 30 | 31 | blst: yes 32 | -------------------------------------------------------------------------------- /config/spadina/beacon.yaml: -------------------------------------------------------------------------------- 1 | ############################################################ 2 | ## 3 | ## Read up on parameters on 4 | ## https://docs.prylabs.network/docs/prysm-usage/parameters/ 5 | ## 6 | ############################################################ 7 | 8 | datadir: /data 9 | 10 | ####################### 11 | # Connectivity settings 12 | p2p-host-ip: "" 13 | p2p-host-dns: "" 14 | 15 | rpc-host: 0.0.0.0 16 | monitoring-host: 0.0.0.0 17 | 18 | # disable scan of local network 19 | p2p-denylist: ["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16","100.64.0.0/10","169.254.0.0/16"] 20 | 21 | # changing this also needs to be changed in docker-compose.yaml! 22 | p2p-tcp-port: 13000 23 | 24 | # enable db backup endpoint 25 | enable-db-backup-webhook: true 26 | 27 | ############################## 28 | # Connection to geth container 29 | http-web3provider: http://geth:8545 30 | 31 | spadina: yes -------------------------------------------------------------------------------- /config/zinken/beacon.yaml: -------------------------------------------------------------------------------- 1 | ############################################################ 2 | ## 3 | ## Read up on parameters on 4 | ## https://docs.prylabs.network/docs/prysm-usage/parameters/ 5 | ## 6 | ############################################################ 7 | 8 | datadir: /data 9 | 10 | ####################### 11 | # Connectivity settings 12 | p2p-host-ip: "" 13 | p2p-host-dns: "" 14 | 15 | rpc-host: 0.0.0.0 16 | monitoring-host: 0.0.0.0 17 | 18 | # disable scan of local network 19 | p2p-denylist: ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "100.64.0.0/10", "169.254.0.0/16"] 20 | 21 | # changing this also needs to be changed in docker-compose.yaml! 22 | p2p-tcp-port: 13000 23 | 24 | # enable db backup endpoint 25 | enable-db-backup-webhook: true 26 | 27 | ############################## 28 | # Connection to geth container 29 | http-web3provider: http://geth:8545 30 | 31 | zinken: yes 32 | -------------------------------------------------------------------------------- /config/beacon.yaml: -------------------------------------------------------------------------------- 1 | ############################################################ 2 | ## 3 | ## Read up on parameters on 4 | ## https://docs.prylabs.network/docs/prysm-usage/parameters/ 5 | ## 6 | ############################################################ 7 | 8 | accept-terms-of-use: yes 9 | 10 | datadir: /data 11 | 12 | ####################### 13 | # Connectivity settings 14 | p2p-host-ip: "" 15 | p2p-host-dns: "" 16 | 17 | rpc-host: 0.0.0.0 18 | monitoring-host: 0.0.0.0 19 | 20 | # disable scan of local network 21 | p2p-denylist: ["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16","100.64.0.0/10","169.254.0.0/16"] 22 | 23 | # changing this also needs to be changed in docker-compose.yaml! 24 | p2p-tcp-port: 13000 25 | 26 | # enable db backup endpoint 27 | enable-db-backup-webhook: true 28 | 29 | ############################## 30 | # Connection to geth container 31 | http-web3provider: http://geth:8545 32 | 33 | blst: yes 34 | -------------------------------------------------------------------------------- /create-account.yaml: -------------------------------------------------------------------------------- 1 | version: "3.7" 2 | services: 3 | validator-import-launchpad: 4 | container_name: validator-import-launchpad 5 | image: gcr.io/prysmaticlabs/prysm/validator:${PRYSM_DOCKER_TAG} 6 | command: accounts-v2 import --keys-dir="/launchpad/eth2.0-deposit-cli/validator_keys" --wallet-dir="/data/wallets" --wallet-password-file="/data/passwords/wallet-password" 7 | volumes: 8 | - ./validator:/data 9 | - ./launchpad:/launchpad 10 | validator-list-accounts: 11 | container_name: validator_list_accounts 12 | image: gcr.io/prysmaticlabs/prysm/validator:${PRYSM_DOCKER_TAG} 13 | command: accounts-v2 list --wallet-dir="/data/wallets" --wallet-password-file="/data/passwords/wallet-password" 14 | volumes: 15 | - ./validator:/data -------------------------------------------------------------------------------- /compose-examples/docker-compose.arm64.override.yaml: -------------------------------------------------------------------------------- 1 | version: "3.7" 2 | 3 | x-disabled-service: 4 | &disabled-service 5 | image: tianon/true 6 | restart: "no" 7 | command: "" 8 | entrypoint: "" 9 | 10 | services: 11 | geth: 12 | <<: *disabled-service 13 | beacon: 14 | image: eth2spectrum/prysm-beacon-chain-arm64:${PRYSM_ARM64_DOCKER_TAG} 15 | volumes: 16 | - ./config/beacon-no-geth.yaml:/config/beacon.yaml:ro 17 | - ./beacon:/data 18 | validator: 19 | image: eth2spectrum/prysm-validator-arm64:${PRYSM_ARM64_DOCKER_TAG} 20 | slasher: 21 | image: eth2spectrum/prysm-slasher-arm64:${PRYSM_ARM64_DOCKER_TAG} 22 | prometheus: 23 | <<: *disabled-service 24 | grafana: 25 | <<: *disabled-service -------------------------------------------------------------------------------- /config/prometheus.yaml: -------------------------------------------------------------------------------- 1 | global: 2 | scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. 3 | evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. 4 | # scrape_timeout is set to the global default (10s). 5 | # Alertmanager configuration 6 | alerting: 7 | alertmanagers: 8 | - static_configs: 9 | - targets: 10 | # - alertmanager:9093 11 | # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. 12 | rule_files: 13 | # - "first_rules.yml" 14 | # - "second_rules.yml" 15 | # A scrape configuration containing exactly one endpoint to scrape: 16 | # Here it's Prometheus itself. 17 | scrape_configs: 18 | - job_name: 'validator' 19 | static_configs: 20 | - targets: ['validator:8081'] 21 | - job_name: 'beacon node' 22 | static_configs: 23 | - targets: ['beacon:8080'] 24 | - job_name: 'slasher' 25 | static_configs: 26 | - targets: ['slasher:8082'] 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 stefa2k 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /config/ha/beacon.yaml: -------------------------------------------------------------------------------- 1 | ############################################################ 2 | ## 3 | ## Read up on parameters on 4 | ## https://docs.prylabs.network/docs/prysm-usage/parameters/ 5 | ## 6 | ############################################################ 7 | 8 | datadir: /data 9 | 10 | ####################### 11 | # Connectivity settings 12 | p2p-host-ip: "" 13 | p2p-host-dns: "" 14 | p2p-max-peers: 100 15 | 16 | rpc-host: 0.0.0.0 17 | monitoring-host: 0.0.0.0 18 | monitoring-port: 8480 19 | 20 | # disable scan of local network 21 | p2p-denylist: ["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16","100.64.0.0/10","169.254.0.0/16"] 22 | 23 | # changing this also needs to be changed in docker-compose.yaml! 24 | p2p-tcp-port: 13000 25 | 26 | # slasher 27 | historical-slasher-node: no 28 | 29 | # json rpc port 30 | grpc-gateway-port: 3500 31 | grpc-gateway-host: 0.0.0.0 32 | 33 | # enable db backup endpoint 34 | enable-db-backup-webhook: true 35 | 36 | # speed up initial sync 37 | disable-initial-sync-verify-all-signatures: yes 38 | 39 | ######################################### 40 | # Connection to ha reverse proxy for geth 41 | http-web3provider: http://haproxy:18545 42 | 43 | dev: yes -------------------------------------------------------------------------------- /grafana/provisioning/datasources/datasource.yml: -------------------------------------------------------------------------------- 1 | # config file version 2 | apiVersion: 1 3 | 4 | # list of datasources that should be deleted from the database 5 | deleteDatasources: 6 | - name: Prometheus 7 | orgId: 1 8 | 9 | # list of datasources to insert/update depending 10 | # whats available in the database 11 | datasources: 12 | # name of the datasource. Required 13 | - name: Prometheus 14 | # datasource type. Required 15 | type: prometheus 16 | # access mode. direct or proxy. Required 17 | access: proxy 18 | # org id. will default to orgId 1 if not specified 19 | orgId: 1 20 | # url 21 | url: http://prometheus:9090 22 | # database password, if used 23 | password: 24 | # database user, if used 25 | user: 26 | # database name, if used 27 | database: 28 | # enable/disable basic auth 29 | basicAuth: true 30 | # basic auth username 31 | basicAuthUser: admin 32 | # basic auth password 33 | basicAuthPassword: admin 34 | # enable/disable with credentials headers 35 | withCredentials: 36 | # mark as default datasource. Max one per org 37 | isDefault: true 38 | # fields that will be converted to json and stored in json_data 39 | jsonData: 40 | graphiteVersion: "1.1" 41 | tlsAuth: false 42 | tlsAuthWithCACert: false 43 | # json object of data that will be encrypted. 44 | secureJsonData: 45 | tlsCACert: "..." 46 | tlsClientCert: "..." 47 | tlsClientKey: "..." 48 | version: 1 49 | # allow users to edit datasources from the UI. 50 | editable: true 51 | -------------------------------------------------------------------------------- /docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: "3.7" 2 | 3 | x-logging: &logging 4 | logging: 5 | driver: "json-file" 6 | options: 7 | max-file: "10" 8 | max-size: "100m" 9 | 10 | services: 11 | geth: 12 | container_name: geth 13 | image: ethereum/client-go:v1.9.14 14 | restart: always 15 | hostname: geth 16 | command: --goerli --rpc --rpcport=8545 --rpcaddr=0.0.0.0 --rpcvhosts="*" --allow-insecure-unlock --rpcapi="db,eth,net,web3,personal" 17 | ports: 18 | - 30303:30303/tcp 19 | - 30303:30303/udp 20 | - 127.0.0.1:8545:8545 21 | volumes: 22 | - ./geth:/root/.ethereum 23 | <<: *logging 24 | beacon: 25 | container_name: beacon-chain 26 | image: gcr.io/prysmaticlabs/prysm/beacon-chain:${PRYSM_DOCKER_TAG} 27 | restart: always 28 | hostname: beacon-chain 29 | depends_on: 30 | - geth 31 | command: --config-file=/config/beacon.yaml 32 | ports: 33 | - 127.0.0.1:4000:4000 34 | - 13000:13000/tcp 35 | - 12000:12000/udp 36 | volumes: 37 | - ./config/beacon.yaml:/config/beacon.yaml:ro 38 | - ./beacon:/data 39 | <<: *logging 40 | validator: 41 | container_name: validator 42 | image: gcr.io/prysmaticlabs/prysm/validator:${PRYSM_DOCKER_TAG} 43 | restart: on-failure 44 | hostname: validator 45 | depends_on: 46 | - beacon 47 | command: --config-file=/config/validator.yaml 48 | volumes: 49 | - ./config/validator.yaml:/config/validator.yaml:ro 50 | - ./validator:/data 51 | <<: *logging 52 | slasher: 53 | container_name: slasher 54 | image: gcr.io/prysmaticlabs/prysm/slasher:${PRYSM_DOCKER_TAG} 55 | restart: always 56 | hostname: slasher 57 | depends_on: 58 | - beacon 59 | command: --config-file=/config/slasher.yaml 60 | volumes: 61 | - ./config/slasher.yaml:/config/slasher.yaml:ro 62 | - ./slasher:/data 63 | <<: *logging 64 | prometheus: 65 | container_name: prometheus 66 | image: prom/prometheus:v2.19.0 67 | user: root # https://github.com/prometheus/prometheus/issues/5976 68 | restart: on-failure 69 | hostname: prometheus 70 | command: --storage.tsdb.retention.time=31d --config.file=/etc/prometheus/prometheus.yml 71 | ports: 72 | - 127.0.0.1:9090:9090 73 | volumes: 74 | - ./config/prometheus.yaml:/etc/prometheus/prometheus.yml 75 | - ./prometheus:/prometheus 76 | <<: *logging 77 | grafana: 78 | container_name: grafana 79 | image: grafana/grafana:7.0.3 80 | restart: on-failure 81 | hostname: grafana 82 | depends_on: 83 | - prometheus 84 | ports: 85 | - 127.0.0.1:3000:3000 86 | volumes: 87 | - ./grafana/provisioning:/etc/grafana/provisioning 88 | - grafana_data:/var/lib/grafana 89 | <<: *logging 90 | 91 | volumes: 92 | grafana_data: 93 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # prysm-docker-compose 2 | 3 | # This repo is no longer maintained, the project migrated to https://github.com/stereum-dev/ethereum2-docker-compose and is now part of the repository there! 4 | 5 | This docker-compose suite includes all parts to run and monitor a Prysm Ethereum 2.0 staking node. Please read this README in order to customize it to your needs. 6 | 7 | ![image](https://user-images.githubusercontent.com/54934211/82576760-5ad63000-9b8a-11ea-9089-c6a60a692fb1.png) 8 | 9 | ![image](https://user-images.githubusercontent.com/54934211/82309772-d5a11e80-99c3-11ea-831d-e485b48e920e.png) 10 | 11 | ![image](https://user-images.githubusercontent.com/54934211/82322339-a3e58300-99d6-11ea-8962-7795c46ed778.png) 12 | 13 | ![image](https://user-images.githubusercontent.com/54934211/82313615-e1431400-99c8-11ea-9e04-eb7f7eda3caf.png) 14 | Credits to [prysm-grafana-dashboard](https://github.com/GuillaumeMiralles/prysm-grafana-dashboard) for providing the dashboards! 15 | 16 | ![image](https://user-images.githubusercontent.com/54934211/84988542-7a895580-b142-11ea-8e25-d9c8a5499521.png) 17 | Using [docker-elk](https://github.com/stefa2k/docker-elk) 18 | 19 | ## Services 20 | * geth (beacon conntects to it to see deposits for validators) 21 | * beacon 22 | * validator 23 | * slasher 24 | * prometheus 25 | * grafana 26 | 27 | **All services are enabled by default.** 28 | 29 | ### Minimal Setup (beacon & validator only) 30 | In case you want to run only beacon & validator (geth, slasher, prometheus, grafana get disabled) move the `./compose-examples/docker-compose.beacon-validator.override.yaml` file in the same folder as your `docker-compose.yaml` and rename it to `docker-compose.override.yaml`. Read up on [docker-compose files & override](https://docs.docker.com/compose/extends/#multiple-compose-files) to customize your setup further. 31 | 32 | ### ARM64 (raspberry pi) 33 | Using this setup on a raspberry pi is as easy as copying the compose override file from `./compose-examples/docker-compose.arm64.override.yaml` to `./docker-compose.override.yaml`. The override file should then be in the same folder as your `docker-compose.override.yaml`: 34 | ``` 35 | cp compose-examples/docker-compose.arm64.override.yaml docker-compose.override.yaml 36 | ``` 37 | This also disables prometheus and grafana and uses external eth1 node connection (see `./config/beacon-no-geth.yaml` for changing the endpoint). 38 | 39 | ### Spadina 40 | To run with [Spadina testnet](https://github.com/goerli/medalla/tree/master/spadina) copy `./compose-examples/docker-compose.spadina.override.yaml` in the same folder as your `docker-compose.yaml` and rename it to `docker-compose.override.yaml`. 41 | 42 | ### Zinken 43 | To run with [Zinken testnet](https://github.com/goerli/medalla/tree/master/zinken) copy `./compose-examples/docker-compose.zinken.override.yaml` in the same folder as your `docker-compose.yaml` and rename it to `docker-compose.override.yaml`. 44 | 45 | Thanks to [@danbryan](https://github.com/danbryan) for this contribution! 46 | 47 | ## (optional) Configure your node 48 | 49 | ### Public ip & other Prysm parameters/arguments 50 | Configuration files are located in the folder `./config`. To gain a better connectivity for your beacon node you should specifiy your public ip and/or your dns name in `./config/beacon.yaml`. Follow the guide [Improve Peer-to-Peer Connectivity](https://docs.prylabs.network/docs/prysm-usage/p2p-host-ip/). 51 | 52 | ## Validator accounts with launchpad 53 | Please complete the steps on [launchpad](https://medalla.launchpad.ethereum.org/) and store the generated files of `~/eth2.0-deposit-cli/validator_keys` in `./launchpad/eth2.0-deposit-cli/validator_keys`. The necessary directories need to be created. Please create the directories `./validator/wallets` and put your wallet password in `./validator/passwords/wallet-password`. 54 | 55 | 1. Generate your validator(s) using [launchpad](https://medalla.launchpad.ethereum.org/) and complete the process 56 | 2. Copy your generated validator(s) from `~/eth2.0-deposit-cli/validator_keys` to `./launchpad/eth2.0-deposit-cli/validator_keys` 57 | 2. Run `docker-compose -f create-account.yaml run validator-import-launchpad` and use the **same password** as in the generation of the validator(s) 58 | 59 | You can repeat step 2 & 3 as often as you like, make sure to restart your validator to make it notice your new accounts! 60 | 61 | ## Run your prysm Ethereum 2.0 staking node 62 | 63 | ### Start it up 64 | Run with (as deamon with "-d") 65 | ``` 66 | docker-compose up -d 67 | ``` 68 | or run only certain services (in this case only beacon and validator) 69 | ``` 70 | docker-compose up -d beacon validator 71 | ``` 72 | 73 | ### Stop it 74 | Stop services (or everything) like this 75 | ``` 76 | docker-compose stop validator slasher 77 | ``` 78 | 79 | ### Shut it down for good 80 | Shut down your services (or everything) like this: 81 | ``` 82 | docker-compose down 83 | ``` 84 | Please note: This will also erase your logs, they are stored with your containers and will be deleted as well. 85 | 86 | ## Monitoring 87 | ### Logging 88 | Docker takes care of log files and log file rotation as well as limit (set to 10x100mb log files for each service). 89 | View logs of a certain service (in this case beacon, only the last 100 lines) 90 | ``` 91 | docker-compose logs --tail=100 beacon 92 | ``` 93 | 94 | ### Prometheus 95 | Runs on http://localhost:9090, scrapes data of beacon, validator and slasher. 96 | 97 | ### Grafana 98 | Grafana listens on http://localhost:3000 and uses the data provided by prometheus service. 99 | 100 | Login with username `admin` and password `admin` (Grafana defaults), data source to Prometheus is already established and dashboards installed. 101 | 102 | ### ELK 103 | To aggregate and display logs with [ELK-Stack](https://www.elastic.co/what-is/elk-stack) use [docker-elk](https://github.com/stefa2k/docker-elk) and easy cluster/standalone setup with [ansible-elk](https://github.com/stefa2k/ansible-elk). 104 | 105 | ## FAQ 106 | ### My `docker-compose` command doesn't work (e. g. `ERROR: Version in "./docker-compose.yaml" is unsupported.`) 107 | Most linux distributions (including Ubuntu) don't serve recent docker-compose versions in their package management. You can install a compatible version by following [official docker.io documentation](https://docs.docker.com/compose/install/). 108 | 109 | ### I keep missing attestations or keep getting warnings/errors about `roughtime` 110 | E. g. error messages like this: 111 | ``` 112 | WARN roughtime: Roughtime reports your clock is off by more than 2 seconds offset=4h0m0.345549475s 113 | ``` 114 | Make sure the OS' clock is synced. For Windows 10 and its subsystem linux might run on different times, to check this run `wsl` and then `date` (may differ by the OS you have installed). 115 | 116 | Ask google on how to get your OS' time synced again. 117 | 118 | ### How do I install docker and docker-compose on raspberry pi? 119 | There is an excellent short article about [how to install docker and docker-compose on raspberry pi](https://dev.to/rohansawant/installing-docker-and-docker-compose-on-the-raspberry-pi-in-5-simple-steps-3mgl), you can also use google to find another tutorial for it. 120 | 121 | ### I want to use a specific Ethereum 1 node! 122 | Edit the line with `http-web3provider` in [./config/beacon.yaml](https://github.com/stefa2k/prysm-docker-compose/blob/master/config/beacon.yaml) and set your Ethereum 1 node URL, e. g. use it with [Infura.io](https://infura.io/) and make it look like this: `http-web3provider: https://goerli.infura.io:443/v3/put-your-infura-id-here`. 123 | 124 | ## Support the maintainer 125 | This software is provided under MIT license and therefore freely usable without restrictions. Dontations are always welcome: 126 | 127 | ETH - 0xA1DDc7ed6E7b9179C68cDEE24a5e47dE930061eE 128 | 129 | BTC - 39n4LUxbcCfJvBGvFVVwQQkGxSJ44JRYV7 130 | -------------------------------------------------------------------------------- /grafana/provisioning/dashboards/more_10_validators.json: -------------------------------------------------------------------------------- 1 | { 2 | "annotations": { 3 | "list": [ 4 | { 5 | "builtIn": 1, 6 | "datasource": "-- Grafana --", 7 | "enable": true, 8 | "hide": true, 9 | "iconColor": "rgba(0, 211, 255, 1)", 10 | "limit": 100, 11 | "name": "Annotations & Alerts", 12 | "showIn": 0, 13 | "type": "dashboard" 14 | } 15 | ] 16 | }, 17 | "editable": true, 18 | "gnetId": null, 19 | "graphTooltip": 0, 20 | "id": null, 21 | "iteration": 1591781381749, 22 | "links": [], 23 | "panels": [ 24 | { 25 | "cacheTimeout": null, 26 | "colorBackground": true, 27 | "colorValue": false, 28 | "colors": [ 29 | "#299c46", 30 | "#FA6400", 31 | "rgb(176, 83, 5)" 32 | ], 33 | "datasource": "Prometheus", 34 | "fieldConfig": { 35 | "defaults": { 36 | "custom": {} 37 | }, 38 | "overrides": [] 39 | }, 40 | "format": "none", 41 | "gauge": { 42 | "maxValue": 100, 43 | "minValue": 0, 44 | "show": false, 45 | "thresholdLabels": false, 46 | "thresholdMarkers": true 47 | }, 48 | "gridPos": { 49 | "h": 1, 50 | "w": 24, 51 | "x": 0, 52 | "y": 27 53 | }, 54 | "id": 42, 55 | "interval": null, 56 | "links": [], 57 | "mappingType": 1, 58 | "mappingTypes": [ 59 | { 60 | "name": "value to text", 61 | "value": 1 62 | }, 63 | { 64 | "name": "range to text", 65 | "value": 2 66 | } 67 | ], 68 | "maxDataPoints": 100, 69 | "nullPointMode": "connected", 70 | "nullText": null, 71 | "postfix": "", 72 | "postfixFontSize": "50%", 73 | "prefix": "", 74 | "prefixFontSize": "50%", 75 | "rangeMaps": [ 76 | { 77 | "from": "null", 78 | "text": "N/A", 79 | "to": "null" 80 | } 81 | ], 82 | "sparkline": { 83 | "fillColor": "rgba(31, 118, 189, 0.18)", 84 | "full": false, 85 | "lineColor": "rgb(31, 120, 193)", 86 | "show": false, 87 | "ymax": null, 88 | "ymin": null 89 | }, 90 | "tableColumn": "", 91 | "targets": [ 92 | { 93 | "expr": "1", 94 | "interval": "", 95 | "legendFormat": "", 96 | "refId": "A" 97 | } 98 | ], 99 | "thresholds": "0,0", 100 | "timeFrom": null, 101 | "timeShift": null, 102 | "title": "VALIDATOR", 103 | "type": "singlestat", 104 | "valueFontSize": "20%", 105 | "valueMaps": [ 106 | { 107 | "op": "=", 108 | "text": "", 109 | "value": "1" 110 | } 111 | ], 112 | "valueName": "avg" 113 | }, 114 | { 115 | "datasource": "Prometheus", 116 | "description": "This panel shows the earning during the last hour, and the annualized % of the hourly earning.\n\nThose data won't be shown until the first validator is at least one hour old, or that you started prometheus at least one hour ago.\n\nAlso, the annualized % might be wrong if you have downtime while new validators are getting validated", 117 | "fieldConfig": { 118 | "defaults": { 119 | "custom": {}, 120 | "decimals": 2, 121 | "mappings": [], 122 | "thresholds": { 123 | "mode": "absolute", 124 | "steps": [ 125 | { 126 | "color": "red", 127 | "value": null 128 | }, 129 | { 130 | "color": "#EAB839", 131 | "value": 0 132 | }, 133 | { 134 | "color": "#299c46", 135 | "value": 0.000001 136 | } 137 | ] 138 | } 139 | }, 140 | "overrides": [ 141 | { 142 | "matcher": { 143 | "id": "byName", 144 | "options": "Annualized %" 145 | }, 146 | "properties": [ 147 | { 148 | "id": "thresholds", 149 | "value": { 150 | "mode": "absolute", 151 | "steps": [ 152 | { 153 | "color": "red", 154 | "value": null 155 | }, 156 | { 157 | "color": "#EAB839", 158 | "value": 0 159 | }, 160 | { 161 | "color": "#299c46", 162 | "value": 5 163 | } 164 | ] 165 | } 166 | }, 167 | { 168 | "id": "unit", 169 | "value": "percent" 170 | } 171 | ] 172 | }, 173 | { 174 | "matcher": { 175 | "id": "byName", 176 | "options": "ETH" 177 | }, 178 | "properties": [ 179 | { 180 | "id": "decimals", 181 | "value": 4 182 | }, 183 | { 184 | "id": "unit", 185 | "value": " Ξ" 186 | } 187 | ] 188 | }, 189 | { 190 | "matcher": { 191 | "id": "byName", 192 | "options": "btc" 193 | }, 194 | "properties": [ 195 | { 196 | "id": "decimals", 197 | "value": 6 198 | }, 199 | { 200 | "id": "unit", 201 | "value": "currencyBTC" 202 | } 203 | ] 204 | }, 205 | { 206 | "matcher": { 207 | "id": "byName", 208 | "options": "cad" 209 | }, 210 | "properties": [ 211 | { 212 | "id": "unit", 213 | "value": "C$" 214 | } 215 | ] 216 | }, 217 | { 218 | "matcher": { 219 | "id": "byName", 220 | "options": "chf" 221 | }, 222 | "properties": [ 223 | { 224 | "id": "unit", 225 | "value": "CHf" 226 | } 227 | ] 228 | }, 229 | { 230 | "matcher": { 231 | "id": "byName", 232 | "options": "eur" 233 | }, 234 | "properties": [ 235 | { 236 | "id": "unit", 237 | "value": "currencyEUR" 238 | } 239 | ] 240 | }, 241 | { 242 | "matcher": { 243 | "id": "byName", 244 | "options": "gbp" 245 | }, 246 | "properties": [ 247 | { 248 | "id": "unit", 249 | "value": "currencyGBP" 250 | } 251 | ] 252 | }, 253 | { 254 | "matcher": { 255 | "id": "byName", 256 | "options": "jpy" 257 | }, 258 | "properties": [ 259 | { 260 | "id": "unit", 261 | "value": "currencyJPY" 262 | } 263 | ] 264 | }, 265 | { 266 | "matcher": { 267 | "id": "byName", 268 | "options": "usd" 269 | }, 270 | "properties": [ 271 | { 272 | "id": "unit", 273 | "value": "currencyUSD" 274 | } 275 | ] 276 | } 277 | ] 278 | }, 279 | "gridPos": { 280 | "h": 3, 281 | "w": 4, 282 | "x": 0, 283 | "y": 28 284 | }, 285 | "id": 80, 286 | "options": { 287 | "colorMode": "background", 288 | "graphMode": "none", 289 | "justifyMode": "auto", 290 | "orientation": "horizontal", 291 | "reduceOptions": { 292 | "calcs": [ 293 | "mean" 294 | ], 295 | "values": false 296 | } 297 | }, 298 | "pluginVersion": "7.0.1", 299 | "targets": [ 300 | { 301 | "expr": "(sum(validator_balance) - sum(validator_balance offset 1h) - count(validator_balance > 16)*32 + count(validator_balance offset 1h > 0)*32)*absent(crypto_currency{pair=~\"eth$fiat\"})", 302 | "instant": true, 303 | "interval": "", 304 | "legendFormat": "ETH", 305 | "refId": "A" 306 | }, 307 | { 308 | "expr": "(sum(validator_balance) - sum(validator_balance offset 1h) - count(validator_balance > 16)*32 + count(validator_balance offset 1h > 0)*32)*sum(crypto_currency{pair=\"eth$fiat\"})", 309 | "instant": true, 310 | "interval": "", 311 | "legendFormat": "$fiat", 312 | "refId": "C" 313 | }, 314 | { 315 | "expr": "(sum(validator_balance) - sum(validator_balance offset 1h) - count(validator_balance > 16)*32 + count(validator_balance offset 1h > 0)*32)/(avg_over_time(count(validator_balance > 16)[1h:30s])*32/24/365)*100", 316 | "instant": true, 317 | "interval": "", 318 | "legendFormat": "Annualized %", 319 | "refId": "B" 320 | } 321 | ], 322 | "timeFrom": null, 323 | "timeShift": null, 324 | "title": "Hourly earning", 325 | "type": "stat" 326 | }, 327 | { 328 | "datasource": "Prometheus", 329 | "description": "This panel shows the earning during the last day, and the annualized % of the daily earning.\n\nThose data won't be shown until the first validator is at least one day old, or that you started prometheus at least one day ago.\n\nAlso, the annualized % might be wrong if you have downtime while new validators are getting validated", 330 | "fieldConfig": { 331 | "defaults": { 332 | "custom": {}, 333 | "decimals": 2, 334 | "mappings": [], 335 | "thresholds": { 336 | "mode": "absolute", 337 | "steps": [ 338 | { 339 | "color": "red", 340 | "value": null 341 | }, 342 | { 343 | "color": "#EAB839", 344 | "value": 0 345 | }, 346 | { 347 | "color": "#299c46", 348 | "value": 0.000001 349 | } 350 | ] 351 | } 352 | }, 353 | "overrides": [ 354 | { 355 | "matcher": { 356 | "id": "byName", 357 | "options": "Annualized %" 358 | }, 359 | "properties": [ 360 | { 361 | "id": "thresholds", 362 | "value": { 363 | "mode": "absolute", 364 | "steps": [ 365 | { 366 | "color": "red", 367 | "value": null 368 | }, 369 | { 370 | "color": "#EAB839", 371 | "value": 0 372 | }, 373 | { 374 | "color": "#299c46", 375 | "value": 5 376 | } 377 | ] 378 | } 379 | }, 380 | { 381 | "id": "unit", 382 | "value": "percent" 383 | } 384 | ] 385 | }, 386 | { 387 | "matcher": { 388 | "id": "byName", 389 | "options": "ETH" 390 | }, 391 | "properties": [ 392 | { 393 | "id": "decimals", 394 | "value": 4 395 | }, 396 | { 397 | "id": "unit", 398 | "value": "Ξ" 399 | } 400 | ] 401 | }, 402 | { 403 | "matcher": { 404 | "id": "byName", 405 | "options": "btc" 406 | }, 407 | "properties": [ 408 | { 409 | "id": "decimals", 410 | "value": 6 411 | }, 412 | { 413 | "id": "unit", 414 | "value": "currencyBTC" 415 | } 416 | ] 417 | }, 418 | { 419 | "matcher": { 420 | "id": "byName", 421 | "options": "cad" 422 | }, 423 | "properties": [ 424 | { 425 | "id": "unit", 426 | "value": "C$" 427 | } 428 | ] 429 | }, 430 | { 431 | "matcher": { 432 | "id": "byName", 433 | "options": "chf" 434 | }, 435 | "properties": [ 436 | { 437 | "id": "unit", 438 | "value": "CHf" 439 | } 440 | ] 441 | }, 442 | { 443 | "matcher": { 444 | "id": "byName", 445 | "options": "eur" 446 | }, 447 | "properties": [ 448 | { 449 | "id": "unit", 450 | "value": "currencyEUR" 451 | } 452 | ] 453 | }, 454 | { 455 | "matcher": { 456 | "id": "byName", 457 | "options": "gbp" 458 | }, 459 | "properties": [ 460 | { 461 | "id": "unit", 462 | "value": "currencyGBP" 463 | } 464 | ] 465 | }, 466 | { 467 | "matcher": { 468 | "id": "byName", 469 | "options": "jpy" 470 | }, 471 | "properties": [ 472 | { 473 | "id": "unit", 474 | "value": "currencyJPY" 475 | } 476 | ] 477 | }, 478 | { 479 | "matcher": { 480 | "id": "byName", 481 | "options": "usd" 482 | }, 483 | "properties": [ 484 | { 485 | "id": "unit", 486 | "value": "currencyUSD" 487 | } 488 | ] 489 | } 490 | ] 491 | }, 492 | "gridPos": { 493 | "h": 3, 494 | "w": 4, 495 | "x": 4, 496 | "y": 28 497 | }, 498 | "id": 79, 499 | "options": { 500 | "colorMode": "background", 501 | "graphMode": "none", 502 | "justifyMode": "auto", 503 | "orientation": "horizontal", 504 | "reduceOptions": { 505 | "calcs": [ 506 | "mean" 507 | ], 508 | "values": false 509 | } 510 | }, 511 | "pluginVersion": "7.0.1", 512 | "targets": [ 513 | { 514 | "expr": "(sum(validator_balance) - sum(validator_balance offset 1d) - count(validator_balance > 16)*32 + count(validator_balance offset 1d > 0)*32)*absent(crypto_currency{pair=~\"eth$fiat\"})", 515 | "instant": true, 516 | "interval": "", 517 | "legendFormat": "ETH", 518 | "refId": "A" 519 | }, 520 | { 521 | "expr": "(sum(validator_balance) - sum(validator_balance offset 1d) - count(validator_balance > 16)*32 + count(validator_balance offset 1d > 0)*32)*sum(crypto_currency{pair=\"eth$fiat\"})", 522 | "instant": true, 523 | "interval": "", 524 | "legendFormat": "$fiat", 525 | "refId": "C" 526 | }, 527 | { 528 | "expr": "(sum(validator_balance) - sum(validator_balance offset 1d) - count(validator_balance > 16)*32 + count(validator_balance offset 1d > 0)*32)/(avg_over_time(count(validator_balance > 16)[1d:12m])*32/365)*100", 529 | "instant": true, 530 | "interval": "", 531 | "legendFormat": "Annualized %", 532 | "refId": "B" 533 | } 534 | ], 535 | "timeFrom": null, 536 | "timeShift": null, 537 | "title": "Daily earning", 538 | "type": "stat" 539 | }, 540 | { 541 | "datasource": "Prometheus", 542 | "description": "This panel shows the earning during the last week, and the annualized % of the weekly earning.\n\nThose data won't be shown until the first validator is at least one week old, or that you started prometheus at least one week ago.\n\nAlso, the annualized % might be wrong if you have downtime while new validators are getting validated", 543 | "fieldConfig": { 544 | "defaults": { 545 | "custom": {}, 546 | "decimals": 2, 547 | "mappings": [], 548 | "thresholds": { 549 | "mode": "absolute", 550 | "steps": [ 551 | { 552 | "color": "red", 553 | "value": null 554 | }, 555 | { 556 | "color": "#EAB839", 557 | "value": 0 558 | }, 559 | { 560 | "color": "#299c46", 561 | "value": 0.000001 562 | } 563 | ] 564 | } 565 | }, 566 | "overrides": [ 567 | { 568 | "matcher": { 569 | "id": "byName", 570 | "options": "Annualized %" 571 | }, 572 | "properties": [ 573 | { 574 | "id": "thresholds", 575 | "value": { 576 | "mode": "absolute", 577 | "steps": [ 578 | { 579 | "color": "red", 580 | "value": null 581 | }, 582 | { 583 | "color": "#EAB839", 584 | "value": 0 585 | }, 586 | { 587 | "color": "#299c46", 588 | "value": 5 589 | } 590 | ] 591 | } 592 | }, 593 | { 594 | "id": "unit", 595 | "value": "percent" 596 | } 597 | ] 598 | }, 599 | { 600 | "matcher": { 601 | "id": "byName", 602 | "options": "ETH" 603 | }, 604 | "properties": [ 605 | { 606 | "id": "decimals", 607 | "value": 4 608 | }, 609 | { 610 | "id": "unit", 611 | "value": "Ξ" 612 | } 613 | ] 614 | }, 615 | { 616 | "matcher": { 617 | "id": "byName", 618 | "options": "btc" 619 | }, 620 | "properties": [ 621 | { 622 | "id": "decimals", 623 | "value": 6 624 | }, 625 | { 626 | "id": "unit", 627 | "value": "currencyBTC" 628 | } 629 | ] 630 | }, 631 | { 632 | "matcher": { 633 | "id": "byName", 634 | "options": "cad" 635 | }, 636 | "properties": [ 637 | { 638 | "id": "unit", 639 | "value": "C$" 640 | } 641 | ] 642 | }, 643 | { 644 | "matcher": { 645 | "id": "byName", 646 | "options": "chf" 647 | }, 648 | "properties": [ 649 | { 650 | "id": "unit", 651 | "value": "CHf" 652 | } 653 | ] 654 | }, 655 | { 656 | "matcher": { 657 | "id": "byName", 658 | "options": "eur" 659 | }, 660 | "properties": [ 661 | { 662 | "id": "unit", 663 | "value": "currencyEUR" 664 | } 665 | ] 666 | }, 667 | { 668 | "matcher": { 669 | "id": "byName", 670 | "options": "gbp" 671 | }, 672 | "properties": [ 673 | { 674 | "id": "unit", 675 | "value": "currencyGBP" 676 | } 677 | ] 678 | }, 679 | { 680 | "matcher": { 681 | "id": "byName", 682 | "options": "jpy" 683 | }, 684 | "properties": [ 685 | { 686 | "id": "unit", 687 | "value": "currencyJPY" 688 | } 689 | ] 690 | }, 691 | { 692 | "matcher": { 693 | "id": "byName", 694 | "options": "usd" 695 | }, 696 | "properties": [ 697 | { 698 | "id": "unit", 699 | "value": "currencyUSD" 700 | } 701 | ] 702 | } 703 | ] 704 | }, 705 | "gridPos": { 706 | "h": 3, 707 | "w": 4, 708 | "x": 8, 709 | "y": 28 710 | }, 711 | "id": 78, 712 | "options": { 713 | "colorMode": "background", 714 | "graphMode": "none", 715 | "justifyMode": "auto", 716 | "orientation": "horizontal", 717 | "reduceOptions": { 718 | "calcs": [ 719 | "mean" 720 | ], 721 | "values": false 722 | } 723 | }, 724 | "pluginVersion": "7.0.1", 725 | "targets": [ 726 | { 727 | "expr": "(sum(validator_balance) - sum(validator_balance offset 1w) - count(validator_balance > 16)*32 + count(validator_balance offset 1w > 0)*32)*absent(crypto_currency{pair=~\"eth$fiat\"})", 728 | "instant": true, 729 | "interval": "", 730 | "legendFormat": "ETH", 731 | "refId": "A" 732 | }, 733 | { 734 | "expr": "(sum(validator_balance) - sum(validator_balance offset 1w) - count(validator_balance > 16)*32 + count(validator_balance offset 1w > 0)*32)*sum(crypto_currency{pair=\"eth$fiat\"})", 735 | "instant": true, 736 | "interval": "", 737 | "legendFormat": "$fiat", 738 | "refId": "C" 739 | }, 740 | { 741 | "expr": "(sum(validator_balance) - sum(validator_balance offset 1w) - count(validator_balance > 16)*32 + count(validator_balance offset 1w > 0)*32)/(avg_over_time(count(validator_balance > 16)[1w:84m])*32*7/365)*100", 742 | "instant": true, 743 | "interval": "", 744 | "legendFormat": "Annualized %", 745 | "refId": "B" 746 | } 747 | ], 748 | "timeFrom": null, 749 | "timeShift": null, 750 | "title": "Weekly earning", 751 | "type": "stat" 752 | }, 753 | { 754 | "datasource": "Prometheus", 755 | "description": "This panel shows the earning during the last month, and the annualized % of the monthly earning.\n\nThose data won't be shown until the first validator is at least one month old, or that you started prometheus at least one month ago. Ensure to run Prometheus with the flag `--storage.tsdb.retention.time=31d` if you want this panel to get enough data\n\nAlso, the annualized % might be wrong if you have downtime while new validators are getting validated", 756 | "fieldConfig": { 757 | "defaults": { 758 | "custom": {}, 759 | "decimals": 2, 760 | "mappings": [], 761 | "thresholds": { 762 | "mode": "absolute", 763 | "steps": [ 764 | { 765 | "color": "red", 766 | "value": null 767 | }, 768 | { 769 | "color": "#EAB839", 770 | "value": 0 771 | }, 772 | { 773 | "color": "#299c46", 774 | "value": 0.000001 775 | } 776 | ] 777 | } 778 | }, 779 | "overrides": [ 780 | { 781 | "matcher": { 782 | "id": "byName", 783 | "options": "Annualized %" 784 | }, 785 | "properties": [ 786 | { 787 | "id": "thresholds", 788 | "value": { 789 | "mode": "absolute", 790 | "steps": [ 791 | { 792 | "color": "red", 793 | "value": null 794 | }, 795 | { 796 | "color": "#EAB839", 797 | "value": 0 798 | }, 799 | { 800 | "color": "#299c46", 801 | "value": 5 802 | } 803 | ] 804 | } 805 | }, 806 | { 807 | "id": "unit", 808 | "value": "percent" 809 | } 810 | ] 811 | }, 812 | { 813 | "matcher": { 814 | "id": "byName", 815 | "options": "ETH" 816 | }, 817 | "properties": [ 818 | { 819 | "id": "decimals", 820 | "value": 4 821 | }, 822 | { 823 | "id": "unit", 824 | "value": "Ξ" 825 | } 826 | ] 827 | }, 828 | { 829 | "matcher": { 830 | "id": "byName", 831 | "options": "btc" 832 | }, 833 | "properties": [ 834 | { 835 | "id": "decimals", 836 | "value": 6 837 | }, 838 | { 839 | "id": "unit", 840 | "value": "currencyBTC" 841 | } 842 | ] 843 | }, 844 | { 845 | "matcher": { 846 | "id": "byName", 847 | "options": "cad" 848 | }, 849 | "properties": [ 850 | { 851 | "id": "unit", 852 | "value": "C$" 853 | } 854 | ] 855 | }, 856 | { 857 | "matcher": { 858 | "id": "byName", 859 | "options": "chf" 860 | }, 861 | "properties": [ 862 | { 863 | "id": "unit", 864 | "value": "CHf" 865 | } 866 | ] 867 | }, 868 | { 869 | "matcher": { 870 | "id": "byName", 871 | "options": "eur" 872 | }, 873 | "properties": [ 874 | { 875 | "id": "unit", 876 | "value": "currencyEUR" 877 | } 878 | ] 879 | }, 880 | { 881 | "matcher": { 882 | "id": "byName", 883 | "options": "gbp" 884 | }, 885 | "properties": [ 886 | { 887 | "id": "unit", 888 | "value": "currencyGBP" 889 | } 890 | ] 891 | }, 892 | { 893 | "matcher": { 894 | "id": "byName", 895 | "options": "jpy" 896 | }, 897 | "properties": [ 898 | { 899 | "id": "unit", 900 | "value": "currencyJPY" 901 | } 902 | ] 903 | }, 904 | { 905 | "matcher": { 906 | "id": "byName", 907 | "options": "usd" 908 | }, 909 | "properties": [ 910 | { 911 | "id": "unit", 912 | "value": "currencyUSD" 913 | } 914 | ] 915 | } 916 | ] 917 | }, 918 | "gridPos": { 919 | "h": 3, 920 | "w": 4, 921 | "x": 12, 922 | "y": 28 923 | }, 924 | "id": 77, 925 | "options": { 926 | "colorMode": "background", 927 | "graphMode": "none", 928 | "justifyMode": "auto", 929 | "orientation": "horizontal", 930 | "reduceOptions": { 931 | "calcs": [ 932 | "mean" 933 | ], 934 | "values": false 935 | } 936 | }, 937 | "pluginVersion": "7.0.1", 938 | "targets": [ 939 | { 940 | "expr": "(sum(validator_balance) - sum(validator_balance offset 30d) - count(validator_balance > 16)*32 + count(validator_balance offset 30d > 0)*32)*absent(crypto_currency{pair=~\"eth$fiat\"})", 941 | "instant": true, 942 | "interval": "", 943 | "legendFormat": "ETH", 944 | "refId": "A" 945 | }, 946 | { 947 | "expr": "(sum(validator_balance) - sum(validator_balance offset 30d) - count(validator_balance > 16)*32 + count(validator_balance offset 30d > 0)*32)*sum(crypto_currency{pair=\"eth$fiat\"})", 948 | "instant": true, 949 | "interval": "", 950 | "legendFormat": "$fiat", 951 | "refId": "C" 952 | }, 953 | { 954 | "expr": "(sum(validator_balance) - sum(validator_balance offset 30d) - count(validator_balance > 16)*32 + count(validator_balance offset 30d > 0)*32)/(avg_over_time(count(validator_balance > 16)[30d:6h])*32/12)*100", 955 | "instant": true, 956 | "interval": "", 957 | "legendFormat": "Annualized %", 958 | "refId": "B" 959 | } 960 | ], 961 | "timeFrom": null, 962 | "timeShift": null, 963 | "title": "Monthly earning", 964 | "type": "stat" 965 | }, 966 | { 967 | "datasource": "Prometheus", 968 | "fieldConfig": { 969 | "defaults": { 970 | "custom": {}, 971 | "decimals": 2, 972 | "mappings": [], 973 | "thresholds": { 974 | "mode": "absolute", 975 | "steps": [ 976 | { 977 | "color": "red", 978 | "value": null 979 | }, 980 | { 981 | "color": "#fade2a", 982 | "value": 0 983 | }, 984 | { 985 | "color": "#299c46", 986 | "value": 0.000001 987 | } 988 | ] 989 | } 990 | }, 991 | "overrides": [ 992 | { 993 | "matcher": { 994 | "id": "byName", 995 | "options": "btc" 996 | }, 997 | "properties": [ 998 | { 999 | "id": "decimals", 1000 | "value": 6 1001 | }, 1002 | { 1003 | "id": "unit", 1004 | "value": "currencyBTC" 1005 | } 1006 | ] 1007 | }, 1008 | { 1009 | "matcher": { 1010 | "id": "byName", 1011 | "options": "ETH" 1012 | }, 1013 | "properties": [ 1014 | { 1015 | "id": "decimals", 1016 | "value": 4 1017 | } 1018 | ] 1019 | }, 1020 | { 1021 | "matcher": { 1022 | "id": "byName", 1023 | "options": "ROI" 1024 | }, 1025 | "properties": [ 1026 | { 1027 | "id": "decimals", 1028 | "value": 4 1029 | }, 1030 | { 1031 | "id": "unit", 1032 | "value": "percent" 1033 | } 1034 | ] 1035 | }, 1036 | { 1037 | "matcher": { 1038 | "id": "byName", 1039 | "options": "cad" 1040 | }, 1041 | "properties": [ 1042 | { 1043 | "id": "unit", 1044 | "value": "C$" 1045 | } 1046 | ] 1047 | }, 1048 | { 1049 | "matcher": { 1050 | "id": "byName", 1051 | "options": "ETH" 1052 | }, 1053 | "properties": [ 1054 | { 1055 | "id": "unit", 1056 | "value": "Ξ" 1057 | } 1058 | ] 1059 | }, 1060 | { 1061 | "matcher": { 1062 | "id": "byName", 1063 | "options": "chf" 1064 | }, 1065 | "properties": [ 1066 | { 1067 | "id": "unit", 1068 | "value": "CHf" 1069 | } 1070 | ] 1071 | }, 1072 | { 1073 | "matcher": { 1074 | "id": "byName", 1075 | "options": "eur" 1076 | }, 1077 | "properties": [ 1078 | { 1079 | "id": "unit", 1080 | "value": "currencyEUR" 1081 | } 1082 | ] 1083 | }, 1084 | { 1085 | "matcher": { 1086 | "id": "byName", 1087 | "options": "gbp" 1088 | }, 1089 | "properties": [ 1090 | { 1091 | "id": "unit", 1092 | "value": "currencyGBP" 1093 | } 1094 | ] 1095 | }, 1096 | { 1097 | "matcher": { 1098 | "id": "byName", 1099 | "options": "jpy" 1100 | }, 1101 | "properties": [ 1102 | { 1103 | "id": "unit", 1104 | "value": "currencyJPY" 1105 | } 1106 | ] 1107 | }, 1108 | { 1109 | "matcher": { 1110 | "id": "byName", 1111 | "options": "usd" 1112 | }, 1113 | "properties": [ 1114 | { 1115 | "id": "unit", 1116 | "value": "currencyUSD" 1117 | } 1118 | ] 1119 | } 1120 | ] 1121 | }, 1122 | "gridPos": { 1123 | "h": 3, 1124 | "w": 5, 1125 | "x": 16, 1126 | "y": 28 1127 | }, 1128 | "id": 69, 1129 | "options": { 1130 | "colorMode": "background", 1131 | "graphMode": "none", 1132 | "justifyMode": "auto", 1133 | "orientation": "horizontal", 1134 | "reduceOptions": { 1135 | "calcs": [ 1136 | "mean" 1137 | ], 1138 | "values": false 1139 | } 1140 | }, 1141 | "pluginVersion": "7.0.1", 1142 | "targets": [ 1143 | { 1144 | "expr": "sum(validator_balance) - count(validator_balance > 16 and validator_statuses == 3)*32*absent(crypto_currency{pair=~\"eth$fiat\"})", 1145 | "instant": true, 1146 | "interval": "", 1147 | "legendFormat": "ETH", 1148 | "refId": "A" 1149 | }, 1150 | { 1151 | "expr": "(sum(validator_balance) - count(validator_balance > 16 and validator_statuses == 3)*32)*sum(crypto_currency{pair=\"eth$fiat\"})", 1152 | "instant": true, 1153 | "interval": "", 1154 | "legendFormat": "$fiat", 1155 | "refId": "C" 1156 | }, 1157 | { 1158 | "expr": "(sum(validator_balance) - count(validator_balance > 16 and validator_statuses == 3)*32)*100/(count(validator_balance > 16 and validator_statuses == 3)*32)", 1159 | "instant": true, 1160 | "interval": "", 1161 | "legendFormat": "ROI", 1162 | "refId": "B" 1163 | } 1164 | ], 1165 | "timeFrom": null, 1166 | "timeShift": null, 1167 | "title": "Total earning", 1168 | "type": "stat" 1169 | }, 1170 | { 1171 | "cacheTimeout": null, 1172 | "datasource": "Prometheus", 1173 | "fieldConfig": { 1174 | "defaults": { 1175 | "custom": {}, 1176 | "decimals": 1, 1177 | "mappings": [], 1178 | "nullValueMode": "connected", 1179 | "thresholds": { 1180 | "mode": "absolute", 1181 | "steps": [ 1182 | { 1183 | "color": "red", 1184 | "value": null 1185 | }, 1186 | { 1187 | "color": "#FADE2A", 1188 | "value": 0.17 1189 | }, 1190 | { 1191 | "color": "#299c46", 1192 | "value": 11.9 1193 | } 1194 | ] 1195 | }, 1196 | "unit": "h" 1197 | }, 1198 | "overrides": [] 1199 | }, 1200 | "gridPos": { 1201 | "h": 3, 1202 | "w": 3, 1203 | "x": 21, 1204 | "y": 28 1205 | }, 1206 | "id": 54, 1207 | "links": [], 1208 | "options": { 1209 | "colorMode": "background", 1210 | "graphMode": "none", 1211 | "justifyMode": "auto", 1212 | "orientation": "horizontal", 1213 | "reduceOptions": { 1214 | "calcs": [ 1215 | "lastNotNull" 1216 | ], 1217 | "values": false 1218 | } 1219 | }, 1220 | "pluginVersion": "7.0.1", 1221 | "targets": [ 1222 | { 1223 | "expr": "(time()-process_start_time_seconds{job=\"$validator_job\"})/3600", 1224 | "instant": true, 1225 | "interval": "", 1226 | "legendFormat": "", 1227 | "refId": "A" 1228 | } 1229 | ], 1230 | "timeFrom": null, 1231 | "timeShift": null, 1232 | "title": "Validator process started", 1233 | "type": "stat" 1234 | }, 1235 | { 1236 | "aliasColors": { 1237 | "Total balance": "purple" 1238 | }, 1239 | "bars": false, 1240 | "dashLength": 10, 1241 | "dashes": false, 1242 | "datasource": "Prometheus", 1243 | "fieldConfig": { 1244 | "defaults": { 1245 | "custom": {} 1246 | }, 1247 | "overrides": [] 1248 | }, 1249 | "fill": 1, 1250 | "fillGradient": 0, 1251 | "gridPos": { 1252 | "h": 10, 1253 | "w": 10, 1254 | "x": 0, 1255 | "y": 31 1256 | }, 1257 | "hiddenSeries": false, 1258 | "id": 4, 1259 | "legend": { 1260 | "avg": false, 1261 | "current": false, 1262 | "max": false, 1263 | "min": false, 1264 | "show": true, 1265 | "total": false, 1266 | "values": false 1267 | }, 1268 | "lines": true, 1269 | "linewidth": 1, 1270 | "nullPointMode": "null", 1271 | "options": { 1272 | "dataLinks": [] 1273 | }, 1274 | "percentage": false, 1275 | "pointradius": 2, 1276 | "points": false, 1277 | "renderer": "flot", 1278 | "seriesOverrides": [], 1279 | "spaceLength": 10, 1280 | "stack": false, 1281 | "steppedLine": false, 1282 | "targets": [ 1283 | { 1284 | "expr": "sum(validator_balance > 16)", 1285 | "interval": "", 1286 | "legendFormat": "Total balance", 1287 | "refId": "A" 1288 | } 1289 | ], 1290 | "thresholds": [], 1291 | "timeFrom": null, 1292 | "timeRegions": [], 1293 | "timeShift": null, 1294 | "title": "Total balance", 1295 | "tooltip": { 1296 | "shared": true, 1297 | "sort": 0, 1298 | "value_type": "individual" 1299 | }, 1300 | "type": "graph", 1301 | "xaxis": { 1302 | "buckets": null, 1303 | "mode": "time", 1304 | "name": null, 1305 | "show": true, 1306 | "values": [] 1307 | }, 1308 | "yaxes": [ 1309 | { 1310 | "decimals": 4, 1311 | "format": "short", 1312 | "label": "ETH", 1313 | "logBase": 1, 1314 | "max": null, 1315 | "min": null, 1316 | "show": true 1317 | }, 1318 | { 1319 | "format": "short", 1320 | "label": null, 1321 | "logBase": 1, 1322 | "max": null, 1323 | "min": null, 1324 | "show": true 1325 | } 1326 | ], 1327 | "yaxis": { 1328 | "align": false, 1329 | "alignLevel": null 1330 | } 1331 | }, 1332 | { 1333 | "columns": [], 1334 | "datasource": "Prometheus", 1335 | "description": "", 1336 | "fieldConfig": { 1337 | "defaults": { 1338 | "custom": {} 1339 | }, 1340 | "overrides": [] 1341 | }, 1342 | "fontSize": "100%", 1343 | "gridPos": { 1344 | "h": 20, 1345 | "w": 6, 1346 | "x": 10, 1347 | "y": 31 1348 | }, 1349 | "id": 22, 1350 | "pageSize": 100, 1351 | "showHeader": true, 1352 | "sort": { 1353 | "col": null, 1354 | "desc": false 1355 | }, 1356 | "styles": [ 1357 | { 1358 | "alias": "", 1359 | "align": "auto", 1360 | "colorMode": null, 1361 | "colors": [ 1362 | "rgba(245, 54, 54, 0.9)", 1363 | "rgba(237, 129, 40, 0.89)", 1364 | "rgba(50, 172, 45, 0.97)" 1365 | ], 1366 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1367 | "decimals": 2, 1368 | "mappingType": 1, 1369 | "pattern": "Time", 1370 | "thresholds": [], 1371 | "type": "hidden", 1372 | "unit": "short" 1373 | }, 1374 | { 1375 | "alias": "", 1376 | "align": "auto", 1377 | "colorMode": null, 1378 | "colors": [ 1379 | "rgba(245, 54, 54, 0.9)", 1380 | "rgba(237, 129, 40, 0.89)", 1381 | "rgba(50, 172, 45, 0.97)" 1382 | ], 1383 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1384 | "decimals": 2, 1385 | "mappingType": 1, 1386 | "pattern": "pubkey", 1387 | "thresholds": [], 1388 | "type": "string", 1389 | "unit": "short" 1390 | }, 1391 | { 1392 | "alias": "balance", 1393 | "align": "auto", 1394 | "colorMode": "value", 1395 | "colors": [ 1396 | "rgba(245, 54, 54, 0.9)", 1397 | "rgba(237, 129, 40, 0.89)", 1398 | "rgba(50, 172, 45, 0.97)" 1399 | ], 1400 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1401 | "decimals": 9, 1402 | "mappingType": 1, 1403 | "pattern": "Value #A", 1404 | "thresholds": [ 1405 | "32", 1406 | "32.000000001" 1407 | ], 1408 | "type": "number", 1409 | "unit": "short" 1410 | }, 1411 | { 1412 | "alias": "status", 1413 | "align": "auto", 1414 | "colorMode": "value", 1415 | "colors": [ 1416 | "#F2CC0C", 1417 | "#37872D", 1418 | "#E02F44" 1419 | ], 1420 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1421 | "decimals": 2, 1422 | "mappingType": 1, 1423 | "pattern": "Value #B", 1424 | "thresholds": [ 1425 | "3", 1426 | "4" 1427 | ], 1428 | "type": "string", 1429 | "unit": "short", 1430 | "valueMaps": [ 1431 | { 1432 | "text": "UNKNOWN", 1433 | "value": "0" 1434 | }, 1435 | { 1436 | "text": "DEPOSITED", 1437 | "value": "1" 1438 | }, 1439 | { 1440 | "text": "PENDING", 1441 | "value": "2" 1442 | }, 1443 | { 1444 | "text": "ACTIVE", 1445 | "value": "3" 1446 | }, 1447 | { 1448 | "text": "EXITING", 1449 | "value": "4" 1450 | }, 1451 | { 1452 | "text": "SLASHING", 1453 | "value": "5" 1454 | }, 1455 | { 1456 | "text": "EXITED", 1457 | "value": "6" 1458 | } 1459 | ] 1460 | } 1461 | ], 1462 | "targets": [ 1463 | { 1464 | "expr": "label_replace(max by(pubkey) (validator_balance), \"pubkey\", \"$1\", \"pubkey\", \"(.{10}).*\")", 1465 | "format": "table", 1466 | "instant": true, 1467 | "interval": "", 1468 | "legendFormat": "", 1469 | "refId": "A" 1470 | }, 1471 | { 1472 | "expr": "label_replace(max by(pubkey) (validator_statuses), \"pubkey\", \"$1\", \"pubkey\", \"(.{10}).*\")", 1473 | "format": "table", 1474 | "instant": true, 1475 | "interval": "", 1476 | "legendFormat": "", 1477 | "refId": "B" 1478 | } 1479 | ], 1480 | "timeFrom": null, 1481 | "timeShift": null, 1482 | "title": "Validator main info", 1483 | "transform": "table", 1484 | "transparent": true, 1485 | "type": "table-old" 1486 | }, 1487 | { 1488 | "columns": [], 1489 | "datasource": "Prometheus", 1490 | "description": "This panel will count only the votes done since your validator process started", 1491 | "fieldConfig": { 1492 | "defaults": { 1493 | "custom": {} 1494 | }, 1495 | "overrides": [] 1496 | }, 1497 | "fontSize": "100%", 1498 | "gridPos": { 1499 | "h": 20, 1500 | "w": 8, 1501 | "x": 16, 1502 | "y": 31 1503 | }, 1504 | "id": 20, 1505 | "pageSize": null, 1506 | "pluginVersion": "6.7.2", 1507 | "showHeader": true, 1508 | "sort": { 1509 | "col": null, 1510 | "desc": false 1511 | }, 1512 | "styles": [ 1513 | { 1514 | "alias": "", 1515 | "align": "auto", 1516 | "colorMode": null, 1517 | "colors": [ 1518 | "rgba(245, 54, 54, 0.9)", 1519 | "rgba(237, 129, 40, 0.89)", 1520 | "rgba(50, 172, 45, 0.97)" 1521 | ], 1522 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1523 | "decimals": 2, 1524 | "mappingType": 1, 1525 | "pattern": "Time", 1526 | "thresholds": [], 1527 | "type": "hidden", 1528 | "unit": "short" 1529 | }, 1530 | { 1531 | "alias": "", 1532 | "align": "auto", 1533 | "colorMode": null, 1534 | "colors": [ 1535 | "rgba(245, 54, 54, 0.9)", 1536 | "rgba(237, 129, 40, 0.89)", 1537 | "rgba(50, 172, 45, 0.97)" 1538 | ], 1539 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1540 | "decimals": 2, 1541 | "mappingType": 1, 1542 | "pattern": "pubkey", 1543 | "thresholds": [], 1544 | "type": "string", 1545 | "unit": "short" 1546 | }, 1547 | { 1548 | "alias": "att", 1549 | "align": "auto", 1550 | "colorMode": "value", 1551 | "colors": [ 1552 | "rgba(245, 54, 54, 0.9)", 1553 | "rgba(237, 129, 40, 0.89)", 1554 | "rgba(50, 172, 45, 0.97)" 1555 | ], 1556 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1557 | "decimals": 0, 1558 | "mappingType": 1, 1559 | "pattern": "Value #A", 1560 | "thresholds": [ 1561 | "0", 1562 | "0" 1563 | ], 1564 | "type": "number", 1565 | "unit": "short" 1566 | }, 1567 | { 1568 | "alias": "att fail", 1569 | "align": "auto", 1570 | "colorMode": "value", 1571 | "colors": [ 1572 | "rgba(50, 172, 45, 0.97)", 1573 | "rgba(237, 129, 40, 0.89)", 1574 | "rgba(245, 54, 54, 0.9)" 1575 | ], 1576 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1577 | "decimals": 0, 1578 | "mappingType": 1, 1579 | "pattern": "Value #B", 1580 | "thresholds": [ 1581 | "0", 1582 | "0" 1583 | ], 1584 | "type": "number", 1585 | "unit": "short" 1586 | }, 1587 | { 1588 | "alias": "agg", 1589 | "align": "auto", 1590 | "colorMode": "value", 1591 | "colors": [ 1592 | "rgba(245, 54, 54, 0.9)", 1593 | "rgba(237, 129, 40, 0.89)", 1594 | "rgba(50, 172, 45, 0.97)" 1595 | ], 1596 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1597 | "decimals": 0, 1598 | "mappingType": 1, 1599 | "pattern": "Value #C", 1600 | "thresholds": [ 1601 | "0", 1602 | "0" 1603 | ], 1604 | "type": "number", 1605 | "unit": "short" 1606 | }, 1607 | { 1608 | "alias": "agg fail", 1609 | "align": "auto", 1610 | "colorMode": "value", 1611 | "colors": [ 1612 | "rgba(50, 172, 45, 0.97)", 1613 | "rgba(237, 129, 40, 0.89)", 1614 | "rgba(245, 54, 54, 0.9)" 1615 | ], 1616 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1617 | "decimals": 0, 1618 | "mappingType": 1, 1619 | "pattern": "Value #D", 1620 | "thresholds": [ 1621 | "0", 1622 | "0" 1623 | ], 1624 | "type": "number", 1625 | "unit": "short" 1626 | }, 1627 | { 1628 | "alias": "prop", 1629 | "align": "auto", 1630 | "colorMode": "value", 1631 | "colors": [ 1632 | "rgba(245, 54, 54, 0.9)", 1633 | "rgba(237, 129, 40, 0.89)", 1634 | "rgba(50, 172, 45, 0.97)" 1635 | ], 1636 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1637 | "decimals": 0, 1638 | "mappingType": 1, 1639 | "pattern": "Value #E", 1640 | "thresholds": [ 1641 | "0", 1642 | "0" 1643 | ], 1644 | "type": "number", 1645 | "unit": "short" 1646 | }, 1647 | { 1648 | "alias": "prop fail", 1649 | "align": "auto", 1650 | "colorMode": "value", 1651 | "colors": [ 1652 | "rgba(50, 172, 45, 0.97)", 1653 | "rgba(237, 129, 40, 0.89)", 1654 | "rgba(245, 54, 54, 0.9)" 1655 | ], 1656 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1657 | "decimals": 0, 1658 | "mappingType": 1, 1659 | "pattern": "Value #F", 1660 | "thresholds": [ 1661 | "0", 1662 | "0" 1663 | ], 1664 | "type": "number", 1665 | "unit": "short" 1666 | } 1667 | ], 1668 | "targets": [ 1669 | { 1670 | "expr": "label_replace(max by(pubkey) (validator_successful_attestations) , \"pubkey\", \"$1\", \"pubkey\", \"(.{10}).*\")", 1671 | "format": "table", 1672 | "instant": true, 1673 | "interval": "", 1674 | "intervalFactor": 1, 1675 | "legendFormat": "", 1676 | "refId": "A" 1677 | }, 1678 | { 1679 | "expr": "label_replace(max by (pubkey)(validator_failed_attestations) , \"pubkey\", \"$1\", \"pubkey\", \"(.{10}).*\")", 1680 | "format": "table", 1681 | "instant": true, 1682 | "interval": "", 1683 | "legendFormat": "", 1684 | "refId": "B" 1685 | }, 1686 | { 1687 | "expr": "label_replace(max by (pubkey)(validator_successful_aggregations) , \"pubkey\", \"$1\", \"pubkey\", \"(.{10}).*\")", 1688 | "format": "table", 1689 | "instant": true, 1690 | "interval": "", 1691 | "legendFormat": "", 1692 | "refId": "C" 1693 | }, 1694 | { 1695 | "expr": "label_replace(max by (pubkey) (validator_failed_aggregations) , \"pubkey\", \"$1\", \"pubkey\", \"(.{10}).*\")", 1696 | "format": "table", 1697 | "instant": true, 1698 | "interval": "", 1699 | "legendFormat": "", 1700 | "refId": "D" 1701 | }, 1702 | { 1703 | "expr": "label_replace(max by (pubkey) (validator_successful_proposals) , \"pubkey\", \"$1\", \"pubkey\", \"(.{10}).*\")", 1704 | "format": "table", 1705 | "instant": true, 1706 | "interval": "", 1707 | "legendFormat": "", 1708 | "refId": "E" 1709 | }, 1710 | { 1711 | "expr": "label_replace(max by (pubkey) (validator_failed_proposals) , \"pubkey\", \"$1\", \"pubkey\", \"(.{10}).*\")", 1712 | "format": "table", 1713 | "instant": true, 1714 | "interval": "", 1715 | "legendFormat": "", 1716 | "refId": "F" 1717 | } 1718 | ], 1719 | "timeFrom": null, 1720 | "timeShift": null, 1721 | "title": "Validator vote summary", 1722 | "transform": "table", 1723 | "transparent": true, 1724 | "type": "table-old" 1725 | }, 1726 | { 1727 | "aliasColors": { 1728 | "0x8926562b": "blue", 1729 | "0xa92dcbcf": "orange", 1730 | "0xafafbadf": "rgb(189, 181, 0)", 1731 | "0xb96135dd": "purple" 1732 | }, 1733 | "bars": false, 1734 | "dashLength": 10, 1735 | "dashes": false, 1736 | "datasource": "Prometheus", 1737 | "fieldConfig": { 1738 | "defaults": { 1739 | "custom": {} 1740 | }, 1741 | "overrides": [] 1742 | }, 1743 | "fill": 1, 1744 | "fillGradient": 0, 1745 | "gridPos": { 1746 | "h": 10, 1747 | "w": 10, 1748 | "x": 0, 1749 | "y": 41 1750 | }, 1751 | "hiddenSeries": false, 1752 | "id": 2, 1753 | "legend": { 1754 | "avg": false, 1755 | "current": false, 1756 | "max": false, 1757 | "min": false, 1758 | "show": true, 1759 | "total": false, 1760 | "values": false 1761 | }, 1762 | "lines": true, 1763 | "linewidth": 1, 1764 | "nullPointMode": "null", 1765 | "options": { 1766 | "dataLinks": [] 1767 | }, 1768 | "percentage": false, 1769 | "pointradius": 2, 1770 | "points": false, 1771 | "renderer": "flot", 1772 | "seriesOverrides": [], 1773 | "spaceLength": 10, 1774 | "stack": false, 1775 | "steppedLine": false, 1776 | "targets": [ 1777 | { 1778 | "expr": "label_replace(validator_balance > 16, \"pubkey\", \"$1\", \"pubkey\", \"(.{10}).*\")", 1779 | "format": "time_series", 1780 | "instant": false, 1781 | "interval": "", 1782 | "intervalFactor": 1, 1783 | "legendFormat": "{{pubkey}}", 1784 | "refId": "A" 1785 | } 1786 | ], 1787 | "thresholds": [], 1788 | "timeFrom": null, 1789 | "timeRegions": [], 1790 | "timeShift": null, 1791 | "title": "Validator balance", 1792 | "tooltip": { 1793 | "shared": true, 1794 | "sort": 0, 1795 | "value_type": "individual" 1796 | }, 1797 | "type": "graph", 1798 | "xaxis": { 1799 | "buckets": null, 1800 | "mode": "time", 1801 | "name": null, 1802 | "show": true, 1803 | "values": [] 1804 | }, 1805 | "yaxes": [ 1806 | { 1807 | "decimals": 4, 1808 | "format": "short", 1809 | "label": "ETH", 1810 | "logBase": 1, 1811 | "max": null, 1812 | "min": null, 1813 | "show": true 1814 | }, 1815 | { 1816 | "decimals": null, 1817 | "format": "short", 1818 | "label": "", 1819 | "logBase": 1, 1820 | "max": null, 1821 | "min": null, 1822 | "show": true 1823 | } 1824 | ], 1825 | "yaxis": { 1826 | "align": false, 1827 | "alignLevel": null 1828 | } 1829 | }, 1830 | { 1831 | "cacheTimeout": null, 1832 | "colorBackground": true, 1833 | "colorValue": false, 1834 | "colors": [ 1835 | "#299c46", 1836 | "rgba(237, 129, 40, 0.89)", 1837 | "rgb(99, 99, 99)" 1838 | ], 1839 | "datasource": "Prometheus", 1840 | "fieldConfig": { 1841 | "defaults": { 1842 | "custom": {} 1843 | }, 1844 | "overrides": [] 1845 | }, 1846 | "format": "none", 1847 | "gauge": { 1848 | "maxValue": 100, 1849 | "minValue": 0, 1850 | "show": false, 1851 | "thresholdLabels": false, 1852 | "thresholdMarkers": true 1853 | }, 1854 | "gridPos": { 1855 | "h": 1, 1856 | "w": 8, 1857 | "x": 0, 1858 | "y": 51 1859 | }, 1860 | "id": 59, 1861 | "interval": null, 1862 | "links": [], 1863 | "mappingType": 1, 1864 | "mappingTypes": [ 1865 | { 1866 | "name": "value to text", 1867 | "value": 1 1868 | }, 1869 | { 1870 | "name": "range to text", 1871 | "value": 2 1872 | } 1873 | ], 1874 | "maxDataPoints": 100, 1875 | "nullPointMode": "connected", 1876 | "nullText": null, 1877 | "postfix": "", 1878 | "postfixFontSize": "50%", 1879 | "prefix": "", 1880 | "prefixFontSize": "50%", 1881 | "rangeMaps": [ 1882 | { 1883 | "from": "null", 1884 | "text": "N/A", 1885 | "to": "null" 1886 | } 1887 | ], 1888 | "sparkline": { 1889 | "fillColor": "rgba(31, 118, 189, 0.18)", 1890 | "full": false, 1891 | "lineColor": "rgb(31, 120, 193)", 1892 | "show": false, 1893 | "ymax": null, 1894 | "ymin": null 1895 | }, 1896 | "tableColumn": "NODE", 1897 | "targets": [ 1898 | { 1899 | "expr": "1", 1900 | "interval": "", 1901 | "legendFormat": "NODE", 1902 | "refId": "A" 1903 | } 1904 | ], 1905 | "thresholds": "0,0", 1906 | "timeFrom": null, 1907 | "timeShift": null, 1908 | "title": "BOTH", 1909 | "type": "singlestat", 1910 | "valueFontSize": "20%", 1911 | "valueMaps": [ 1912 | { 1913 | "op": "=", 1914 | "text": "", 1915 | "value": "1" 1916 | } 1917 | ], 1918 | "valueName": "avg" 1919 | }, 1920 | { 1921 | "cacheTimeout": null, 1922 | "colorBackground": true, 1923 | "colorValue": false, 1924 | "colors": [ 1925 | "#299c46", 1926 | "rgba(237, 129, 40, 0.89)", 1927 | "#1F60C4" 1928 | ], 1929 | "datasource": "Prometheus", 1930 | "fieldConfig": { 1931 | "defaults": { 1932 | "custom": {} 1933 | }, 1934 | "overrides": [] 1935 | }, 1936 | "format": "none", 1937 | "gauge": { 1938 | "maxValue": 100, 1939 | "minValue": 0, 1940 | "show": false, 1941 | "thresholdLabels": false, 1942 | "thresholdMarkers": true 1943 | }, 1944 | "gridPos": { 1945 | "h": 1, 1946 | "w": 11, 1947 | "x": 8, 1948 | "y": 51 1949 | }, 1950 | "id": 30, 1951 | "interval": null, 1952 | "links": [], 1953 | "mappingType": 1, 1954 | "mappingTypes": [ 1955 | { 1956 | "name": "value to text", 1957 | "value": 1 1958 | }, 1959 | { 1960 | "name": "range to text", 1961 | "value": 2 1962 | } 1963 | ], 1964 | "maxDataPoints": 100, 1965 | "nullPointMode": "connected", 1966 | "nullText": null, 1967 | "postfix": "", 1968 | "postfixFontSize": "50%", 1969 | "prefix": "", 1970 | "prefixFontSize": "50%", 1971 | "rangeMaps": [ 1972 | { 1973 | "from": "null", 1974 | "text": "N/A", 1975 | "to": "null" 1976 | } 1977 | ], 1978 | "sparkline": { 1979 | "fillColor": "rgba(31, 118, 189, 0.18)", 1980 | "full": false, 1981 | "lineColor": "rgb(31, 120, 193)", 1982 | "show": false, 1983 | "ymax": null, 1984 | "ymin": null 1985 | }, 1986 | "tableColumn": "NODE", 1987 | "targets": [ 1988 | { 1989 | "expr": "1", 1990 | "interval": "", 1991 | "legendFormat": "NODE", 1992 | "refId": "A" 1993 | } 1994 | ], 1995 | "thresholds": "0,0", 1996 | "timeFrom": null, 1997 | "timeShift": null, 1998 | "title": "NODE", 1999 | "type": "singlestat", 2000 | "valueFontSize": "20%", 2001 | "valueMaps": [ 2002 | { 2003 | "op": "=", 2004 | "text": "", 2005 | "value": "1" 2006 | } 2007 | ], 2008 | "valueName": "avg" 2009 | }, 2010 | { 2011 | "cacheTimeout": null, 2012 | "colorBackground": true, 2013 | "colorValue": false, 2014 | "colors": [ 2015 | "#299c46", 2016 | "rgba(237, 129, 40, 0.89)", 2017 | "#8F3BB8" 2018 | ], 2019 | "datasource": "Prometheus", 2020 | "decimals": null, 2021 | "fieldConfig": { 2022 | "defaults": { 2023 | "custom": {} 2024 | }, 2025 | "overrides": [] 2026 | }, 2027 | "format": "none", 2028 | "gauge": { 2029 | "maxValue": 100, 2030 | "minValue": 0, 2031 | "show": false, 2032 | "thresholdLabels": false, 2033 | "thresholdMarkers": true 2034 | }, 2035 | "gridPos": { 2036 | "h": 1, 2037 | "w": 5, 2038 | "x": 19, 2039 | "y": 51 2040 | }, 2041 | "id": 41, 2042 | "interval": null, 2043 | "links": [], 2044 | "mappingType": 1, 2045 | "mappingTypes": [ 2046 | { 2047 | "name": "value to text", 2048 | "value": 1 2049 | }, 2050 | { 2051 | "name": "range to text", 2052 | "value": 2 2053 | } 2054 | ], 2055 | "maxDataPoints": 100, 2056 | "nullPointMode": "connected", 2057 | "nullText": null, 2058 | "pluginVersion": "6.7.2", 2059 | "postfix": "", 2060 | "postfixFontSize": "20%", 2061 | "prefix": "", 2062 | "prefixFontSize": "20%", 2063 | "rangeMaps": [ 2064 | { 2065 | "from": "null", 2066 | "text": "N/A", 2067 | "to": "null" 2068 | } 2069 | ], 2070 | "sparkline": { 2071 | "fillColor": "rgba(31, 118, 189, 0.18)", 2072 | "full": false, 2073 | "lineColor": "rgb(31, 120, 193)", 2074 | "show": false, 2075 | "ymax": null, 2076 | "ymin": null 2077 | }, 2078 | "tableColumn": "", 2079 | "targets": [ 2080 | { 2081 | "expr": "1", 2082 | "interval": "", 2083 | "legendFormat": "", 2084 | "refId": "A" 2085 | } 2086 | ], 2087 | "thresholds": "0,0", 2088 | "timeFrom": null, 2089 | "timeShift": null, 2090 | "title": "ALERTS", 2091 | "type": "singlestat", 2092 | "valueFontSize": "20%", 2093 | "valueMaps": [ 2094 | { 2095 | "op": "=", 2096 | "text": "", 2097 | "value": "1" 2098 | } 2099 | ], 2100 | "valueName": "avg" 2101 | }, 2102 | { 2103 | "aliasColors": { 2104 | "CPU beacon node": "red", 2105 | "CPU validator": "purple", 2106 | "beacon node": "rgb(68, 218, 252)", 2107 | "memory beacon node": "rgb(96, 252, 255)", 2108 | "memory validator": "rgb(255, 255, 160)", 2109 | "validator": "yellow" 2110 | }, 2111 | "bars": false, 2112 | "dashLength": 10, 2113 | "dashes": false, 2114 | "datasource": "Prometheus", 2115 | "fieldConfig": { 2116 | "defaults": { 2117 | "custom": {} 2118 | }, 2119 | "overrides": [] 2120 | }, 2121 | "fill": 5, 2122 | "fillGradient": 0, 2123 | "gridPos": { 2124 | "h": 10, 2125 | "w": 8, 2126 | "x": 0, 2127 | "y": 52 2128 | }, 2129 | "hiddenSeries": false, 2130 | "id": 32, 2131 | "legend": { 2132 | "alignAsTable": false, 2133 | "avg": false, 2134 | "current": true, 2135 | "hideEmpty": false, 2136 | "hideZero": false, 2137 | "max": false, 2138 | "min": false, 2139 | "rightSide": false, 2140 | "show": true, 2141 | "total": false, 2142 | "values": true 2143 | }, 2144 | "lines": true, 2145 | "linewidth": 1, 2146 | "nullPointMode": "null", 2147 | "options": { 2148 | "dataLinks": [] 2149 | }, 2150 | "percentage": true, 2151 | "pluginVersion": "6.7.3", 2152 | "pointradius": 2, 2153 | "points": false, 2154 | "renderer": "flot", 2155 | "seriesOverrides": [ 2156 | { 2157 | "alias": "CPU beacon node", 2158 | "fill": 0, 2159 | "linewidth": 1, 2160 | "yaxis": 2 2161 | }, 2162 | { 2163 | "alias": "CPU validator", 2164 | "fill": 0, 2165 | "linewidth": 1, 2166 | "nullPointMode": "null as zero", 2167 | "yaxis": 2 2168 | } 2169 | ], 2170 | "spaceLength": 10, 2171 | "stack": false, 2172 | "steppedLine": false, 2173 | "targets": [ 2174 | { 2175 | "expr": "avg_over_time(go_memstats_alloc_bytes{job=\"$node_job\"}[1m:5s])", 2176 | "interval": "", 2177 | "legendFormat": "memory {{job}}", 2178 | "refId": "A" 2179 | }, 2180 | { 2181 | "expr": "avg_over_time(go_memstats_alloc_bytes{job=\"$validator_job\"}[1m:5s])", 2182 | "interval": "", 2183 | "legendFormat": "memory {{job}}", 2184 | "refId": "C" 2185 | }, 2186 | { 2187 | "expr": "((process_cpu_seconds_total - process_cpu_seconds_total offset 2m) > 0)*100/120/go_maxprocs", 2188 | "interval": "", 2189 | "legendFormat": "CPU {{job}}", 2190 | "refId": "B" 2191 | } 2192 | ], 2193 | "thresholds": [ 2194 | { 2195 | "colorMode": "critical", 2196 | "fill": true, 2197 | "line": true, 2198 | "op": "gt", 2199 | "value": 4000000000, 2200 | "yaxis": "left" 2201 | } 2202 | ], 2203 | "timeFrom": null, 2204 | "timeRegions": [], 2205 | "timeShift": null, 2206 | "title": "Hardware usage", 2207 | "tooltip": { 2208 | "shared": true, 2209 | "sort": 0, 2210 | "value_type": "cumulative" 2211 | }, 2212 | "type": "graph", 2213 | "xaxis": { 2214 | "buckets": null, 2215 | "mode": "time", 2216 | "name": null, 2217 | "show": true, 2218 | "values": [] 2219 | }, 2220 | "yaxes": [ 2221 | { 2222 | "decimals": null, 2223 | "format": "decbytes", 2224 | "label": "mem usage", 2225 | "logBase": 1, 2226 | "max": null, 2227 | "min": null, 2228 | "show": true 2229 | }, 2230 | { 2231 | "decimals": 1, 2232 | "format": "percent", 2233 | "label": "CPU usage rate", 2234 | "logBase": 1, 2235 | "max": null, 2236 | "min": null, 2237 | "show": true 2238 | } 2239 | ], 2240 | "yaxis": { 2241 | "align": false, 2242 | "alignLevel": null 2243 | } 2244 | }, 2245 | { 2246 | "aliasColors": { 2247 | "Active": "light-green", 2248 | "Exiting": "red", 2249 | "Participation rate": "purple", 2250 | "Pending": "yellow" 2251 | }, 2252 | "bars": false, 2253 | "dashLength": 10, 2254 | "dashes": false, 2255 | "datasource": "Prometheus", 2256 | "description": "This graph is made for trading purpose mostly.\nSupposing that if a lot of validators are exiting, price is gonna dump.\n\nAlso this can prevent to exit while exiting queue is too long, same for depositing while pending queue is too long.\n\n", 2257 | "fieldConfig": { 2258 | "defaults": { 2259 | "custom": {} 2260 | }, 2261 | "overrides": [] 2262 | }, 2263 | "fill": 1, 2264 | "fillGradient": 0, 2265 | "gridPos": { 2266 | "h": 10, 2267 | "w": 8, 2268 | "x": 8, 2269 | "y": 52 2270 | }, 2271 | "hiddenSeries": false, 2272 | "hideTimeOverride": false, 2273 | "id": 46, 2274 | "legend": { 2275 | "alignAsTable": false, 2276 | "avg": false, 2277 | "current": true, 2278 | "max": false, 2279 | "min": false, 2280 | "rightSide": false, 2281 | "show": true, 2282 | "total": false, 2283 | "values": true 2284 | }, 2285 | "lines": true, 2286 | "linewidth": 1, 2287 | "nullPointMode": "null", 2288 | "options": { 2289 | "dataLinks": [] 2290 | }, 2291 | "percentage": false, 2292 | "pointradius": 2, 2293 | "points": false, 2294 | "renderer": "flot", 2295 | "seriesOverrides": [ 2296 | { 2297 | "alias": "Participation rate", 2298 | "fill": 0, 2299 | "linewidth": 2, 2300 | "yaxis": 2 2301 | } 2302 | ], 2303 | "spaceLength": 10, 2304 | "stack": false, 2305 | "steppedLine": false, 2306 | "targets": [ 2307 | { 2308 | "expr": "validators_total_balance{state=\"Active\"} / 10e8", 2309 | "interval": "", 2310 | "legendFormat": "Active", 2311 | "refId": "A" 2312 | }, 2313 | { 2314 | "expr": "validators_total_balance{state=\"Pending\"} / 10e8", 2315 | "interval": "", 2316 | "legendFormat": "Pending", 2317 | "refId": "B" 2318 | }, 2319 | { 2320 | "expr": "validators_total_balance{state=\"Exiting\"} / 10e8", 2321 | "interval": "", 2322 | "legendFormat": "Exiting", 2323 | "refId": "C" 2324 | }, 2325 | { 2326 | "expr": "total_voted_target_balances/total_eligible_balances*100", 2327 | "instant": false, 2328 | "interval": "", 2329 | "legendFormat": "Participation rate", 2330 | "refId": "D" 2331 | } 2332 | ], 2333 | "thresholds": [], 2334 | "timeFrom": "30d", 2335 | "timeRegions": [], 2336 | "timeShift": null, 2337 | "title": "Balance validators status and participation rate", 2338 | "tooltip": { 2339 | "shared": true, 2340 | "sort": 0, 2341 | "value_type": "individual" 2342 | }, 2343 | "type": "graph", 2344 | "xaxis": { 2345 | "buckets": null, 2346 | "mode": "time", 2347 | "name": null, 2348 | "show": true, 2349 | "values": [] 2350 | }, 2351 | "yaxes": [ 2352 | { 2353 | "format": "short", 2354 | "label": "ETH", 2355 | "logBase": 1, 2356 | "max": null, 2357 | "min": null, 2358 | "show": true 2359 | }, 2360 | { 2361 | "decimals": null, 2362 | "format": "percent", 2363 | "label": "", 2364 | "logBase": 1, 2365 | "max": "100", 2366 | "min": "0", 2367 | "show": true 2368 | } 2369 | ], 2370 | "yaxis": { 2371 | "align": false, 2372 | "alignLevel": null 2373 | } 2374 | }, 2375 | { 2376 | "cacheTimeout": null, 2377 | "datasource": "Prometheus", 2378 | "fieldConfig": { 2379 | "defaults": { 2380 | "custom": {}, 2381 | "decimals": 1, 2382 | "mappings": [], 2383 | "nullValueMode": "connected", 2384 | "thresholds": { 2385 | "mode": "absolute", 2386 | "steps": [ 2387 | { 2388 | "color": "red", 2389 | "value": null 2390 | }, 2391 | { 2392 | "color": "#FADE2A", 2393 | "value": 0.17 2394 | }, 2395 | { 2396 | "color": "#299c46", 2397 | "value": 11.9 2398 | } 2399 | ] 2400 | }, 2401 | "unit": "h" 2402 | }, 2403 | "overrides": [] 2404 | }, 2405 | "gridPos": { 2406 | "h": 2, 2407 | "w": 3, 2408 | "x": 16, 2409 | "y": 52 2410 | }, 2411 | "id": 56, 2412 | "links": [], 2413 | "options": { 2414 | "colorMode": "background", 2415 | "graphMode": "none", 2416 | "justifyMode": "auto", 2417 | "orientation": "horizontal", 2418 | "reduceOptions": { 2419 | "calcs": [ 2420 | "lastNotNull" 2421 | ], 2422 | "values": false 2423 | } 2424 | }, 2425 | "pluginVersion": "7.0.1", 2426 | "targets": [ 2427 | { 2428 | "expr": "(time()-process_start_time_seconds{job=\"$node_job\"})/3600", 2429 | "instant": true, 2430 | "interval": "", 2431 | "legendFormat": "", 2432 | "refId": "A" 2433 | } 2434 | ], 2435 | "timeFrom": null, 2436 | "timeShift": null, 2437 | "title": "Node process started", 2438 | "type": "stat" 2439 | }, 2440 | { 2441 | "dashboardFilter": "", 2442 | "dashboardTags": [], 2443 | "datasource": "Prometheus", 2444 | "fieldConfig": { 2445 | "defaults": { 2446 | "custom": {} 2447 | }, 2448 | "overrides": [] 2449 | }, 2450 | "folderId": null, 2451 | "gridPos": { 2452 | "h": 10, 2453 | "w": 5, 2454 | "x": 19, 2455 | "y": 52 2456 | }, 2457 | "id": 24, 2458 | "limit": 10, 2459 | "nameFilter": "", 2460 | "onlyAlertsOnDashboard": true, 2461 | "show": "current", 2462 | "sortOrder": 3, 2463 | "stateFilter": [], 2464 | "timeFrom": null, 2465 | "timeShift": null, 2466 | "title": "All alerts", 2467 | "type": "alertlist" 2468 | }, 2469 | { 2470 | "cacheTimeout": null, 2471 | "datasource": "Prometheus", 2472 | "fieldConfig": { 2473 | "defaults": { 2474 | "custom": {}, 2475 | "mappings": [], 2476 | "nullValueMode": "connected", 2477 | "thresholds": { 2478 | "mode": "absolute", 2479 | "steps": [ 2480 | { 2481 | "color": "#299c46", 2482 | "value": null 2483 | }, 2484 | { 2485 | "color": "#eab839", 2486 | "value": 5 2487 | }, 2488 | { 2489 | "color": "red", 2490 | "value": 20 2491 | } 2492 | ] 2493 | }, 2494 | "unit": "none" 2495 | }, 2496 | "overrides": [] 2497 | }, 2498 | "gridPos": { 2499 | "h": 2, 2500 | "w": 3, 2501 | "x": 16, 2502 | "y": 54 2503 | }, 2504 | "id": 26, 2505 | "links": [], 2506 | "options": { 2507 | "colorMode": "background", 2508 | "graphMode": "none", 2509 | "justifyMode": "auto", 2510 | "orientation": "horizontal", 2511 | "reduceOptions": { 2512 | "calcs": [ 2513 | "lastNotNull" 2514 | ], 2515 | "values": false 2516 | } 2517 | }, 2518 | "pluginVersion": "7.0.1", 2519 | "targets": [ 2520 | { 2521 | "expr": "beacon_clock_time_slot-beacon_head_slot", 2522 | "instant": true, 2523 | "interval": "", 2524 | "legendFormat": "Slots behind", 2525 | "refId": "A" 2526 | } 2527 | ], 2528 | "timeFrom": null, 2529 | "timeShift": null, 2530 | "title": "Slots behind", 2531 | "type": "stat" 2532 | }, 2533 | { 2534 | "cacheTimeout": null, 2535 | "datasource": "Prometheus", 2536 | "fieldConfig": { 2537 | "defaults": { 2538 | "custom": {}, 2539 | "mappings": [], 2540 | "nullValueMode": "connected", 2541 | "thresholds": { 2542 | "mode": "absolute", 2543 | "steps": [ 2544 | { 2545 | "color": "red", 2546 | "value": null 2547 | }, 2548 | { 2549 | "color": "#F2CC0C", 2550 | "value": 5 2551 | }, 2552 | { 2553 | "color": "#299c46", 2554 | "value": 10 2555 | } 2556 | ] 2557 | }, 2558 | "unit": "none" 2559 | }, 2560 | "overrides": [] 2561 | }, 2562 | "gridPos": { 2563 | "h": 2, 2564 | "w": 3, 2565 | "x": 16, 2566 | "y": 56 2567 | }, 2568 | "id": 34, 2569 | "links": [], 2570 | "options": { 2571 | "colorMode": "background", 2572 | "graphMode": "none", 2573 | "justifyMode": "auto", 2574 | "orientation": "horizontal", 2575 | "reduceOptions": { 2576 | "calcs": [ 2577 | "lastNotNull" 2578 | ], 2579 | "values": false 2580 | } 2581 | }, 2582 | "pluginVersion": "7.0.1", 2583 | "targets": [ 2584 | { 2585 | "expr": "p2p_peer_count{state=\"Connected\"}", 2586 | "instant": true, 2587 | "interval": "", 2588 | "legendFormat": "", 2589 | "refId": "A" 2590 | } 2591 | ], 2592 | "timeFrom": null, 2593 | "timeShift": null, 2594 | "title": "Peers connected", 2595 | "type": "stat" 2596 | }, 2597 | { 2598 | "datasource": "Prometheus", 2599 | "description": "This panel won't have consistant values during the first hour of the node started process", 2600 | "fieldConfig": { 2601 | "defaults": { 2602 | "custom": {}, 2603 | "decimals": 0, 2604 | "displayName": "", 2605 | "mappings": [ 2606 | { 2607 | "from": "", 2608 | "id": 1, 2609 | "operator": "", 2610 | "text": "0", 2611 | "to": "", 2612 | "type": 1, 2613 | "value": "null" 2614 | } 2615 | ], 2616 | "max": 100, 2617 | "min": 0, 2618 | "thresholds": { 2619 | "mode": "absolute", 2620 | "steps": [ 2621 | { 2622 | "color": "green", 2623 | "value": null 2624 | }, 2625 | { 2626 | "color": "#EAB839", 2627 | "value": 25 2628 | }, 2629 | { 2630 | "color": "red", 2631 | "value": 50 2632 | } 2633 | ] 2634 | }, 2635 | "unit": "short" 2636 | }, 2637 | "overrides": [] 2638 | }, 2639 | "gridPos": { 2640 | "h": 4, 2641 | "w": 3, 2642 | "x": 16, 2643 | "y": 58 2644 | }, 2645 | "id": 40, 2646 | "options": { 2647 | "displayMode": "lcd", 2648 | "orientation": "horizontal", 2649 | "reduceOptions": { 2650 | "calcs": [ 2651 | "last" 2652 | ], 2653 | "values": false 2654 | }, 2655 | "showUnfilled": true 2656 | }, 2657 | "pluginVersion": "7.0.1", 2658 | "targets": [ 2659 | { 2660 | "expr": "sum(delta(log_entries_total{job=\"$node_job\", level=\"error\"}[1h]) > 0)", 2661 | "instant": false, 2662 | "interval": "", 2663 | "legendFormat": "error", 2664 | "refId": "A" 2665 | }, 2666 | { 2667 | "expr": "sum(delta(log_entries_total{job=\"$node_job\", level=\"warning\"}[1h]) > 0)", 2668 | "instant": false, 2669 | "interval": "", 2670 | "legendFormat": "warning", 2671 | "refId": "B" 2672 | } 2673 | ], 2674 | "timeFrom": null, 2675 | "timeShift": null, 2676 | "title": "Hourly log type counter", 2677 | "type": "bargauge" 2678 | }, 2679 | { 2680 | "alert": { 2681 | "alertRuleTags": {}, 2682 | "conditions": [ 2683 | { 2684 | "evaluator": { 2685 | "params": [ 2686 | 0.1 2687 | ], 2688 | "type": "lt" 2689 | }, 2690 | "operator": { 2691 | "type": "and" 2692 | }, 2693 | "query": { 2694 | "params": [ 2695 | "A", 2696 | "10s", 2697 | "now" 2698 | ] 2699 | }, 2700 | "reducer": { 2701 | "params": [], 2702 | "type": "last" 2703 | }, 2704 | "type": "query" 2705 | } 2706 | ], 2707 | "executionErrorState": "alerting", 2708 | "for": "0m", 2709 | "frequency": "1m", 2710 | "handler": 1, 2711 | "message": "One of the two process just restarted.", 2712 | "name": "WARN NODE/VALIDATOR: The process just restarted", 2713 | "noDataState": "no_data", 2714 | "notifications": [ 2715 | { 2716 | "uid": "USY-LmRGz" 2717 | } 2718 | ] 2719 | }, 2720 | "aliasColors": {}, 2721 | "bars": false, 2722 | "dashLength": 10, 2723 | "dashes": false, 2724 | "datasource": "Prometheus", 2725 | "description": "This alert is useful only for people who has automatic restart of the process after crash. \nThis can be made for example by using the prysm.bat file on windows with \"set PRYSM_AUTORESTART=true&\", or with docker with \"--restart always\"", 2726 | "fieldConfig": { 2727 | "defaults": { 2728 | "custom": {} 2729 | }, 2730 | "overrides": [] 2731 | }, 2732 | "fill": 1, 2733 | "fillGradient": 0, 2734 | "gridPos": { 2735 | "h": 1, 2736 | "w": 5, 2737 | "x": 19, 2738 | "y": 62 2739 | }, 2740 | "hiddenSeries": false, 2741 | "id": 61, 2742 | "legend": { 2743 | "avg": false, 2744 | "current": false, 2745 | "max": false, 2746 | "min": false, 2747 | "show": true, 2748 | "total": false, 2749 | "values": false 2750 | }, 2751 | "lines": true, 2752 | "linewidth": 1, 2753 | "nullPointMode": "null", 2754 | "options": { 2755 | "dataLinks": [] 2756 | }, 2757 | "percentage": false, 2758 | "pointradius": 2, 2759 | "points": false, 2760 | "renderer": "flot", 2761 | "seriesOverrides": [], 2762 | "spaceLength": 10, 2763 | "stack": false, 2764 | "steppedLine": false, 2765 | "targets": [ 2766 | { 2767 | "expr": "(time()-process_start_time_seconds{job=\"beacon node\"})/3600", 2768 | "interval": "", 2769 | "legendFormat": "{{job}}", 2770 | "refId": "A" 2771 | }, 2772 | { 2773 | "expr": "(time()-process_start_time_seconds{job=\"validator\"})/3600", 2774 | "interval": "", 2775 | "legendFormat": "", 2776 | "refId": "B" 2777 | } 2778 | ], 2779 | "thresholds": [ 2780 | { 2781 | "colorMode": "critical", 2782 | "fill": true, 2783 | "line": true, 2784 | "op": "lt", 2785 | "value": 0.1 2786 | } 2787 | ], 2788 | "timeFrom": null, 2789 | "timeRegions": [], 2790 | "timeShift": null, 2791 | "title": "Warn: The process just restarted", 2792 | "tooltip": { 2793 | "shared": true, 2794 | "sort": 0, 2795 | "value_type": "individual" 2796 | }, 2797 | "type": "graph", 2798 | "xaxis": { 2799 | "buckets": null, 2800 | "mode": "time", 2801 | "name": null, 2802 | "show": true, 2803 | "values": [] 2804 | }, 2805 | "yaxes": [ 2806 | { 2807 | "decimals": 1, 2808 | "format": "short", 2809 | "label": null, 2810 | "logBase": 1, 2811 | "max": null, 2812 | "min": null, 2813 | "show": true 2814 | }, 2815 | { 2816 | "format": "short", 2817 | "label": null, 2818 | "logBase": 1, 2819 | "max": null, 2820 | "min": null, 2821 | "show": true 2822 | } 2823 | ], 2824 | "yaxis": { 2825 | "align": false, 2826 | "alignLevel": null 2827 | } 2828 | }, 2829 | { 2830 | "alert": { 2831 | "alertRuleTags": {}, 2832 | "conditions": [ 2833 | { 2834 | "evaluator": { 2835 | "params": [ 2836 | 50 2837 | ], 2838 | "type": "gt" 2839 | }, 2840 | "operator": { 2841 | "type": "and" 2842 | }, 2843 | "query": { 2844 | "params": [ 2845 | "A", 2846 | "5m", 2847 | "now" 2848 | ] 2849 | }, 2850 | "reducer": { 2851 | "params": [], 2852 | "type": "avg" 2853 | }, 2854 | "type": "query" 2855 | } 2856 | ], 2857 | "executionErrorState": "alerting", 2858 | "for": "0", 2859 | "frequency": "1m", 2860 | "handler": 1, 2861 | "message": "NODE ALERT: MORE THAN 50 SLOTS BEHIND THAN THE CHAIN", 2862 | "name": "NODE: 50 slots behind", 2863 | "noDataState": "ok", 2864 | "notifications": [ 2865 | { 2866 | "uid": "USY-LmRGz" 2867 | } 2868 | ] 2869 | }, 2870 | "aliasColors": {}, 2871 | "bars": false, 2872 | "dashLength": 10, 2873 | "dashes": false, 2874 | "datasource": "Prometheus", 2875 | "fieldConfig": { 2876 | "defaults": { 2877 | "custom": {} 2878 | }, 2879 | "overrides": [] 2880 | }, 2881 | "fill": 1, 2882 | "fillGradient": 0, 2883 | "gridPos": { 2884 | "h": 1, 2885 | "w": 5, 2886 | "x": 19, 2887 | "y": 63 2888 | }, 2889 | "hiddenSeries": false, 2890 | "id": 28, 2891 | "legend": { 2892 | "avg": false, 2893 | "current": false, 2894 | "max": false, 2895 | "min": false, 2896 | "show": true, 2897 | "total": false, 2898 | "values": false 2899 | }, 2900 | "lines": true, 2901 | "linewidth": 1, 2902 | "nullPointMode": "null", 2903 | "options": { 2904 | "dataLinks": [] 2905 | }, 2906 | "percentage": false, 2907 | "pointradius": 2, 2908 | "points": false, 2909 | "renderer": "flot", 2910 | "seriesOverrides": [], 2911 | "spaceLength": 10, 2912 | "stack": false, 2913 | "steppedLine": false, 2914 | "targets": [ 2915 | { 2916 | "expr": "beacon_clock_time_slot-beacon_head_slot", 2917 | "interval": "", 2918 | "legendFormat": "node slots behind", 2919 | "refId": "A" 2920 | } 2921 | ], 2922 | "thresholds": [ 2923 | { 2924 | "colorMode": "critical", 2925 | "fill": true, 2926 | "line": true, 2927 | "op": "gt", 2928 | "value": 50 2929 | } 2930 | ], 2931 | "timeFrom": null, 2932 | "timeRegions": [], 2933 | "timeShift": null, 2934 | "title": "Alert: 50 slots behind", 2935 | "tooltip": { 2936 | "shared": true, 2937 | "sort": 0, 2938 | "value_type": "individual" 2939 | }, 2940 | "type": "graph", 2941 | "xaxis": { 2942 | "buckets": null, 2943 | "mode": "time", 2944 | "name": null, 2945 | "show": true, 2946 | "values": [] 2947 | }, 2948 | "yaxes": [ 2949 | { 2950 | "format": "short", 2951 | "label": null, 2952 | "logBase": 1, 2953 | "max": null, 2954 | "min": null, 2955 | "show": true 2956 | }, 2957 | { 2958 | "format": "short", 2959 | "label": null, 2960 | "logBase": 1, 2961 | "max": null, 2962 | "min": null, 2963 | "show": true 2964 | } 2965 | ], 2966 | "yaxis": { 2967 | "align": false, 2968 | "alignLevel": null 2969 | } 2970 | }, 2971 | { 2972 | "alert": { 2973 | "alertRuleTags": {}, 2974 | "conditions": [ 2975 | { 2976 | "evaluator": { 2977 | "params": [ 2978 | 0.9 2979 | ], 2980 | "type": "lt" 2981 | }, 2982 | "operator": { 2983 | "type": "and" 2984 | }, 2985 | "query": { 2986 | "params": [ 2987 | "A", 2988 | "5m", 2989 | "now" 2990 | ] 2991 | }, 2992 | "reducer": { 2993 | "params": [], 2994 | "type": "avg" 2995 | }, 2996 | "type": "query" 2997 | } 2998 | ], 2999 | "executionErrorState": "alerting", 3000 | "for": "5m", 3001 | "frequency": "1m", 3002 | "handler": 1, 3003 | "message": "NODE/VALIDATOR: THE NODE OR VALIDATOR IS DOWN FOR MORE THAN 1 MINUTE", 3004 | "name": "NODE/VALIDATOR: Process down", 3005 | "noDataState": "no_data", 3006 | "notifications": [ 3007 | { 3008 | "uid": "USY-LmRGz" 3009 | } 3010 | ] 3011 | }, 3012 | "aliasColors": {}, 3013 | "bars": false, 3014 | "dashLength": 10, 3015 | "dashes": false, 3016 | "datasource": "Prometheus", 3017 | "fieldConfig": { 3018 | "defaults": { 3019 | "custom": {} 3020 | }, 3021 | "overrides": [] 3022 | }, 3023 | "fill": 1, 3024 | "fillGradient": 0, 3025 | "gridPos": { 3026 | "h": 1, 3027 | "w": 5, 3028 | "x": 19, 3029 | "y": 64 3030 | }, 3031 | "hiddenSeries": false, 3032 | "id": 44, 3033 | "legend": { 3034 | "alignAsTable": false, 3035 | "avg": false, 3036 | "current": false, 3037 | "max": false, 3038 | "min": false, 3039 | "show": true, 3040 | "total": false, 3041 | "values": false 3042 | }, 3043 | "lines": true, 3044 | "linewidth": 1, 3045 | "nullPointMode": "null", 3046 | "options": { 3047 | "dataLinks": [] 3048 | }, 3049 | "percentage": false, 3050 | "pointradius": 2, 3051 | "points": false, 3052 | "renderer": "flot", 3053 | "seriesOverrides": [], 3054 | "spaceLength": 10, 3055 | "stack": false, 3056 | "steppedLine": false, 3057 | "targets": [ 3058 | { 3059 | "expr": "up{job=\"beacon node\"}", 3060 | "hide": false, 3061 | "interval": "", 3062 | "intervalFactor": 1, 3063 | "legendFormat": "beacon node", 3064 | "refId": "A" 3065 | }, 3066 | { 3067 | "expr": "up{job=\"validator\"}", 3068 | "interval": "", 3069 | "legendFormat": "validator", 3070 | "refId": "B" 3071 | } 3072 | ], 3073 | "thresholds": [ 3074 | { 3075 | "colorMode": "critical", 3076 | "fill": true, 3077 | "line": true, 3078 | "op": "lt", 3079 | "value": 0.9 3080 | } 3081 | ], 3082 | "timeFrom": null, 3083 | "timeRegions": [], 3084 | "timeShift": null, 3085 | "title": "Alert: Process down", 3086 | "tooltip": { 3087 | "shared": true, 3088 | "sort": 0, 3089 | "value_type": "individual" 3090 | }, 3091 | "type": "graph", 3092 | "xaxis": { 3093 | "buckets": null, 3094 | "mode": "time", 3095 | "name": null, 3096 | "show": true, 3097 | "values": [] 3098 | }, 3099 | "yaxes": [ 3100 | { 3101 | "format": "short", 3102 | "label": null, 3103 | "logBase": 1, 3104 | "max": null, 3105 | "min": null, 3106 | "show": true 3107 | }, 3108 | { 3109 | "format": "short", 3110 | "label": null, 3111 | "logBase": 1, 3112 | "max": null, 3113 | "min": null, 3114 | "show": true 3115 | } 3116 | ], 3117 | "yaxis": { 3118 | "align": false, 3119 | "alignLevel": null 3120 | } 3121 | }, 3122 | { 3123 | "alert": { 3124 | "alertRuleTags": {}, 3125 | "conditions": [ 3126 | { 3127 | "evaluator": { 3128 | "params": [ 3129 | 0.000001 3130 | ], 3131 | "type": "lt" 3132 | }, 3133 | "operator": { 3134 | "type": "and" 3135 | }, 3136 | "query": { 3137 | "params": [ 3138 | "A", 3139 | "10s", 3140 | "now" 3141 | ] 3142 | }, 3143 | "reducer": { 3144 | "params": [], 3145 | "type": "last" 3146 | }, 3147 | "type": "query" 3148 | }, 3149 | { 3150 | "evaluator": { 3151 | "params": [ 3152 | -10 3153 | ], 3154 | "type": "gt" 3155 | }, 3156 | "operator": { 3157 | "type": "and" 3158 | }, 3159 | "query": { 3160 | "params": [ 3161 | "A", 3162 | "10s", 3163 | "now" 3164 | ] 3165 | }, 3166 | "reducer": { 3167 | "params": [], 3168 | "type": "last" 3169 | }, 3170 | "type": "query" 3171 | } 3172 | ], 3173 | "executionErrorState": "alerting", 3174 | "for": "0m", 3175 | "frequency": "1m", 3176 | "handler": 1, 3177 | "message": "VALIDATOR ALERT: THE EARNING IN THE LAST HOUR IS LESS THAN 0", 3178 | "name": "VALIDATOR: Hourly earning <= 0", 3179 | "noDataState": "ok", 3180 | "notifications": [ 3181 | { 3182 | "uid": "USY-LmRGz" 3183 | } 3184 | ] 3185 | }, 3186 | "aliasColors": {}, 3187 | "bars": false, 3188 | "dashLength": 10, 3189 | "dashes": false, 3190 | "datasource": "Prometheus", 3191 | "fieldConfig": { 3192 | "defaults": { 3193 | "custom": {} 3194 | }, 3195 | "overrides": [] 3196 | }, 3197 | "fill": 1, 3198 | "fillGradient": 0, 3199 | "gridPos": { 3200 | "h": 1, 3201 | "w": 5, 3202 | "x": 19, 3203 | "y": 65 3204 | }, 3205 | "hiddenSeries": false, 3206 | "id": 48, 3207 | "interval": "", 3208 | "legend": { 3209 | "avg": false, 3210 | "current": false, 3211 | "max": false, 3212 | "min": false, 3213 | "show": true, 3214 | "total": false, 3215 | "values": false 3216 | }, 3217 | "lines": true, 3218 | "linewidth": 1, 3219 | "nullPointMode": "null", 3220 | "options": { 3221 | "dataLinks": [] 3222 | }, 3223 | "percentage": false, 3224 | "pointradius": 2, 3225 | "points": false, 3226 | "renderer": "flot", 3227 | "seriesOverrides": [], 3228 | "spaceLength": 10, 3229 | "stack": false, 3230 | "steppedLine": false, 3231 | "targets": [ 3232 | { 3233 | "expr": "sum(validator_balance) - sum(validator_balance offset 1h) - count(validator_balance > 16)*32 + count(validator_balance offset 1h > 0)*32", 3234 | "instant": false, 3235 | "interval": "", 3236 | "legendFormat": "validators earning on 1h", 3237 | "refId": "A" 3238 | } 3239 | ], 3240 | "thresholds": [ 3241 | { 3242 | "colorMode": "critical", 3243 | "fill": true, 3244 | "line": true, 3245 | "op": "lt", 3246 | "value": 0.000001 3247 | } 3248 | ], 3249 | "timeFrom": null, 3250 | "timeRegions": [], 3251 | "timeShift": null, 3252 | "title": "Alert: Hourly earning <= 0", 3253 | "tooltip": { 3254 | "shared": true, 3255 | "sort": 0, 3256 | "value_type": "individual" 3257 | }, 3258 | "type": "graph", 3259 | "xaxis": { 3260 | "buckets": null, 3261 | "mode": "time", 3262 | "name": null, 3263 | "show": true, 3264 | "values": [] 3265 | }, 3266 | "yaxes": [ 3267 | { 3268 | "decimals": 8, 3269 | "format": "short", 3270 | "label": "", 3271 | "logBase": 1, 3272 | "max": null, 3273 | "min": null, 3274 | "show": true 3275 | }, 3276 | { 3277 | "format": "short", 3278 | "label": null, 3279 | "logBase": 1, 3280 | "max": null, 3281 | "min": null, 3282 | "show": true 3283 | } 3284 | ], 3285 | "yaxis": { 3286 | "align": false, 3287 | "alignLevel": null 3288 | } 3289 | }, 3290 | { 3291 | "alert": { 3292 | "alertRuleTags": {}, 3293 | "conditions": [ 3294 | { 3295 | "evaluator": { 3296 | "params": [ 3297 | 50 3298 | ], 3299 | "type": "gt" 3300 | }, 3301 | "operator": { 3302 | "type": "and" 3303 | }, 3304 | "query": { 3305 | "params": [ 3306 | "A", 3307 | "10s", 3308 | "now" 3309 | ] 3310 | }, 3311 | "reducer": { 3312 | "params": [], 3313 | "type": "avg" 3314 | }, 3315 | "type": "query" 3316 | }, 3317 | { 3318 | "evaluator": { 3319 | "params": [ 3320 | 100 3321 | ], 3322 | "type": "gt" 3323 | }, 3324 | "operator": { 3325 | "type": "or" 3326 | }, 3327 | "query": { 3328 | "params": [ 3329 | "B", 3330 | "10s", 3331 | "now" 3332 | ] 3333 | }, 3334 | "reducer": { 3335 | "params": [], 3336 | "type": "avg" 3337 | }, 3338 | "type": "query" 3339 | } 3340 | ], 3341 | "executionErrorState": "alerting", 3342 | "for": "0m", 3343 | "frequency": "1m", 3344 | "handler": 1, 3345 | "message": "NODE ALERT: MORE THAN 50 ERRORS OR 100 WARNINGS IN THE LAST HOUR", 3346 | "name": "NODE: 50 errors or 100 warns in 1h", 3347 | "noDataState": "ok", 3348 | "notifications": [ 3349 | { 3350 | "uid": "USY-LmRGz" 3351 | } 3352 | ] 3353 | }, 3354 | "aliasColors": {}, 3355 | "bars": false, 3356 | "dashLength": 10, 3357 | "dashes": false, 3358 | "datasource": "Prometheus", 3359 | "fieldConfig": { 3360 | "defaults": { 3361 | "custom": {} 3362 | }, 3363 | "overrides": [] 3364 | }, 3365 | "fill": 1, 3366 | "fillGradient": 0, 3367 | "gridPos": { 3368 | "h": 1, 3369 | "w": 5, 3370 | "x": 19, 3371 | "y": 66 3372 | }, 3373 | "hiddenSeries": false, 3374 | "id": 52, 3375 | "legend": { 3376 | "avg": false, 3377 | "current": false, 3378 | "max": false, 3379 | "min": false, 3380 | "show": true, 3381 | "total": false, 3382 | "values": false 3383 | }, 3384 | "lines": true, 3385 | "linewidth": 1, 3386 | "nullPointMode": "null", 3387 | "options": { 3388 | "dataLinks": [] 3389 | }, 3390 | "percentage": false, 3391 | "pluginVersion": "6.7.2", 3392 | "pointradius": 2, 3393 | "points": false, 3394 | "renderer": "flot", 3395 | "seriesOverrides": [], 3396 | "spaceLength": 10, 3397 | "stack": false, 3398 | "steppedLine": false, 3399 | "targets": [ 3400 | { 3401 | "expr": "sum(delta(log_entries_total{job=\"beacon node\", level=\"error\"}[1h]) > 0) ", 3402 | "instant": false, 3403 | "interval": "", 3404 | "legendFormat": "errors", 3405 | "refId": "A" 3406 | }, 3407 | { 3408 | "expr": "sum(delta(log_entries_total{job=\"beacon node\", level=\"warning\"}[1h]) > 0)", 3409 | "instant": false, 3410 | "interval": "", 3411 | "legendFormat": "warnings", 3412 | "refId": "B" 3413 | } 3414 | ], 3415 | "thresholds": [ 3416 | { 3417 | "colorMode": "critical", 3418 | "fill": true, 3419 | "line": true, 3420 | "op": "gt", 3421 | "value": 50 3422 | } 3423 | ], 3424 | "timeFrom": null, 3425 | "timeRegions": [], 3426 | "timeShift": null, 3427 | "title": "Alert: 50 errors or 100 warns in 1h", 3428 | "tooltip": { 3429 | "shared": true, 3430 | "sort": 0, 3431 | "value_type": "individual" 3432 | }, 3433 | "type": "graph", 3434 | "xaxis": { 3435 | "buckets": null, 3436 | "mode": "time", 3437 | "name": null, 3438 | "show": true, 3439 | "values": [] 3440 | }, 3441 | "yaxes": [ 3442 | { 3443 | "format": "short", 3444 | "label": null, 3445 | "logBase": 1, 3446 | "max": null, 3447 | "min": null, 3448 | "show": true 3449 | }, 3450 | { 3451 | "format": "short", 3452 | "label": null, 3453 | "logBase": 1, 3454 | "max": null, 3455 | "min": null, 3456 | "show": true 3457 | } 3458 | ], 3459 | "yaxis": { 3460 | "align": false, 3461 | "alignLevel": null 3462 | } 3463 | }, 3464 | { 3465 | "alert": { 3466 | "alertRuleTags": {}, 3467 | "conditions": [ 3468 | { 3469 | "evaluator": { 3470 | "params": [ 3471 | 4.9, 3472 | 5.1 3473 | ], 3474 | "type": "within_range" 3475 | }, 3476 | "operator": { 3477 | "type": "and" 3478 | }, 3479 | "query": { 3480 | "params": [ 3481 | "A", 3482 | "10s", 3483 | "now" 3484 | ] 3485 | }, 3486 | "reducer": { 3487 | "params": [], 3488 | "type": "avg" 3489 | }, 3490 | "type": "query" 3491 | } 3492 | ], 3493 | "executionErrorState": "alerting", 3494 | "for": "0m", 3495 | "frequency": "1m", 3496 | "handler": 1, 3497 | "message": "VALIDATOR ALERT: YOUR VALIDATOR HAS BEEN SLASHED", 3498 | "name": "VALIDATOR: Validator has been slashed", 3499 | "noDataState": "ok", 3500 | "notifications": [ 3501 | { 3502 | "uid": "USY-LmRGz" 3503 | } 3504 | ] 3505 | }, 3506 | "aliasColors": {}, 3507 | "bars": false, 3508 | "dashLength": 10, 3509 | "dashes": false, 3510 | "datasource": "Prometheus", 3511 | "fieldConfig": { 3512 | "defaults": { 3513 | "custom": {} 3514 | }, 3515 | "overrides": [] 3516 | }, 3517 | "fill": 1, 3518 | "fillGradient": 0, 3519 | "gridPos": { 3520 | "h": 1, 3521 | "w": 5, 3522 | "x": 19, 3523 | "y": 67 3524 | }, 3525 | "hiddenSeries": false, 3526 | "id": 50, 3527 | "legend": { 3528 | "avg": false, 3529 | "current": false, 3530 | "max": false, 3531 | "min": false, 3532 | "show": true, 3533 | "total": false, 3534 | "values": false 3535 | }, 3536 | "lines": true, 3537 | "linewidth": 1, 3538 | "nullPointMode": "null", 3539 | "options": { 3540 | "dataLinks": [] 3541 | }, 3542 | "percentage": false, 3543 | "pointradius": 2, 3544 | "points": false, 3545 | "renderer": "flot", 3546 | "seriesOverrides": [], 3547 | "spaceLength": 10, 3548 | "stack": false, 3549 | "steppedLine": false, 3550 | "targets": [ 3551 | { 3552 | "expr": "label_replace(validator_statuses, \"pubkey\", \"$1\", \"pubkey\", \"(.{10}).*\")", 3553 | "interval": "", 3554 | "legendFormat": "{{pubkey}}", 3555 | "refId": "A" 3556 | } 3557 | ], 3558 | "thresholds": [ 3559 | { 3560 | "colorMode": "critical", 3561 | "fill": true, 3562 | "line": true, 3563 | "op": "gt", 3564 | "value": 4.9 3565 | }, 3566 | { 3567 | "colorMode": "critical", 3568 | "fill": true, 3569 | "line": true, 3570 | "op": "lt", 3571 | "value": 5.1 3572 | } 3573 | ], 3574 | "timeFrom": null, 3575 | "timeRegions": [], 3576 | "timeShift": null, 3577 | "title": "Alert: Validator has been slashed", 3578 | "tooltip": { 3579 | "shared": true, 3580 | "sort": 0, 3581 | "value_type": "individual" 3582 | }, 3583 | "type": "graph", 3584 | "xaxis": { 3585 | "buckets": null, 3586 | "mode": "time", 3587 | "name": null, 3588 | "show": true, 3589 | "values": [] 3590 | }, 3591 | "yaxes": [ 3592 | { 3593 | "format": "short", 3594 | "label": null, 3595 | "logBase": 1, 3596 | "max": null, 3597 | "min": null, 3598 | "show": true 3599 | }, 3600 | { 3601 | "format": "short", 3602 | "label": null, 3603 | "logBase": 1, 3604 | "max": null, 3605 | "min": null, 3606 | "show": true 3607 | } 3608 | ], 3609 | "yaxis": { 3610 | "align": false, 3611 | "alignLevel": null 3612 | } 3613 | }, 3614 | { 3615 | "alert": { 3616 | "alertRuleTags": {}, 3617 | "conditions": [ 3618 | { 3619 | "evaluator": { 3620 | "params": [ 3621 | 66 3622 | ], 3623 | "type": "lt" 3624 | }, 3625 | "operator": { 3626 | "type": "and" 3627 | }, 3628 | "query": { 3629 | "params": [ 3630 | "A", 3631 | "10s", 3632 | "now" 3633 | ] 3634 | }, 3635 | "reducer": { 3636 | "params": [], 3637 | "type": "last" 3638 | }, 3639 | "type": "query" 3640 | } 3641 | ], 3642 | "executionErrorState": "alerting", 3643 | "for": "0m", 3644 | "frequency": "1m", 3645 | "handler": 1, 3646 | "message": "NETWORK ALERT: THE PARTICIPATION RATE IS BELOW 66%! You will start to get penalties until the rate rise up above 66% again. This alert doesn't require any action from you", 3647 | "name": "NETWORK: Participation rate below 66%", 3648 | "noDataState": "ok", 3649 | "notifications": [ 3650 | { 3651 | "uid": "USY-LmRGz" 3652 | } 3653 | ] 3654 | }, 3655 | "aliasColors": {}, 3656 | "bars": false, 3657 | "dashLength": 10, 3658 | "dashes": false, 3659 | "datasource": "Prometheus", 3660 | "fieldConfig": { 3661 | "defaults": { 3662 | "custom": {} 3663 | }, 3664 | "overrides": [] 3665 | }, 3666 | "fill": 1, 3667 | "fillGradient": 0, 3668 | "gridPos": { 3669 | "h": 1, 3670 | "w": 5, 3671 | "x": 19, 3672 | "y": 68 3673 | }, 3674 | "hiddenSeries": false, 3675 | "id": 65, 3676 | "legend": { 3677 | "avg": false, 3678 | "current": false, 3679 | "max": false, 3680 | "min": false, 3681 | "show": true, 3682 | "total": false, 3683 | "values": false 3684 | }, 3685 | "lines": true, 3686 | "linewidth": 1, 3687 | "nullPointMode": "null", 3688 | "options": { 3689 | "dataLinks": [] 3690 | }, 3691 | "percentage": false, 3692 | "pointradius": 2, 3693 | "points": false, 3694 | "renderer": "flot", 3695 | "seriesOverrides": [], 3696 | "spaceLength": 10, 3697 | "stack": false, 3698 | "steppedLine": false, 3699 | "targets": [ 3700 | { 3701 | "expr": "total_voted_target_balances/total_eligible_balances*100", 3702 | "interval": "", 3703 | "legendFormat": "", 3704 | "refId": "A" 3705 | } 3706 | ], 3707 | "thresholds": [ 3708 | { 3709 | "colorMode": "critical", 3710 | "fill": true, 3711 | "line": true, 3712 | "op": "lt", 3713 | "value": 66 3714 | } 3715 | ], 3716 | "timeFrom": null, 3717 | "timeRegions": [], 3718 | "timeShift": null, 3719 | "title": "Alert: Participation rate < 66%", 3720 | "tooltip": { 3721 | "shared": true, 3722 | "sort": 0, 3723 | "value_type": "individual" 3724 | }, 3725 | "type": "graph", 3726 | "xaxis": { 3727 | "buckets": null, 3728 | "mode": "time", 3729 | "name": null, 3730 | "show": true, 3731 | "values": [] 3732 | }, 3733 | "yaxes": [ 3734 | { 3735 | "format": "percent", 3736 | "label": null, 3737 | "logBase": 1, 3738 | "max": null, 3739 | "min": null, 3740 | "show": true 3741 | }, 3742 | { 3743 | "format": "short", 3744 | "label": null, 3745 | "logBase": 1, 3746 | "max": null, 3747 | "min": null, 3748 | "show": true 3749 | } 3750 | ], 3751 | "yaxis": { 3752 | "align": false, 3753 | "alignLevel": null 3754 | } 3755 | } 3756 | ], 3757 | "refresh": "1m", 3758 | "schemaVersion": 25, 3759 | "style": "dark", 3760 | "tags": [], 3761 | "templating": { 3762 | "list": [ 3763 | { 3764 | "current": { 3765 | "selected": true, 3766 | "text": "beacon node", 3767 | "value": "beacon node" 3768 | }, 3769 | "hide": 2, 3770 | "label": null, 3771 | "name": "node_job", 3772 | "options": [ 3773 | { 3774 | "selected": true, 3775 | "text": "beacon node", 3776 | "value": "beacon node" 3777 | } 3778 | ], 3779 | "query": "beacon node", 3780 | "skipUrlSync": false, 3781 | "type": "constant" 3782 | }, 3783 | { 3784 | "current": { 3785 | "selected": true, 3786 | "text": "validator", 3787 | "value": "validator" 3788 | }, 3789 | "hide": 2, 3790 | "label": null, 3791 | "name": "validator_job", 3792 | "options": [ 3793 | { 3794 | "selected": true, 3795 | "text": "validator", 3796 | "value": "validator" 3797 | } 3798 | ], 3799 | "query": "validator", 3800 | "skipUrlSync": false, 3801 | "type": "constant" 3802 | }, 3803 | { 3804 | "allValue": "ETH", 3805 | "current": { 3806 | "selected": false, 3807 | "text": "All", 3808 | "value": "$__all" 3809 | }, 3810 | "datasource": "Prometheus", 3811 | "definition": "label_values(crypto_currency, pair)", 3812 | "hide": 0, 3813 | "includeAll": true, 3814 | "label": "Currency converter", 3815 | "multi": false, 3816 | "name": "fiat", 3817 | "options": [], 3818 | "query": "label_values(crypto_currency, pair)", 3819 | "refresh": 1, 3820 | "regex": "eth([a-z]*)", 3821 | "skipUrlSync": false, 3822 | "sort": 1, 3823 | "tagValuesQuery": "", 3824 | "tags": [], 3825 | "tagsQuery": "", 3826 | "type": "query", 3827 | "useTags": false 3828 | } 3829 | ] 3830 | }, 3831 | "time": { 3832 | "from": "now-6h", 3833 | "to": "now" 3834 | }, 3835 | "timepicker": { 3836 | "refresh_intervals": [ 3837 | "10s", 3838 | "30s", 3839 | "1m", 3840 | "5m", 3841 | "15m", 3842 | "30m", 3843 | "1h", 3844 | "2h", 3845 | "1d" 3846 | ] 3847 | }, 3848 | "timezone": "", 3849 | "title": "ETH staking dashboard lot keys", 3850 | "uid": "t2yHaa3Zz3", 3851 | "version": 27 3852 | } 3853 | 3854 | -------------------------------------------------------------------------------- /grafana/provisioning/dashboards/less_10_validators.json: -------------------------------------------------------------------------------- 1 | { 2 | "annotations": { 3 | "list": [ 4 | { 5 | "builtIn": 1, 6 | "datasource": "-- Grafana --", 7 | "enable": true, 8 | "hide": true, 9 | "iconColor": "rgba(0, 211, 255, 1)", 10 | "limit": 100, 11 | "name": "Annotations & Alerts", 12 | "showIn": 0, 13 | "type": "dashboard" 14 | } 15 | ] 16 | }, 17 | "editable": true, 18 | "gnetId": null, 19 | "graphTooltip": 0, 20 | "id": null, 21 | "iteration": 1591864806111, 22 | "links": [], 23 | "panels": [ 24 | { 25 | "cacheTimeout": null, 26 | "colorBackground": true, 27 | "colorValue": false, 28 | "colors": [ 29 | "#299c46", 30 | "#FA6400", 31 | "rgb(176, 83, 5)" 32 | ], 33 | "datasource": "Prometheus", 34 | "fieldConfig": { 35 | "defaults": { 36 | "custom": {} 37 | }, 38 | "overrides": [] 39 | }, 40 | "format": "none", 41 | "gauge": { 42 | "maxValue": 100, 43 | "minValue": 0, 44 | "show": false, 45 | "thresholdLabels": false, 46 | "thresholdMarkers": true 47 | }, 48 | "gridPos": { 49 | "h": 1, 50 | "w": 24, 51 | "x": 0, 52 | "y": 27 53 | }, 54 | "id": 42, 55 | "interval": null, 56 | "links": [], 57 | "mappingType": 1, 58 | "mappingTypes": [ 59 | { 60 | "name": "value to text", 61 | "value": 1 62 | }, 63 | { 64 | "name": "range to text", 65 | "value": 2 66 | } 67 | ], 68 | "maxDataPoints": 100, 69 | "nullPointMode": "connected", 70 | "nullText": null, 71 | "postfix": "", 72 | "postfixFontSize": "50%", 73 | "prefix": "", 74 | "prefixFontSize": "50%", 75 | "rangeMaps": [ 76 | { 77 | "from": "null", 78 | "text": "N/A", 79 | "to": "null" 80 | } 81 | ], 82 | "sparkline": { 83 | "fillColor": "rgba(31, 118, 189, 0.18)", 84 | "full": false, 85 | "lineColor": "rgb(31, 120, 193)", 86 | "show": false, 87 | "ymax": null, 88 | "ymin": null 89 | }, 90 | "tableColumn": "", 91 | "targets": [ 92 | { 93 | "expr": "1", 94 | "interval": "", 95 | "legendFormat": "", 96 | "refId": "A" 97 | } 98 | ], 99 | "thresholds": "0,0", 100 | "timeFrom": null, 101 | "timeShift": null, 102 | "title": "VALIDATOR", 103 | "type": "singlestat", 104 | "valueFontSize": "20%", 105 | "valueMaps": [ 106 | { 107 | "op": "=", 108 | "text": "", 109 | "value": "1" 110 | } 111 | ], 112 | "valueName": "avg" 113 | }, 114 | { 115 | "datasource": "Prometheus", 116 | "description": "This panel shows the earning during the last hour, and the annualized % of the hourly earning.\n\nThose data won't be shown until the first validator is at least one hour old, or that you started prometheus at least one hour ago.\n\nAlso, the annualized % might be wrong if you have downtime while new validators are getting validated", 117 | "fieldConfig": { 118 | "defaults": { 119 | "custom": {}, 120 | "decimals": 2, 121 | "mappings": [], 122 | "thresholds": { 123 | "mode": "absolute", 124 | "steps": [ 125 | { 126 | "color": "red", 127 | "value": null 128 | }, 129 | { 130 | "color": "#EAB839", 131 | "value": 0 132 | }, 133 | { 134 | "color": "#299c46", 135 | "value": 0.000001 136 | } 137 | ] 138 | } 139 | }, 140 | "overrides": [ 141 | { 142 | "matcher": { 143 | "id": "byName", 144 | "options": "Annualized %" 145 | }, 146 | "properties": [ 147 | { 148 | "id": "thresholds", 149 | "value": { 150 | "mode": "absolute", 151 | "steps": [ 152 | { 153 | "color": "red", 154 | "value": null 155 | }, 156 | { 157 | "color": "#EAB839", 158 | "value": 0 159 | }, 160 | { 161 | "color": "#299c46", 162 | "value": 5 163 | } 164 | ] 165 | } 166 | }, 167 | { 168 | "id": "unit", 169 | "value": "percent" 170 | } 171 | ] 172 | }, 173 | { 174 | "matcher": { 175 | "id": "byName", 176 | "options": "ETH" 177 | }, 178 | "properties": [ 179 | { 180 | "id": "decimals", 181 | "value": 4 182 | }, 183 | { 184 | "id": "unit", 185 | "value": " Ξ" 186 | } 187 | ] 188 | }, 189 | { 190 | "matcher": { 191 | "id": "byName", 192 | "options": "btc" 193 | }, 194 | "properties": [ 195 | { 196 | "id": "decimals", 197 | "value": 6 198 | }, 199 | { 200 | "id": "unit", 201 | "value": "currencyBTC" 202 | } 203 | ] 204 | }, 205 | { 206 | "matcher": { 207 | "id": "byName", 208 | "options": "cad" 209 | }, 210 | "properties": [ 211 | { 212 | "id": "unit", 213 | "value": "C$" 214 | } 215 | ] 216 | }, 217 | { 218 | "matcher": { 219 | "id": "byName", 220 | "options": "chf" 221 | }, 222 | "properties": [ 223 | { 224 | "id": "unit", 225 | "value": "CHf" 226 | } 227 | ] 228 | }, 229 | { 230 | "matcher": { 231 | "id": "byName", 232 | "options": "eur" 233 | }, 234 | "properties": [ 235 | { 236 | "id": "unit", 237 | "value": "currencyEUR" 238 | } 239 | ] 240 | }, 241 | { 242 | "matcher": { 243 | "id": "byName", 244 | "options": "gbp" 245 | }, 246 | "properties": [ 247 | { 248 | "id": "unit", 249 | "value": "currencyGBP" 250 | } 251 | ] 252 | }, 253 | { 254 | "matcher": { 255 | "id": "byName", 256 | "options": "jpy" 257 | }, 258 | "properties": [ 259 | { 260 | "id": "unit", 261 | "value": "currencyJPY" 262 | } 263 | ] 264 | }, 265 | { 266 | "matcher": { 267 | "id": "byName", 268 | "options": "usd" 269 | }, 270 | "properties": [ 271 | { 272 | "id": "unit", 273 | "value": "currencyUSD" 274 | } 275 | ] 276 | } 277 | ] 278 | }, 279 | "gridPos": { 280 | "h": 3, 281 | "w": 4, 282 | "x": 0, 283 | "y": 28 284 | }, 285 | "id": 80, 286 | "options": { 287 | "colorMode": "background", 288 | "graphMode": "none", 289 | "justifyMode": "auto", 290 | "orientation": "horizontal", 291 | "reduceOptions": { 292 | "calcs": [ 293 | "mean" 294 | ], 295 | "values": false 296 | } 297 | }, 298 | "pluginVersion": "7.0.1", 299 | "targets": [ 300 | { 301 | "expr": "(sum(validator_balance) - sum(validator_balance offset 1h) - count(validator_balance > 16)*32 + count(validator_balance offset 1h > 0)*32)*absent(crypto_currency{pair=~\"eth$fiat\"})", 302 | "instant": true, 303 | "interval": "", 304 | "legendFormat": "ETH", 305 | "refId": "A" 306 | }, 307 | { 308 | "expr": "(sum(validator_balance) - sum(validator_balance offset 1h) - count(validator_balance > 16)*32 + count(validator_balance offset 1h > 0)*32)*sum(crypto_currency{pair=\"eth$fiat\"})", 309 | "instant": true, 310 | "interval": "", 311 | "legendFormat": "$fiat", 312 | "refId": "C" 313 | }, 314 | { 315 | "expr": "(sum(validator_balance) - sum(validator_balance offset 1h) - count(validator_balance > 16)*32 + count(validator_balance offset 1h > 0)*32)/(avg_over_time(count(validator_balance > 16)[1h:30s])*32/24/365)*100", 316 | "instant": true, 317 | "interval": "", 318 | "legendFormat": "Annualized %", 319 | "refId": "B" 320 | } 321 | ], 322 | "timeFrom": null, 323 | "timeShift": null, 324 | "title": "Hourly earning", 325 | "type": "stat" 326 | }, 327 | { 328 | "datasource": "Prometheus", 329 | "description": "This panel shows the earning during the last day, and the annualized % of the daily earning.\n\nThose data won't be shown until the first validator is at least one day old, or that you started prometheus at least one day ago.\n\nAlso, the annualized % might be wrong if you have downtime while new validators are getting validated", 330 | "fieldConfig": { 331 | "defaults": { 332 | "custom": {}, 333 | "decimals": 2, 334 | "mappings": [], 335 | "thresholds": { 336 | "mode": "absolute", 337 | "steps": [ 338 | { 339 | "color": "red", 340 | "value": null 341 | }, 342 | { 343 | "color": "#EAB839", 344 | "value": 0 345 | }, 346 | { 347 | "color": "#299c46", 348 | "value": 0.000001 349 | } 350 | ] 351 | } 352 | }, 353 | "overrides": [ 354 | { 355 | "matcher": { 356 | "id": "byName", 357 | "options": "Annualized %" 358 | }, 359 | "properties": [ 360 | { 361 | "id": "thresholds", 362 | "value": { 363 | "mode": "absolute", 364 | "steps": [ 365 | { 366 | "color": "red", 367 | "value": null 368 | }, 369 | { 370 | "color": "#EAB839", 371 | "value": 0 372 | }, 373 | { 374 | "color": "#299c46", 375 | "value": 5 376 | } 377 | ] 378 | } 379 | }, 380 | { 381 | "id": "unit", 382 | "value": "percent" 383 | } 384 | ] 385 | }, 386 | { 387 | "matcher": { 388 | "id": "byName", 389 | "options": "ETH" 390 | }, 391 | "properties": [ 392 | { 393 | "id": "decimals", 394 | "value": 4 395 | }, 396 | { 397 | "id": "unit", 398 | "value": "Ξ" 399 | } 400 | ] 401 | }, 402 | { 403 | "matcher": { 404 | "id": "byName", 405 | "options": "btc" 406 | }, 407 | "properties": [ 408 | { 409 | "id": "decimals", 410 | "value": 6 411 | }, 412 | { 413 | "id": "unit", 414 | "value": "currencyBTC" 415 | } 416 | ] 417 | }, 418 | { 419 | "matcher": { 420 | "id": "byName", 421 | "options": "cad" 422 | }, 423 | "properties": [ 424 | { 425 | "id": "unit", 426 | "value": "C$" 427 | } 428 | ] 429 | }, 430 | { 431 | "matcher": { 432 | "id": "byName", 433 | "options": "chf" 434 | }, 435 | "properties": [ 436 | { 437 | "id": "unit", 438 | "value": "CHf" 439 | } 440 | ] 441 | }, 442 | { 443 | "matcher": { 444 | "id": "byName", 445 | "options": "eur" 446 | }, 447 | "properties": [ 448 | { 449 | "id": "unit", 450 | "value": "currencyEUR" 451 | } 452 | ] 453 | }, 454 | { 455 | "matcher": { 456 | "id": "byName", 457 | "options": "gbp" 458 | }, 459 | "properties": [ 460 | { 461 | "id": "unit", 462 | "value": "currencyGBP" 463 | } 464 | ] 465 | }, 466 | { 467 | "matcher": { 468 | "id": "byName", 469 | "options": "jpy" 470 | }, 471 | "properties": [ 472 | { 473 | "id": "unit", 474 | "value": "currencyJPY" 475 | } 476 | ] 477 | }, 478 | { 479 | "matcher": { 480 | "id": "byName", 481 | "options": "usd" 482 | }, 483 | "properties": [ 484 | { 485 | "id": "unit", 486 | "value": "currencyUSD" 487 | } 488 | ] 489 | } 490 | ] 491 | }, 492 | "gridPos": { 493 | "h": 3, 494 | "w": 4, 495 | "x": 4, 496 | "y": 28 497 | }, 498 | "id": 79, 499 | "options": { 500 | "colorMode": "background", 501 | "graphMode": "none", 502 | "justifyMode": "auto", 503 | "orientation": "horizontal", 504 | "reduceOptions": { 505 | "calcs": [ 506 | "mean" 507 | ], 508 | "values": false 509 | } 510 | }, 511 | "pluginVersion": "7.0.1", 512 | "targets": [ 513 | { 514 | "expr": "(sum(validator_balance) - sum(validator_balance offset 1d) - count(validator_balance > 16)*32 + count(validator_balance offset 1d > 0)*32)*absent(crypto_currency{pair=~\"eth$fiat\"})", 515 | "instant": true, 516 | "interval": "", 517 | "legendFormat": "ETH", 518 | "refId": "A" 519 | }, 520 | { 521 | "expr": "(sum(validator_balance) - sum(validator_balance offset 1d) - count(validator_balance > 16)*32 + count(validator_balance offset 1d > 0)*32)*sum(crypto_currency{pair=\"eth$fiat\"})", 522 | "instant": true, 523 | "interval": "", 524 | "legendFormat": "$fiat", 525 | "refId": "C" 526 | }, 527 | { 528 | "expr": "(sum(validator_balance) - sum(validator_balance offset 1d) - count(validator_balance > 16)*32 + count(validator_balance offset 1d > 0)*32)/(avg_over_time(count(validator_balance > 16)[1d:12m])*32/365)*100", 529 | "instant": true, 530 | "interval": "", 531 | "legendFormat": "Annualized %", 532 | "refId": "B" 533 | } 534 | ], 535 | "timeFrom": null, 536 | "timeShift": null, 537 | "title": "Daily earning", 538 | "type": "stat" 539 | }, 540 | { 541 | "datasource": "Prometheus", 542 | "description": "This panel shows the earning during the last week, and the annualized % of the weekly earning.\n\nThose data won't be shown until the first validator is at least one week old, or that you started prometheus at least one week ago.\n\nAlso, the annualized % might be wrong if you have downtime while new validators are getting validated", 543 | "fieldConfig": { 544 | "defaults": { 545 | "custom": {}, 546 | "decimals": 2, 547 | "mappings": [], 548 | "thresholds": { 549 | "mode": "absolute", 550 | "steps": [ 551 | { 552 | "color": "red", 553 | "value": null 554 | }, 555 | { 556 | "color": "#EAB839", 557 | "value": 0 558 | }, 559 | { 560 | "color": "#299c46", 561 | "value": 0.000001 562 | } 563 | ] 564 | } 565 | }, 566 | "overrides": [ 567 | { 568 | "matcher": { 569 | "id": "byName", 570 | "options": "Annualized %" 571 | }, 572 | "properties": [ 573 | { 574 | "id": "thresholds", 575 | "value": { 576 | "mode": "absolute", 577 | "steps": [ 578 | { 579 | "color": "red", 580 | "value": null 581 | }, 582 | { 583 | "color": "#EAB839", 584 | "value": 0 585 | }, 586 | { 587 | "color": "#299c46", 588 | "value": 5 589 | } 590 | ] 591 | } 592 | }, 593 | { 594 | "id": "unit", 595 | "value": "percent" 596 | } 597 | ] 598 | }, 599 | { 600 | "matcher": { 601 | "id": "byName", 602 | "options": "ETH" 603 | }, 604 | "properties": [ 605 | { 606 | "id": "decimals", 607 | "value": 4 608 | }, 609 | { 610 | "id": "unit", 611 | "value": "Ξ" 612 | } 613 | ] 614 | }, 615 | { 616 | "matcher": { 617 | "id": "byName", 618 | "options": "btc" 619 | }, 620 | "properties": [ 621 | { 622 | "id": "decimals", 623 | "value": 6 624 | }, 625 | { 626 | "id": "unit", 627 | "value": "currencyBTC" 628 | } 629 | ] 630 | }, 631 | { 632 | "matcher": { 633 | "id": "byName", 634 | "options": "cad" 635 | }, 636 | "properties": [ 637 | { 638 | "id": "unit", 639 | "value": "C$" 640 | } 641 | ] 642 | }, 643 | { 644 | "matcher": { 645 | "id": "byName", 646 | "options": "chf" 647 | }, 648 | "properties": [ 649 | { 650 | "id": "unit", 651 | "value": "CHf" 652 | } 653 | ] 654 | }, 655 | { 656 | "matcher": { 657 | "id": "byName", 658 | "options": "eur" 659 | }, 660 | "properties": [ 661 | { 662 | "id": "unit", 663 | "value": "currencyEUR" 664 | } 665 | ] 666 | }, 667 | { 668 | "matcher": { 669 | "id": "byName", 670 | "options": "gbp" 671 | }, 672 | "properties": [ 673 | { 674 | "id": "unit", 675 | "value": "currencyGBP" 676 | } 677 | ] 678 | }, 679 | { 680 | "matcher": { 681 | "id": "byName", 682 | "options": "jpy" 683 | }, 684 | "properties": [ 685 | { 686 | "id": "unit", 687 | "value": "currencyJPY" 688 | } 689 | ] 690 | }, 691 | { 692 | "matcher": { 693 | "id": "byName", 694 | "options": "usd" 695 | }, 696 | "properties": [ 697 | { 698 | "id": "unit", 699 | "value": "currencyUSD" 700 | } 701 | ] 702 | } 703 | ] 704 | }, 705 | "gridPos": { 706 | "h": 3, 707 | "w": 4, 708 | "x": 8, 709 | "y": 28 710 | }, 711 | "id": 78, 712 | "options": { 713 | "colorMode": "background", 714 | "graphMode": "none", 715 | "justifyMode": "auto", 716 | "orientation": "horizontal", 717 | "reduceOptions": { 718 | "calcs": [ 719 | "mean" 720 | ], 721 | "values": false 722 | } 723 | }, 724 | "pluginVersion": "7.0.1", 725 | "targets": [ 726 | { 727 | "expr": "(sum(validator_balance) - sum(validator_balance offset 1w) - count(validator_balance > 16)*32 + count(validator_balance offset 1w > 0)*32)*absent(crypto_currency{pair=~\"eth$fiat\"})", 728 | "instant": true, 729 | "interval": "", 730 | "legendFormat": "ETH", 731 | "refId": "A" 732 | }, 733 | { 734 | "expr": "(sum(validator_balance) - sum(validator_balance offset 1w) - count(validator_balance > 16)*32 + count(validator_balance offset 1w > 0)*32)*sum(crypto_currency{pair=\"eth$fiat\"})", 735 | "instant": true, 736 | "interval": "", 737 | "legendFormat": "$fiat", 738 | "refId": "C" 739 | }, 740 | { 741 | "expr": "(sum(validator_balance) - sum(validator_balance offset 1w) - count(validator_balance > 16)*32 + count(validator_balance offset 1w > 0)*32)/(avg_over_time(count(validator_balance > 16)[1w:84m])*32*7/365)*100", 742 | "instant": true, 743 | "interval": "", 744 | "legendFormat": "Annualized %", 745 | "refId": "B" 746 | } 747 | ], 748 | "timeFrom": null, 749 | "timeShift": null, 750 | "title": "Weekly earning", 751 | "type": "stat" 752 | }, 753 | { 754 | "datasource": "Prometheus", 755 | "description": "This panel shows the earning during the last month, and the annualized % of the monthly earning.\n\nThose data won't be shown until the first validator is at least one month old, or that you started prometheus at least one month ago. Ensure to run Prometheus with the flag `--storage.tsdb.retention.time=31d` if you want this panel to get enough data\n\nAlso, the annualized % might be wrong if you have downtime while new validators are getting validated", 756 | "fieldConfig": { 757 | "defaults": { 758 | "custom": {}, 759 | "decimals": 2, 760 | "mappings": [], 761 | "thresholds": { 762 | "mode": "absolute", 763 | "steps": [ 764 | { 765 | "color": "red", 766 | "value": null 767 | }, 768 | { 769 | "color": "#EAB839", 770 | "value": 0 771 | }, 772 | { 773 | "color": "#299c46", 774 | "value": 0.000001 775 | } 776 | ] 777 | } 778 | }, 779 | "overrides": [ 780 | { 781 | "matcher": { 782 | "id": "byName", 783 | "options": "Annualized %" 784 | }, 785 | "properties": [ 786 | { 787 | "id": "thresholds", 788 | "value": { 789 | "mode": "absolute", 790 | "steps": [ 791 | { 792 | "color": "red", 793 | "value": null 794 | }, 795 | { 796 | "color": "#EAB839", 797 | "value": 0 798 | }, 799 | { 800 | "color": "#299c46", 801 | "value": 5 802 | } 803 | ] 804 | } 805 | }, 806 | { 807 | "id": "unit", 808 | "value": "percent" 809 | } 810 | ] 811 | }, 812 | { 813 | "matcher": { 814 | "id": "byName", 815 | "options": "ETH" 816 | }, 817 | "properties": [ 818 | { 819 | "id": "decimals", 820 | "value": 4 821 | }, 822 | { 823 | "id": "unit", 824 | "value": "Ξ" 825 | } 826 | ] 827 | }, 828 | { 829 | "matcher": { 830 | "id": "byName", 831 | "options": "btc" 832 | }, 833 | "properties": [ 834 | { 835 | "id": "decimals", 836 | "value": 6 837 | }, 838 | { 839 | "id": "unit", 840 | "value": "currencyBTC" 841 | } 842 | ] 843 | }, 844 | { 845 | "matcher": { 846 | "id": "byName", 847 | "options": "cad" 848 | }, 849 | "properties": [ 850 | { 851 | "id": "unit", 852 | "value": "C$" 853 | } 854 | ] 855 | }, 856 | { 857 | "matcher": { 858 | "id": "byName", 859 | "options": "chf" 860 | }, 861 | "properties": [ 862 | { 863 | "id": "unit", 864 | "value": "CHf" 865 | } 866 | ] 867 | }, 868 | { 869 | "matcher": { 870 | "id": "byName", 871 | "options": "eur" 872 | }, 873 | "properties": [ 874 | { 875 | "id": "unit", 876 | "value": "currencyEUR" 877 | } 878 | ] 879 | }, 880 | { 881 | "matcher": { 882 | "id": "byName", 883 | "options": "gbp" 884 | }, 885 | "properties": [ 886 | { 887 | "id": "unit", 888 | "value": "currencyGBP" 889 | } 890 | ] 891 | }, 892 | { 893 | "matcher": { 894 | "id": "byName", 895 | "options": "jpy" 896 | }, 897 | "properties": [ 898 | { 899 | "id": "unit", 900 | "value": "currencyJPY" 901 | } 902 | ] 903 | }, 904 | { 905 | "matcher": { 906 | "id": "byName", 907 | "options": "usd" 908 | }, 909 | "properties": [ 910 | { 911 | "id": "unit", 912 | "value": "currencyUSD" 913 | } 914 | ] 915 | } 916 | ] 917 | }, 918 | "gridPos": { 919 | "h": 3, 920 | "w": 4, 921 | "x": 12, 922 | "y": 28 923 | }, 924 | "id": 77, 925 | "options": { 926 | "colorMode": "background", 927 | "graphMode": "none", 928 | "justifyMode": "auto", 929 | "orientation": "horizontal", 930 | "reduceOptions": { 931 | "calcs": [ 932 | "mean" 933 | ], 934 | "values": false 935 | } 936 | }, 937 | "pluginVersion": "7.0.1", 938 | "targets": [ 939 | { 940 | "expr": "(sum(validator_balance) - sum(validator_balance offset 30d) - count(validator_balance > 16)*32 + count(validator_balance offset 30d > 0)*32)*absent(crypto_currency{pair=~\"eth$fiat\"})", 941 | "instant": true, 942 | "interval": "", 943 | "legendFormat": "ETH", 944 | "refId": "A" 945 | }, 946 | { 947 | "expr": "(sum(validator_balance) - sum(validator_balance offset 30d) - count(validator_balance > 16)*32 + count(validator_balance offset 30d > 0)*32)*sum(crypto_currency{pair=\"eth$fiat\"})", 948 | "instant": true, 949 | "interval": "", 950 | "legendFormat": "$fiat", 951 | "refId": "C" 952 | }, 953 | { 954 | "expr": "(sum(validator_balance) - sum(validator_balance offset 30d) - count(validator_balance > 16)*32 + count(validator_balance offset 30d > 0)*32)/(avg_over_time(count(validator_balance > 16)[30d:6h])*32/12)*100", 955 | "instant": true, 956 | "interval": "", 957 | "legendFormat": "Annualized %", 958 | "refId": "B" 959 | } 960 | ], 961 | "timeFrom": null, 962 | "timeShift": null, 963 | "title": "Monthly earning", 964 | "type": "stat" 965 | }, 966 | { 967 | "datasource": "Prometheus", 968 | "fieldConfig": { 969 | "defaults": { 970 | "custom": {}, 971 | "decimals": 2, 972 | "mappings": [], 973 | "thresholds": { 974 | "mode": "absolute", 975 | "steps": [ 976 | { 977 | "color": "red", 978 | "value": null 979 | }, 980 | { 981 | "color": "#fade2a", 982 | "value": 0 983 | }, 984 | { 985 | "color": "#299c46", 986 | "value": 0.000001 987 | } 988 | ] 989 | } 990 | }, 991 | "overrides": [ 992 | { 993 | "matcher": { 994 | "id": "byName", 995 | "options": "btc" 996 | }, 997 | "properties": [ 998 | { 999 | "id": "decimals", 1000 | "value": 6 1001 | }, 1002 | { 1003 | "id": "unit", 1004 | "value": "currencyBTC" 1005 | } 1006 | ] 1007 | }, 1008 | { 1009 | "matcher": { 1010 | "id": "byName", 1011 | "options": "ETH" 1012 | }, 1013 | "properties": [ 1014 | { 1015 | "id": "decimals", 1016 | "value": 4 1017 | } 1018 | ] 1019 | }, 1020 | { 1021 | "matcher": { 1022 | "id": "byName", 1023 | "options": "ROI" 1024 | }, 1025 | "properties": [ 1026 | { 1027 | "id": "decimals", 1028 | "value": 4 1029 | }, 1030 | { 1031 | "id": "unit", 1032 | "value": "percent" 1033 | } 1034 | ] 1035 | }, 1036 | { 1037 | "matcher": { 1038 | "id": "byName", 1039 | "options": "cad" 1040 | }, 1041 | "properties": [ 1042 | { 1043 | "id": "unit", 1044 | "value": "C$" 1045 | } 1046 | ] 1047 | }, 1048 | { 1049 | "matcher": { 1050 | "id": "byName", 1051 | "options": "ETH" 1052 | }, 1053 | "properties": [ 1054 | { 1055 | "id": "unit", 1056 | "value": "Ξ" 1057 | } 1058 | ] 1059 | }, 1060 | { 1061 | "matcher": { 1062 | "id": "byName", 1063 | "options": "chf" 1064 | }, 1065 | "properties": [ 1066 | { 1067 | "id": "unit", 1068 | "value": "CHf" 1069 | } 1070 | ] 1071 | }, 1072 | { 1073 | "matcher": { 1074 | "id": "byName", 1075 | "options": "eur" 1076 | }, 1077 | "properties": [ 1078 | { 1079 | "id": "unit", 1080 | "value": "currencyEUR" 1081 | } 1082 | ] 1083 | }, 1084 | { 1085 | "matcher": { 1086 | "id": "byName", 1087 | "options": "gbp" 1088 | }, 1089 | "properties": [ 1090 | { 1091 | "id": "unit", 1092 | "value": "currencyGBP" 1093 | } 1094 | ] 1095 | }, 1096 | { 1097 | "matcher": { 1098 | "id": "byName", 1099 | "options": "jpy" 1100 | }, 1101 | "properties": [ 1102 | { 1103 | "id": "unit", 1104 | "value": "currencyJPY" 1105 | } 1106 | ] 1107 | }, 1108 | { 1109 | "matcher": { 1110 | "id": "byName", 1111 | "options": "usd" 1112 | }, 1113 | "properties": [ 1114 | { 1115 | "id": "unit", 1116 | "value": "currencyUSD" 1117 | } 1118 | ] 1119 | } 1120 | ] 1121 | }, 1122 | "gridPos": { 1123 | "h": 3, 1124 | "w": 5, 1125 | "x": 16, 1126 | "y": 28 1127 | }, 1128 | "id": 69, 1129 | "options": { 1130 | "colorMode": "background", 1131 | "graphMode": "none", 1132 | "justifyMode": "auto", 1133 | "orientation": "horizontal", 1134 | "reduceOptions": { 1135 | "calcs": [ 1136 | "mean" 1137 | ], 1138 | "values": false 1139 | } 1140 | }, 1141 | "pluginVersion": "7.0.1", 1142 | "targets": [ 1143 | { 1144 | "expr": "sum(validator_balance) - count(validator_balance > 16 and validator_statuses == 3)*32*absent(crypto_currency{pair=~\"eth$fiat\"})", 1145 | "instant": true, 1146 | "interval": "", 1147 | "legendFormat": "ETH", 1148 | "refId": "A" 1149 | }, 1150 | { 1151 | "expr": "(sum(validator_balance) - count(validator_balance > 16 and validator_statuses == 3)*32)*sum(crypto_currency{pair=\"eth$fiat\"})", 1152 | "instant": true, 1153 | "interval": "", 1154 | "legendFormat": "$fiat", 1155 | "refId": "C" 1156 | }, 1157 | { 1158 | "expr": "(sum(validator_balance) - count(validator_balance > 16 and validator_statuses == 3)*32)*100/(count(validator_balance > 16 and validator_statuses == 3)*32)", 1159 | "instant": true, 1160 | "interval": "", 1161 | "legendFormat": "ROI", 1162 | "refId": "B" 1163 | } 1164 | ], 1165 | "timeFrom": null, 1166 | "timeShift": null, 1167 | "title": "Total earning", 1168 | "type": "stat" 1169 | }, 1170 | { 1171 | "cacheTimeout": null, 1172 | "datasource": "Prometheus", 1173 | "fieldConfig": { 1174 | "defaults": { 1175 | "custom": {}, 1176 | "decimals": 1, 1177 | "mappings": [], 1178 | "nullValueMode": "connected", 1179 | "thresholds": { 1180 | "mode": "absolute", 1181 | "steps": [ 1182 | { 1183 | "color": "red", 1184 | "value": null 1185 | }, 1186 | { 1187 | "color": "#FADE2A", 1188 | "value": 0.17 1189 | }, 1190 | { 1191 | "color": "#299c46", 1192 | "value": 11.9 1193 | } 1194 | ] 1195 | }, 1196 | "unit": "h" 1197 | }, 1198 | "overrides": [] 1199 | }, 1200 | "gridPos": { 1201 | "h": 3, 1202 | "w": 3, 1203 | "x": 21, 1204 | "y": 28 1205 | }, 1206 | "id": 54, 1207 | "links": [], 1208 | "options": { 1209 | "colorMode": "background", 1210 | "graphMode": "none", 1211 | "justifyMode": "auto", 1212 | "orientation": "horizontal", 1213 | "reduceOptions": { 1214 | "calcs": [ 1215 | "lastNotNull" 1216 | ], 1217 | "values": false 1218 | } 1219 | }, 1220 | "pluginVersion": "7.0.1", 1221 | "targets": [ 1222 | { 1223 | "expr": "(time()-process_start_time_seconds{job=\"$validator_job\"})/3600", 1224 | "instant": true, 1225 | "interval": "", 1226 | "legendFormat": "", 1227 | "refId": "A" 1228 | } 1229 | ], 1230 | "timeFrom": null, 1231 | "timeShift": null, 1232 | "title": "Validator process started", 1233 | "type": "stat" 1234 | }, 1235 | { 1236 | "aliasColors": { 1237 | "Total balance": "purple" 1238 | }, 1239 | "bars": false, 1240 | "dashLength": 10, 1241 | "dashes": false, 1242 | "datasource": "Prometheus", 1243 | "fieldConfig": { 1244 | "defaults": { 1245 | "custom": {} 1246 | }, 1247 | "overrides": [] 1248 | }, 1249 | "fill": 1, 1250 | "fillGradient": 0, 1251 | "gridPos": { 1252 | "h": 10, 1253 | "w": 8, 1254 | "x": 0, 1255 | "y": 31 1256 | }, 1257 | "hiddenSeries": false, 1258 | "id": 4, 1259 | "legend": { 1260 | "avg": false, 1261 | "current": false, 1262 | "max": false, 1263 | "min": false, 1264 | "show": true, 1265 | "total": false, 1266 | "values": false 1267 | }, 1268 | "lines": true, 1269 | "linewidth": 1, 1270 | "nullPointMode": "null", 1271 | "options": { 1272 | "dataLinks": [] 1273 | }, 1274 | "percentage": false, 1275 | "pointradius": 2, 1276 | "points": false, 1277 | "renderer": "flot", 1278 | "seriesOverrides": [], 1279 | "spaceLength": 10, 1280 | "stack": false, 1281 | "steppedLine": false, 1282 | "targets": [ 1283 | { 1284 | "expr": "sum(validator_balance > 16)", 1285 | "interval": "", 1286 | "legendFormat": "Total balance", 1287 | "refId": "A" 1288 | } 1289 | ], 1290 | "thresholds": [], 1291 | "timeFrom": null, 1292 | "timeRegions": [], 1293 | "timeShift": null, 1294 | "title": "Total balance", 1295 | "tooltip": { 1296 | "shared": true, 1297 | "sort": 0, 1298 | "value_type": "individual" 1299 | }, 1300 | "type": "graph", 1301 | "xaxis": { 1302 | "buckets": null, 1303 | "mode": "time", 1304 | "name": null, 1305 | "show": true, 1306 | "values": [] 1307 | }, 1308 | "yaxes": [ 1309 | { 1310 | "decimals": 4, 1311 | "format": "short", 1312 | "label": "ETH", 1313 | "logBase": 1, 1314 | "max": null, 1315 | "min": null, 1316 | "show": true 1317 | }, 1318 | { 1319 | "format": "short", 1320 | "label": null, 1321 | "logBase": 1, 1322 | "max": null, 1323 | "min": null, 1324 | "show": true 1325 | } 1326 | ], 1327 | "yaxis": { 1328 | "align": false, 1329 | "alignLevel": null 1330 | } 1331 | }, 1332 | { 1333 | "aliasColors": { 1334 | "0x8926562b": "blue", 1335 | "0xa92dcbcf": "orange", 1336 | "0xafafbadf": "rgb(189, 181, 0)", 1337 | "0xb96135dd": "purple" 1338 | }, 1339 | "bars": false, 1340 | "dashLength": 10, 1341 | "dashes": false, 1342 | "datasource": "Prometheus", 1343 | "fieldConfig": { 1344 | "defaults": { 1345 | "custom": {} 1346 | }, 1347 | "overrides": [] 1348 | }, 1349 | "fill": 1, 1350 | "fillGradient": 0, 1351 | "gridPos": { 1352 | "h": 10, 1353 | "w": 8, 1354 | "x": 8, 1355 | "y": 31 1356 | }, 1357 | "hiddenSeries": false, 1358 | "id": 2, 1359 | "legend": { 1360 | "avg": false, 1361 | "current": false, 1362 | "max": false, 1363 | "min": false, 1364 | "show": true, 1365 | "total": false, 1366 | "values": false 1367 | }, 1368 | "lines": true, 1369 | "linewidth": 1, 1370 | "nullPointMode": "null", 1371 | "options": { 1372 | "dataLinks": [] 1373 | }, 1374 | "percentage": false, 1375 | "pointradius": 2, 1376 | "points": false, 1377 | "renderer": "flot", 1378 | "seriesOverrides": [], 1379 | "spaceLength": 10, 1380 | "stack": false, 1381 | "steppedLine": false, 1382 | "targets": [ 1383 | { 1384 | "expr": "label_replace(validator_balance > 16, \"pubkey\", \"$1\", \"pubkey\", \"(.{10}).*\")", 1385 | "format": "time_series", 1386 | "instant": false, 1387 | "interval": "", 1388 | "intervalFactor": 1, 1389 | "legendFormat": "{{pubkey}}", 1390 | "refId": "A" 1391 | } 1392 | ], 1393 | "thresholds": [], 1394 | "timeFrom": null, 1395 | "timeRegions": [], 1396 | "timeShift": null, 1397 | "title": "Validator balance", 1398 | "tooltip": { 1399 | "shared": true, 1400 | "sort": 0, 1401 | "value_type": "individual" 1402 | }, 1403 | "type": "graph", 1404 | "xaxis": { 1405 | "buckets": null, 1406 | "mode": "time", 1407 | "name": null, 1408 | "show": true, 1409 | "values": [] 1410 | }, 1411 | "yaxes": [ 1412 | { 1413 | "decimals": 4, 1414 | "format": "short", 1415 | "label": "ETH", 1416 | "logBase": 1, 1417 | "max": null, 1418 | "min": null, 1419 | "show": true 1420 | }, 1421 | { 1422 | "decimals": null, 1423 | "format": "short", 1424 | "label": "", 1425 | "logBase": 1, 1426 | "max": null, 1427 | "min": null, 1428 | "show": true 1429 | } 1430 | ], 1431 | "yaxis": { 1432 | "align": false, 1433 | "alignLevel": null 1434 | } 1435 | }, 1436 | { 1437 | "columns": [], 1438 | "datasource": "Prometheus", 1439 | "description": "", 1440 | "fieldConfig": { 1441 | "defaults": { 1442 | "custom": {} 1443 | }, 1444 | "overrides": [] 1445 | }, 1446 | "fontSize": "100%", 1447 | "gridPos": { 1448 | "h": 5, 1449 | "w": 8, 1450 | "x": 16, 1451 | "y": 31 1452 | }, 1453 | "id": 22, 1454 | "pageSize": 100, 1455 | "showHeader": true, 1456 | "sort": { 1457 | "col": null, 1458 | "desc": false 1459 | }, 1460 | "styles": [ 1461 | { 1462 | "alias": "", 1463 | "align": "auto", 1464 | "colorMode": null, 1465 | "colors": [ 1466 | "rgba(245, 54, 54, 0.9)", 1467 | "rgba(237, 129, 40, 0.89)", 1468 | "rgba(50, 172, 45, 0.97)" 1469 | ], 1470 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1471 | "decimals": 2, 1472 | "mappingType": 1, 1473 | "pattern": "Time", 1474 | "thresholds": [], 1475 | "type": "hidden", 1476 | "unit": "short" 1477 | }, 1478 | { 1479 | "alias": "", 1480 | "align": "auto", 1481 | "colorMode": null, 1482 | "colors": [ 1483 | "rgba(245, 54, 54, 0.9)", 1484 | "rgba(237, 129, 40, 0.89)", 1485 | "rgba(50, 172, 45, 0.97)" 1486 | ], 1487 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1488 | "decimals": 2, 1489 | "mappingType": 1, 1490 | "pattern": "pubkey", 1491 | "thresholds": [], 1492 | "type": "string", 1493 | "unit": "short" 1494 | }, 1495 | { 1496 | "alias": "balance", 1497 | "align": "auto", 1498 | "colorMode": "value", 1499 | "colors": [ 1500 | "rgba(245, 54, 54, 0.9)", 1501 | "rgba(237, 129, 40, 0.89)", 1502 | "rgba(50, 172, 45, 0.97)" 1503 | ], 1504 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1505 | "decimals": 9, 1506 | "mappingType": 1, 1507 | "pattern": "Value #A", 1508 | "thresholds": [ 1509 | "32", 1510 | "32.000000001" 1511 | ], 1512 | "type": "number", 1513 | "unit": "short" 1514 | }, 1515 | { 1516 | "alias": "status", 1517 | "align": "auto", 1518 | "colorMode": "value", 1519 | "colors": [ 1520 | "#F2CC0C", 1521 | "#37872D", 1522 | "#E02F44" 1523 | ], 1524 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1525 | "decimals": 2, 1526 | "mappingType": 1, 1527 | "pattern": "Value #B", 1528 | "thresholds": [ 1529 | "3", 1530 | "4" 1531 | ], 1532 | "type": "string", 1533 | "unit": "short", 1534 | "valueMaps": [ 1535 | { 1536 | "text": "UNKNOWN", 1537 | "value": "0" 1538 | }, 1539 | { 1540 | "text": "DEPOSITED", 1541 | "value": "1" 1542 | }, 1543 | { 1544 | "text": "PENDING", 1545 | "value": "2" 1546 | }, 1547 | { 1548 | "text": "ACTIVE", 1549 | "value": "3" 1550 | }, 1551 | { 1552 | "text": "EXITING", 1553 | "value": "4" 1554 | }, 1555 | { 1556 | "text": "SLASHING", 1557 | "value": "5" 1558 | }, 1559 | { 1560 | "text": "EXITED", 1561 | "value": "6" 1562 | } 1563 | ] 1564 | } 1565 | ], 1566 | "targets": [ 1567 | { 1568 | "expr": "label_replace(max by(pubkey) (validator_balance), \"pubkey\", \"$1\", \"pubkey\", \"(.{10}).*\")", 1569 | "format": "table", 1570 | "instant": true, 1571 | "interval": "", 1572 | "legendFormat": "", 1573 | "refId": "A" 1574 | }, 1575 | { 1576 | "expr": "label_replace(max by(pubkey) (validator_statuses), \"pubkey\", \"$1\", \"pubkey\", \"(.{10}).*\")", 1577 | "format": "table", 1578 | "instant": true, 1579 | "interval": "", 1580 | "legendFormat": "", 1581 | "refId": "B" 1582 | } 1583 | ], 1584 | "timeFrom": null, 1585 | "timeShift": null, 1586 | "title": "Validator main info", 1587 | "transform": "table", 1588 | "transparent": true, 1589 | "type": "table-old" 1590 | }, 1591 | { 1592 | "columns": [], 1593 | "datasource": "Prometheus", 1594 | "description": "This panel will count only the votes done since your validator process started", 1595 | "fieldConfig": { 1596 | "defaults": { 1597 | "custom": {} 1598 | }, 1599 | "overrides": [] 1600 | }, 1601 | "fontSize": "100%", 1602 | "gridPos": { 1603 | "h": 5, 1604 | "w": 8, 1605 | "x": 16, 1606 | "y": 36 1607 | }, 1608 | "id": 20, 1609 | "pageSize": null, 1610 | "pluginVersion": "6.7.2", 1611 | "showHeader": true, 1612 | "sort": { 1613 | "col": null, 1614 | "desc": false 1615 | }, 1616 | "styles": [ 1617 | { 1618 | "alias": "", 1619 | "align": "auto", 1620 | "colorMode": null, 1621 | "colors": [ 1622 | "rgba(245, 54, 54, 0.9)", 1623 | "rgba(237, 129, 40, 0.89)", 1624 | "rgba(50, 172, 45, 0.97)" 1625 | ], 1626 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1627 | "decimals": 2, 1628 | "mappingType": 1, 1629 | "pattern": "Time", 1630 | "thresholds": [], 1631 | "type": "hidden", 1632 | "unit": "short" 1633 | }, 1634 | { 1635 | "alias": "", 1636 | "align": "auto", 1637 | "colorMode": null, 1638 | "colors": [ 1639 | "rgba(245, 54, 54, 0.9)", 1640 | "rgba(237, 129, 40, 0.89)", 1641 | "rgba(50, 172, 45, 0.97)" 1642 | ], 1643 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1644 | "decimals": 2, 1645 | "mappingType": 1, 1646 | "pattern": "pubkey", 1647 | "thresholds": [], 1648 | "type": "string", 1649 | "unit": "short" 1650 | }, 1651 | { 1652 | "alias": "att", 1653 | "align": "auto", 1654 | "colorMode": "value", 1655 | "colors": [ 1656 | "rgba(245, 54, 54, 0.9)", 1657 | "rgba(237, 129, 40, 0.89)", 1658 | "rgba(50, 172, 45, 0.97)" 1659 | ], 1660 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1661 | "decimals": 0, 1662 | "mappingType": 1, 1663 | "pattern": "Value #A", 1664 | "thresholds": [ 1665 | "0", 1666 | "0" 1667 | ], 1668 | "type": "number", 1669 | "unit": "short" 1670 | }, 1671 | { 1672 | "alias": "att fail", 1673 | "align": "auto", 1674 | "colorMode": "value", 1675 | "colors": [ 1676 | "rgba(50, 172, 45, 0.97)", 1677 | "rgba(237, 129, 40, 0.89)", 1678 | "rgba(245, 54, 54, 0.9)" 1679 | ], 1680 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1681 | "decimals": 0, 1682 | "mappingType": 1, 1683 | "pattern": "Value #B", 1684 | "thresholds": [ 1685 | "0", 1686 | "0" 1687 | ], 1688 | "type": "number", 1689 | "unit": "short" 1690 | }, 1691 | { 1692 | "alias": "agg", 1693 | "align": "auto", 1694 | "colorMode": "value", 1695 | "colors": [ 1696 | "rgba(245, 54, 54, 0.9)", 1697 | "rgba(237, 129, 40, 0.89)", 1698 | "rgba(50, 172, 45, 0.97)" 1699 | ], 1700 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1701 | "decimals": 0, 1702 | "mappingType": 1, 1703 | "pattern": "Value #C", 1704 | "thresholds": [ 1705 | "0", 1706 | "0" 1707 | ], 1708 | "type": "number", 1709 | "unit": "short" 1710 | }, 1711 | { 1712 | "alias": "agg fail", 1713 | "align": "auto", 1714 | "colorMode": "value", 1715 | "colors": [ 1716 | "rgba(50, 172, 45, 0.97)", 1717 | "rgba(237, 129, 40, 0.89)", 1718 | "rgba(245, 54, 54, 0.9)" 1719 | ], 1720 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1721 | "decimals": 0, 1722 | "mappingType": 1, 1723 | "pattern": "Value #D", 1724 | "thresholds": [ 1725 | "0", 1726 | "0" 1727 | ], 1728 | "type": "number", 1729 | "unit": "short" 1730 | }, 1731 | { 1732 | "alias": "prop", 1733 | "align": "auto", 1734 | "colorMode": "value", 1735 | "colors": [ 1736 | "rgba(245, 54, 54, 0.9)", 1737 | "rgba(237, 129, 40, 0.89)", 1738 | "rgba(50, 172, 45, 0.97)" 1739 | ], 1740 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1741 | "decimals": 0, 1742 | "mappingType": 1, 1743 | "pattern": "Value #E", 1744 | "thresholds": [ 1745 | "0", 1746 | "0" 1747 | ], 1748 | "type": "number", 1749 | "unit": "short" 1750 | }, 1751 | { 1752 | "alias": "prop fail", 1753 | "align": "auto", 1754 | "colorMode": "value", 1755 | "colors": [ 1756 | "rgba(50, 172, 45, 0.97)", 1757 | "rgba(237, 129, 40, 0.89)", 1758 | "rgba(245, 54, 54, 0.9)" 1759 | ], 1760 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 1761 | "decimals": 0, 1762 | "mappingType": 1, 1763 | "pattern": "Value #F", 1764 | "thresholds": [ 1765 | "0", 1766 | "0" 1767 | ], 1768 | "type": "number", 1769 | "unit": "short" 1770 | } 1771 | ], 1772 | "targets": [ 1773 | { 1774 | "expr": "label_replace(max by(pubkey) (validator_successful_attestations) , \"pubkey\", \"$1\", \"pubkey\", \"(.{10}).*\")", 1775 | "format": "table", 1776 | "instant": true, 1777 | "interval": "", 1778 | "intervalFactor": 1, 1779 | "legendFormat": "", 1780 | "refId": "A" 1781 | }, 1782 | { 1783 | "expr": "label_replace(max by (pubkey)(validator_failed_attestations) , \"pubkey\", \"$1\", \"pubkey\", \"(.{10}).*\")", 1784 | "format": "table", 1785 | "instant": true, 1786 | "interval": "", 1787 | "legendFormat": "", 1788 | "refId": "B" 1789 | }, 1790 | { 1791 | "expr": "label_replace(max by (pubkey)(validator_successful_aggregations) , \"pubkey\", \"$1\", \"pubkey\", \"(.{10}).*\")", 1792 | "format": "table", 1793 | "instant": true, 1794 | "interval": "", 1795 | "legendFormat": "", 1796 | "refId": "C" 1797 | }, 1798 | { 1799 | "expr": "label_replace(max by (pubkey) (validator_failed_aggregations) , \"pubkey\", \"$1\", \"pubkey\", \"(.{10}).*\")", 1800 | "format": "table", 1801 | "instant": true, 1802 | "interval": "", 1803 | "legendFormat": "", 1804 | "refId": "D" 1805 | }, 1806 | { 1807 | "expr": "label_replace(max by (pubkey) (validator_successful_proposals) , \"pubkey\", \"$1\", \"pubkey\", \"(.{10}).*\")", 1808 | "format": "table", 1809 | "instant": true, 1810 | "interval": "", 1811 | "legendFormat": "", 1812 | "refId": "E" 1813 | }, 1814 | { 1815 | "expr": "label_replace(max by (pubkey) (validator_failed_proposals) , \"pubkey\", \"$1\", \"pubkey\", \"(.{10}).*\")", 1816 | "format": "table", 1817 | "instant": true, 1818 | "interval": "", 1819 | "legendFormat": "", 1820 | "refId": "F" 1821 | } 1822 | ], 1823 | "timeFrom": null, 1824 | "timeShift": null, 1825 | "title": "Validator vote summary", 1826 | "transform": "table", 1827 | "transparent": true, 1828 | "type": "table-old" 1829 | }, 1830 | { 1831 | "cacheTimeout": null, 1832 | "colorBackground": true, 1833 | "colorValue": false, 1834 | "colors": [ 1835 | "#299c46", 1836 | "rgba(237, 129, 40, 0.89)", 1837 | "rgb(99, 99, 99)" 1838 | ], 1839 | "datasource": "Prometheus", 1840 | "fieldConfig": { 1841 | "defaults": { 1842 | "custom": {} 1843 | }, 1844 | "overrides": [] 1845 | }, 1846 | "format": "none", 1847 | "gauge": { 1848 | "maxValue": 100, 1849 | "minValue": 0, 1850 | "show": false, 1851 | "thresholdLabels": false, 1852 | "thresholdMarkers": true 1853 | }, 1854 | "gridPos": { 1855 | "h": 1, 1856 | "w": 8, 1857 | "x": 0, 1858 | "y": 41 1859 | }, 1860 | "id": 59, 1861 | "interval": null, 1862 | "links": [], 1863 | "mappingType": 1, 1864 | "mappingTypes": [ 1865 | { 1866 | "name": "value to text", 1867 | "value": 1 1868 | }, 1869 | { 1870 | "name": "range to text", 1871 | "value": 2 1872 | } 1873 | ], 1874 | "maxDataPoints": 100, 1875 | "nullPointMode": "connected", 1876 | "nullText": null, 1877 | "postfix": "", 1878 | "postfixFontSize": "50%", 1879 | "prefix": "", 1880 | "prefixFontSize": "50%", 1881 | "rangeMaps": [ 1882 | { 1883 | "from": "null", 1884 | "text": "N/A", 1885 | "to": "null" 1886 | } 1887 | ], 1888 | "sparkline": { 1889 | "fillColor": "rgba(31, 118, 189, 0.18)", 1890 | "full": false, 1891 | "lineColor": "rgb(31, 120, 193)", 1892 | "show": false, 1893 | "ymax": null, 1894 | "ymin": null 1895 | }, 1896 | "tableColumn": "NODE", 1897 | "targets": [ 1898 | { 1899 | "expr": "1", 1900 | "interval": "", 1901 | "legendFormat": "NODE", 1902 | "refId": "A" 1903 | } 1904 | ], 1905 | "thresholds": "0,0", 1906 | "timeFrom": null, 1907 | "timeShift": null, 1908 | "title": "BOTH", 1909 | "type": "singlestat", 1910 | "valueFontSize": "20%", 1911 | "valueMaps": [ 1912 | { 1913 | "op": "=", 1914 | "text": "", 1915 | "value": "1" 1916 | } 1917 | ], 1918 | "valueName": "avg" 1919 | }, 1920 | { 1921 | "cacheTimeout": null, 1922 | "colorBackground": true, 1923 | "colorValue": false, 1924 | "colors": [ 1925 | "#299c46", 1926 | "rgba(237, 129, 40, 0.89)", 1927 | "#1F60C4" 1928 | ], 1929 | "datasource": "Prometheus", 1930 | "fieldConfig": { 1931 | "defaults": { 1932 | "custom": {} 1933 | }, 1934 | "overrides": [] 1935 | }, 1936 | "format": "none", 1937 | "gauge": { 1938 | "maxValue": 100, 1939 | "minValue": 0, 1940 | "show": false, 1941 | "thresholdLabels": false, 1942 | "thresholdMarkers": true 1943 | }, 1944 | "gridPos": { 1945 | "h": 1, 1946 | "w": 11, 1947 | "x": 8, 1948 | "y": 41 1949 | }, 1950 | "id": 30, 1951 | "interval": null, 1952 | "links": [], 1953 | "mappingType": 1, 1954 | "mappingTypes": [ 1955 | { 1956 | "name": "value to text", 1957 | "value": 1 1958 | }, 1959 | { 1960 | "name": "range to text", 1961 | "value": 2 1962 | } 1963 | ], 1964 | "maxDataPoints": 100, 1965 | "nullPointMode": "connected", 1966 | "nullText": null, 1967 | "postfix": "", 1968 | "postfixFontSize": "50%", 1969 | "prefix": "", 1970 | "prefixFontSize": "50%", 1971 | "rangeMaps": [ 1972 | { 1973 | "from": "null", 1974 | "text": "N/A", 1975 | "to": "null" 1976 | } 1977 | ], 1978 | "sparkline": { 1979 | "fillColor": "rgba(31, 118, 189, 0.18)", 1980 | "full": false, 1981 | "lineColor": "rgb(31, 120, 193)", 1982 | "show": false, 1983 | "ymax": null, 1984 | "ymin": null 1985 | }, 1986 | "tableColumn": "NODE", 1987 | "targets": [ 1988 | { 1989 | "expr": "1", 1990 | "interval": "", 1991 | "legendFormat": "NODE", 1992 | "refId": "A" 1993 | } 1994 | ], 1995 | "thresholds": "0,0", 1996 | "timeFrom": null, 1997 | "timeShift": null, 1998 | "title": "NODE", 1999 | "type": "singlestat", 2000 | "valueFontSize": "20%", 2001 | "valueMaps": [ 2002 | { 2003 | "op": "=", 2004 | "text": "", 2005 | "value": "1" 2006 | } 2007 | ], 2008 | "valueName": "avg" 2009 | }, 2010 | { 2011 | "cacheTimeout": null, 2012 | "colorBackground": true, 2013 | "colorValue": false, 2014 | "colors": [ 2015 | "#299c46", 2016 | "rgba(237, 129, 40, 0.89)", 2017 | "#8F3BB8" 2018 | ], 2019 | "datasource": "Prometheus", 2020 | "decimals": null, 2021 | "fieldConfig": { 2022 | "defaults": { 2023 | "custom": {} 2024 | }, 2025 | "overrides": [] 2026 | }, 2027 | "format": "none", 2028 | "gauge": { 2029 | "maxValue": 100, 2030 | "minValue": 0, 2031 | "show": false, 2032 | "thresholdLabels": false, 2033 | "thresholdMarkers": true 2034 | }, 2035 | "gridPos": { 2036 | "h": 1, 2037 | "w": 5, 2038 | "x": 19, 2039 | "y": 41 2040 | }, 2041 | "id": 41, 2042 | "interval": null, 2043 | "links": [], 2044 | "mappingType": 1, 2045 | "mappingTypes": [ 2046 | { 2047 | "name": "value to text", 2048 | "value": 1 2049 | }, 2050 | { 2051 | "name": "range to text", 2052 | "value": 2 2053 | } 2054 | ], 2055 | "maxDataPoints": 100, 2056 | "nullPointMode": "connected", 2057 | "nullText": null, 2058 | "pluginVersion": "6.7.2", 2059 | "postfix": "", 2060 | "postfixFontSize": "20%", 2061 | "prefix": "", 2062 | "prefixFontSize": "20%", 2063 | "rangeMaps": [ 2064 | { 2065 | "from": "null", 2066 | "text": "N/A", 2067 | "to": "null" 2068 | } 2069 | ], 2070 | "sparkline": { 2071 | "fillColor": "rgba(31, 118, 189, 0.18)", 2072 | "full": false, 2073 | "lineColor": "rgb(31, 120, 193)", 2074 | "show": false, 2075 | "ymax": null, 2076 | "ymin": null 2077 | }, 2078 | "tableColumn": "", 2079 | "targets": [ 2080 | { 2081 | "expr": "1", 2082 | "interval": "", 2083 | "legendFormat": "", 2084 | "refId": "A" 2085 | } 2086 | ], 2087 | "thresholds": "0,0", 2088 | "timeFrom": null, 2089 | "timeShift": null, 2090 | "title": "ALERTS", 2091 | "type": "singlestat", 2092 | "valueFontSize": "20%", 2093 | "valueMaps": [ 2094 | { 2095 | "op": "=", 2096 | "text": "", 2097 | "value": "1" 2098 | } 2099 | ], 2100 | "valueName": "avg" 2101 | }, 2102 | { 2103 | "aliasColors": { 2104 | "CPU beacon node": "red", 2105 | "CPU validator": "purple", 2106 | "beacon node": "rgb(68, 218, 252)", 2107 | "memory beacon node": "rgb(96, 252, 255)", 2108 | "memory validator": "rgb(255, 255, 160)", 2109 | "test": "green", 2110 | "test beacon node": "orange", 2111 | "test validator": "green", 2112 | "validator": "yellow" 2113 | }, 2114 | "bars": false, 2115 | "dashLength": 10, 2116 | "dashes": false, 2117 | "datasource": "Prometheus", 2118 | "fieldConfig": { 2119 | "defaults": { 2120 | "custom": {} 2121 | }, 2122 | "overrides": [] 2123 | }, 2124 | "fill": 5, 2125 | "fillGradient": 0, 2126 | "gridPos": { 2127 | "h": 10, 2128 | "w": 8, 2129 | "x": 0, 2130 | "y": 42 2131 | }, 2132 | "hiddenSeries": false, 2133 | "id": 32, 2134 | "legend": { 2135 | "alignAsTable": false, 2136 | "avg": false, 2137 | "current": true, 2138 | "hideEmpty": false, 2139 | "hideZero": false, 2140 | "max": false, 2141 | "min": false, 2142 | "rightSide": false, 2143 | "show": true, 2144 | "total": false, 2145 | "values": true 2146 | }, 2147 | "lines": true, 2148 | "linewidth": 1, 2149 | "nullPointMode": "null", 2150 | "options": { 2151 | "dataLinks": [] 2152 | }, 2153 | "percentage": true, 2154 | "pluginVersion": "6.7.3", 2155 | "pointradius": 2, 2156 | "points": false, 2157 | "renderer": "flot", 2158 | "seriesOverrides": [ 2159 | { 2160 | "alias": "CPU beacon node", 2161 | "fill": 0, 2162 | "linewidth": 1, 2163 | "yaxis": 2 2164 | }, 2165 | { 2166 | "alias": "CPU validator", 2167 | "fill": 0, 2168 | "linewidth": 1, 2169 | "nullPointMode": "null as zero", 2170 | "yaxis": 2 2171 | } 2172 | ], 2173 | "spaceLength": 10, 2174 | "stack": false, 2175 | "steppedLine": false, 2176 | "targets": [ 2177 | { 2178 | "expr": "avg_over_time(go_memstats_alloc_bytes{job=\"$node_job\"}[1m:5s])", 2179 | "interval": "", 2180 | "legendFormat": "memory {{job}}", 2181 | "refId": "A" 2182 | }, 2183 | { 2184 | "expr": "avg_over_time(go_memstats_alloc_bytes{job=\"$validator_job\"}[1m:5s])", 2185 | "interval": "", 2186 | "legendFormat": "memory {{job}}", 2187 | "refId": "C" 2188 | }, 2189 | { 2190 | "expr": "((process_cpu_seconds_total - process_cpu_seconds_total offset 2m) > 0)*100/120/go_maxprocs", 2191 | "interval": "", 2192 | "legendFormat": "CPU {{job}}", 2193 | "refId": "B" 2194 | } 2195 | ], 2196 | "thresholds": [ 2197 | { 2198 | "colorMode": "critical", 2199 | "fill": true, 2200 | "line": true, 2201 | "op": "gt", 2202 | "value": 4000000000, 2203 | "yaxis": "left" 2204 | } 2205 | ], 2206 | "timeFrom": null, 2207 | "timeRegions": [], 2208 | "timeShift": null, 2209 | "title": "Hardware usage", 2210 | "tooltip": { 2211 | "shared": true, 2212 | "sort": 0, 2213 | "value_type": "cumulative" 2214 | }, 2215 | "type": "graph", 2216 | "xaxis": { 2217 | "buckets": null, 2218 | "mode": "time", 2219 | "name": null, 2220 | "show": true, 2221 | "values": [] 2222 | }, 2223 | "yaxes": [ 2224 | { 2225 | "decimals": null, 2226 | "format": "decbytes", 2227 | "label": "mem usage", 2228 | "logBase": 1, 2229 | "max": null, 2230 | "min": null, 2231 | "show": true 2232 | }, 2233 | { 2234 | "decimals": 1, 2235 | "format": "percent", 2236 | "label": "CPU usage rate", 2237 | "logBase": 1, 2238 | "max": null, 2239 | "min": null, 2240 | "show": true 2241 | } 2242 | ], 2243 | "yaxis": { 2244 | "align": false, 2245 | "alignLevel": null 2246 | } 2247 | }, 2248 | { 2249 | "aliasColors": { 2250 | "Active": "light-green", 2251 | "Exiting": "red", 2252 | "Participation rate": "purple", 2253 | "Pending": "yellow" 2254 | }, 2255 | "bars": false, 2256 | "dashLength": 10, 2257 | "dashes": false, 2258 | "datasource": "Prometheus", 2259 | "description": "This graph is made for trading purpose mostly.\nSupposing that if a lot of validators are exiting, price is gonna dump.\n\nAlso this can prevent to exit while exiting queue is too long, same for depositing while pending queue is too long.\n\n", 2260 | "fieldConfig": { 2261 | "defaults": { 2262 | "custom": {} 2263 | }, 2264 | "overrides": [] 2265 | }, 2266 | "fill": 1, 2267 | "fillGradient": 0, 2268 | "gridPos": { 2269 | "h": 10, 2270 | "w": 8, 2271 | "x": 8, 2272 | "y": 42 2273 | }, 2274 | "hiddenSeries": false, 2275 | "hideTimeOverride": false, 2276 | "id": 46, 2277 | "legend": { 2278 | "alignAsTable": false, 2279 | "avg": false, 2280 | "current": true, 2281 | "max": false, 2282 | "min": false, 2283 | "rightSide": false, 2284 | "show": true, 2285 | "total": false, 2286 | "values": true 2287 | }, 2288 | "lines": true, 2289 | "linewidth": 1, 2290 | "nullPointMode": "null", 2291 | "options": { 2292 | "dataLinks": [] 2293 | }, 2294 | "percentage": false, 2295 | "pointradius": 2, 2296 | "points": false, 2297 | "renderer": "flot", 2298 | "seriesOverrides": [ 2299 | { 2300 | "alias": "Participation rate", 2301 | "fill": 0, 2302 | "linewidth": 2, 2303 | "yaxis": 2 2304 | } 2305 | ], 2306 | "spaceLength": 10, 2307 | "stack": false, 2308 | "steppedLine": false, 2309 | "targets": [ 2310 | { 2311 | "expr": "validators_total_balance{state=\"Active\"} / 10e8", 2312 | "interval": "", 2313 | "legendFormat": "Active", 2314 | "refId": "A" 2315 | }, 2316 | { 2317 | "expr": "validators_total_balance{state=\"Pending\"} / 10e8", 2318 | "interval": "", 2319 | "legendFormat": "Pending", 2320 | "refId": "B" 2321 | }, 2322 | { 2323 | "expr": "validators_total_balance{state=\"Exiting\"} / 10e8", 2324 | "interval": "", 2325 | "legendFormat": "Exiting", 2326 | "refId": "C" 2327 | }, 2328 | { 2329 | "expr": "total_voted_target_balances/total_eligible_balances*100", 2330 | "instant": false, 2331 | "interval": "", 2332 | "legendFormat": "Participation rate", 2333 | "refId": "D" 2334 | } 2335 | ], 2336 | "thresholds": [], 2337 | "timeFrom": "30d", 2338 | "timeRegions": [], 2339 | "timeShift": null, 2340 | "title": "Balance validators status and participation rate", 2341 | "tooltip": { 2342 | "shared": true, 2343 | "sort": 0, 2344 | "value_type": "individual" 2345 | }, 2346 | "type": "graph", 2347 | "xaxis": { 2348 | "buckets": null, 2349 | "mode": "time", 2350 | "name": null, 2351 | "show": true, 2352 | "values": [] 2353 | }, 2354 | "yaxes": [ 2355 | { 2356 | "format": "short", 2357 | "label": "ETH", 2358 | "logBase": 1, 2359 | "max": null, 2360 | "min": null, 2361 | "show": true 2362 | }, 2363 | { 2364 | "decimals": null, 2365 | "format": "percent", 2366 | "label": "", 2367 | "logBase": 1, 2368 | "max": "100", 2369 | "min": "0", 2370 | "show": true 2371 | } 2372 | ], 2373 | "yaxis": { 2374 | "align": false, 2375 | "alignLevel": null 2376 | } 2377 | }, 2378 | { 2379 | "cacheTimeout": null, 2380 | "datasource": "Prometheus", 2381 | "fieldConfig": { 2382 | "defaults": { 2383 | "custom": {}, 2384 | "decimals": 1, 2385 | "mappings": [], 2386 | "nullValueMode": "connected", 2387 | "thresholds": { 2388 | "mode": "absolute", 2389 | "steps": [ 2390 | { 2391 | "color": "red", 2392 | "value": null 2393 | }, 2394 | { 2395 | "color": "#FADE2A", 2396 | "value": 0.17 2397 | }, 2398 | { 2399 | "color": "#299c46", 2400 | "value": 11.9 2401 | } 2402 | ] 2403 | }, 2404 | "unit": "h" 2405 | }, 2406 | "overrides": [] 2407 | }, 2408 | "gridPos": { 2409 | "h": 2, 2410 | "w": 3, 2411 | "x": 16, 2412 | "y": 42 2413 | }, 2414 | "id": 56, 2415 | "links": [], 2416 | "options": { 2417 | "colorMode": "background", 2418 | "graphMode": "none", 2419 | "justifyMode": "auto", 2420 | "orientation": "horizontal", 2421 | "reduceOptions": { 2422 | "calcs": [ 2423 | "lastNotNull" 2424 | ], 2425 | "values": false 2426 | } 2427 | }, 2428 | "pluginVersion": "7.0.1", 2429 | "targets": [ 2430 | { 2431 | "expr": "(time()-process_start_time_seconds{job=\"$node_job\"})/3600", 2432 | "instant": true, 2433 | "interval": "", 2434 | "legendFormat": "", 2435 | "refId": "A" 2436 | } 2437 | ], 2438 | "timeFrom": null, 2439 | "timeShift": null, 2440 | "title": "Node process started", 2441 | "type": "stat" 2442 | }, 2443 | { 2444 | "dashboardFilter": "", 2445 | "dashboardTags": [], 2446 | "datasource": "Prometheus", 2447 | "fieldConfig": { 2448 | "defaults": { 2449 | "custom": {} 2450 | }, 2451 | "overrides": [] 2452 | }, 2453 | "folderId": null, 2454 | "gridPos": { 2455 | "h": 10, 2456 | "w": 5, 2457 | "x": 19, 2458 | "y": 42 2459 | }, 2460 | "id": 24, 2461 | "limit": 10, 2462 | "nameFilter": "", 2463 | "onlyAlertsOnDashboard": true, 2464 | "show": "current", 2465 | "sortOrder": 3, 2466 | "stateFilter": [], 2467 | "timeFrom": null, 2468 | "timeShift": null, 2469 | "title": "All alerts", 2470 | "type": "alertlist" 2471 | }, 2472 | { 2473 | "cacheTimeout": null, 2474 | "datasource": "Prometheus", 2475 | "fieldConfig": { 2476 | "defaults": { 2477 | "custom": {}, 2478 | "mappings": [], 2479 | "nullValueMode": "connected", 2480 | "thresholds": { 2481 | "mode": "absolute", 2482 | "steps": [ 2483 | { 2484 | "color": "#299c46", 2485 | "value": null 2486 | }, 2487 | { 2488 | "color": "#eab839", 2489 | "value": 5 2490 | }, 2491 | { 2492 | "color": "red", 2493 | "value": 20 2494 | } 2495 | ] 2496 | }, 2497 | "unit": "none" 2498 | }, 2499 | "overrides": [] 2500 | }, 2501 | "gridPos": { 2502 | "h": 2, 2503 | "w": 3, 2504 | "x": 16, 2505 | "y": 44 2506 | }, 2507 | "id": 26, 2508 | "links": [], 2509 | "options": { 2510 | "colorMode": "background", 2511 | "graphMode": "none", 2512 | "justifyMode": "auto", 2513 | "orientation": "horizontal", 2514 | "reduceOptions": { 2515 | "calcs": [ 2516 | "lastNotNull" 2517 | ], 2518 | "values": false 2519 | } 2520 | }, 2521 | "pluginVersion": "7.0.1", 2522 | "targets": [ 2523 | { 2524 | "expr": "beacon_clock_time_slot-beacon_head_slot", 2525 | "instant": true, 2526 | "interval": "", 2527 | "legendFormat": "Slots behind", 2528 | "refId": "A" 2529 | } 2530 | ], 2531 | "timeFrom": null, 2532 | "timeShift": null, 2533 | "title": "Slots behind", 2534 | "type": "stat" 2535 | }, 2536 | { 2537 | "cacheTimeout": null, 2538 | "datasource": "Prometheus", 2539 | "fieldConfig": { 2540 | "defaults": { 2541 | "custom": {}, 2542 | "mappings": [], 2543 | "nullValueMode": "connected", 2544 | "thresholds": { 2545 | "mode": "absolute", 2546 | "steps": [ 2547 | { 2548 | "color": "red", 2549 | "value": null 2550 | }, 2551 | { 2552 | "color": "#F2CC0C", 2553 | "value": 5 2554 | }, 2555 | { 2556 | "color": "#299c46", 2557 | "value": 10 2558 | } 2559 | ] 2560 | }, 2561 | "unit": "none" 2562 | }, 2563 | "overrides": [] 2564 | }, 2565 | "gridPos": { 2566 | "h": 2, 2567 | "w": 3, 2568 | "x": 16, 2569 | "y": 46 2570 | }, 2571 | "id": 34, 2572 | "links": [], 2573 | "options": { 2574 | "colorMode": "background", 2575 | "graphMode": "none", 2576 | "justifyMode": "auto", 2577 | "orientation": "horizontal", 2578 | "reduceOptions": { 2579 | "calcs": [ 2580 | "lastNotNull" 2581 | ], 2582 | "values": false 2583 | } 2584 | }, 2585 | "pluginVersion": "7.0.1", 2586 | "targets": [ 2587 | { 2588 | "expr": "p2p_peer_count{state=\"Connected\"}", 2589 | "instant": true, 2590 | "interval": "", 2591 | "legendFormat": "", 2592 | "refId": "A" 2593 | } 2594 | ], 2595 | "timeFrom": null, 2596 | "timeShift": null, 2597 | "title": "Peers connected", 2598 | "type": "stat" 2599 | }, 2600 | { 2601 | "datasource": "Prometheus", 2602 | "description": "This panel won't have consistant values during the first hour of the node started process", 2603 | "fieldConfig": { 2604 | "defaults": { 2605 | "custom": {}, 2606 | "decimals": 0, 2607 | "displayName": "", 2608 | "mappings": [ 2609 | { 2610 | "from": "", 2611 | "id": 1, 2612 | "operator": "", 2613 | "text": "0", 2614 | "to": "", 2615 | "type": 1, 2616 | "value": "null" 2617 | } 2618 | ], 2619 | "max": 100, 2620 | "min": 0, 2621 | "thresholds": { 2622 | "mode": "absolute", 2623 | "steps": [ 2624 | { 2625 | "color": "green", 2626 | "value": null 2627 | }, 2628 | { 2629 | "color": "#EAB839", 2630 | "value": 25 2631 | }, 2632 | { 2633 | "color": "red", 2634 | "value": 50 2635 | } 2636 | ] 2637 | }, 2638 | "unit": "short" 2639 | }, 2640 | "overrides": [] 2641 | }, 2642 | "gridPos": { 2643 | "h": 4, 2644 | "w": 3, 2645 | "x": 16, 2646 | "y": 48 2647 | }, 2648 | "id": 40, 2649 | "options": { 2650 | "displayMode": "lcd", 2651 | "orientation": "horizontal", 2652 | "reduceOptions": { 2653 | "calcs": [ 2654 | "last" 2655 | ], 2656 | "values": false 2657 | }, 2658 | "showUnfilled": true 2659 | }, 2660 | "pluginVersion": "7.0.1", 2661 | "targets": [ 2662 | { 2663 | "expr": "sum(delta(log_entries_total{job=\"$node_job\", level=\"error\"}[1h]) > 0)", 2664 | "instant": false, 2665 | "interval": "", 2666 | "legendFormat": "error", 2667 | "refId": "A" 2668 | }, 2669 | { 2670 | "expr": "sum(delta(log_entries_total{job=\"$node_job\", level=\"warning\"}[1h]) > 0)", 2671 | "instant": false, 2672 | "interval": "", 2673 | "legendFormat": "warning", 2674 | "refId": "B" 2675 | } 2676 | ], 2677 | "timeFrom": null, 2678 | "timeShift": null, 2679 | "title": "Hourly log type counter", 2680 | "type": "bargauge" 2681 | }, 2682 | { 2683 | "alert": { 2684 | "alertRuleTags": {}, 2685 | "conditions": [ 2686 | { 2687 | "evaluator": { 2688 | "params": [ 2689 | 0.1 2690 | ], 2691 | "type": "lt" 2692 | }, 2693 | "operator": { 2694 | "type": "and" 2695 | }, 2696 | "query": { 2697 | "params": [ 2698 | "A", 2699 | "10s", 2700 | "now" 2701 | ] 2702 | }, 2703 | "reducer": { 2704 | "params": [], 2705 | "type": "last" 2706 | }, 2707 | "type": "query" 2708 | } 2709 | ], 2710 | "executionErrorState": "alerting", 2711 | "for": "0m", 2712 | "frequency": "1m", 2713 | "handler": 1, 2714 | "message": "One of the two process just restarted.", 2715 | "name": "WARN NODE/VALIDATOR: The process just restarted", 2716 | "noDataState": "no_data", 2717 | "notifications": [ 2718 | { 2719 | "uid": "USY-LmRGz" 2720 | } 2721 | ] 2722 | }, 2723 | "aliasColors": {}, 2724 | "bars": false, 2725 | "dashLength": 10, 2726 | "dashes": false, 2727 | "datasource": "Prometheus", 2728 | "description": "This alert is useful only for people who has automatic restart of the process after crash. \nThis can be made for example by using the prysm.bat file on windows with \"set PRYSM_AUTORESTART=true&\", or with docker with \"--restart always\"", 2729 | "fieldConfig": { 2730 | "defaults": { 2731 | "custom": {} 2732 | }, 2733 | "overrides": [] 2734 | }, 2735 | "fill": 1, 2736 | "fillGradient": 0, 2737 | "gridPos": { 2738 | "h": 1, 2739 | "w": 5, 2740 | "x": 19, 2741 | "y": 52 2742 | }, 2743 | "hiddenSeries": false, 2744 | "id": 61, 2745 | "legend": { 2746 | "avg": false, 2747 | "current": false, 2748 | "max": false, 2749 | "min": false, 2750 | "show": true, 2751 | "total": false, 2752 | "values": false 2753 | }, 2754 | "lines": true, 2755 | "linewidth": 1, 2756 | "nullPointMode": "null", 2757 | "options": { 2758 | "dataLinks": [] 2759 | }, 2760 | "percentage": false, 2761 | "pointradius": 2, 2762 | "points": false, 2763 | "renderer": "flot", 2764 | "seriesOverrides": [], 2765 | "spaceLength": 10, 2766 | "stack": false, 2767 | "steppedLine": false, 2768 | "targets": [ 2769 | { 2770 | "expr": "(time()-process_start_time_seconds{job=\"beacon node\"})/3600", 2771 | "interval": "", 2772 | "legendFormat": "{{job}}", 2773 | "refId": "A" 2774 | }, 2775 | { 2776 | "expr": "(time()-process_start_time_seconds{job=\"validator\"})/3600", 2777 | "interval": "", 2778 | "legendFormat": "", 2779 | "refId": "B" 2780 | } 2781 | ], 2782 | "thresholds": [ 2783 | { 2784 | "colorMode": "critical", 2785 | "fill": true, 2786 | "line": true, 2787 | "op": "lt", 2788 | "value": 0.1 2789 | } 2790 | ], 2791 | "timeFrom": null, 2792 | "timeRegions": [], 2793 | "timeShift": null, 2794 | "title": "Warn: The process just restarted", 2795 | "tooltip": { 2796 | "shared": true, 2797 | "sort": 0, 2798 | "value_type": "individual" 2799 | }, 2800 | "type": "graph", 2801 | "xaxis": { 2802 | "buckets": null, 2803 | "mode": "time", 2804 | "name": null, 2805 | "show": true, 2806 | "values": [] 2807 | }, 2808 | "yaxes": [ 2809 | { 2810 | "decimals": 1, 2811 | "format": "short", 2812 | "label": null, 2813 | "logBase": 1, 2814 | "max": null, 2815 | "min": null, 2816 | "show": true 2817 | }, 2818 | { 2819 | "format": "short", 2820 | "label": null, 2821 | "logBase": 1, 2822 | "max": null, 2823 | "min": null, 2824 | "show": true 2825 | } 2826 | ], 2827 | "yaxis": { 2828 | "align": false, 2829 | "alignLevel": null 2830 | } 2831 | }, 2832 | { 2833 | "alert": { 2834 | "alertRuleTags": {}, 2835 | "conditions": [ 2836 | { 2837 | "evaluator": { 2838 | "params": [ 2839 | 50 2840 | ], 2841 | "type": "gt" 2842 | }, 2843 | "operator": { 2844 | "type": "and" 2845 | }, 2846 | "query": { 2847 | "params": [ 2848 | "A", 2849 | "5m", 2850 | "now" 2851 | ] 2852 | }, 2853 | "reducer": { 2854 | "params": [], 2855 | "type": "avg" 2856 | }, 2857 | "type": "query" 2858 | } 2859 | ], 2860 | "executionErrorState": "alerting", 2861 | "for": "0", 2862 | "frequency": "1m", 2863 | "handler": 1, 2864 | "message": "NODE ALERT: MORE THAN 50 SLOTS BEHIND THAN THE CHAIN", 2865 | "name": "NODE: 50 slots behind", 2866 | "noDataState": "ok", 2867 | "notifications": [ 2868 | { 2869 | "uid": "USY-LmRGz" 2870 | } 2871 | ] 2872 | }, 2873 | "aliasColors": {}, 2874 | "bars": false, 2875 | "dashLength": 10, 2876 | "dashes": false, 2877 | "datasource": "Prometheus", 2878 | "fieldConfig": { 2879 | "defaults": { 2880 | "custom": {} 2881 | }, 2882 | "overrides": [] 2883 | }, 2884 | "fill": 1, 2885 | "fillGradient": 0, 2886 | "gridPos": { 2887 | "h": 1, 2888 | "w": 5, 2889 | "x": 19, 2890 | "y": 53 2891 | }, 2892 | "hiddenSeries": false, 2893 | "id": 28, 2894 | "legend": { 2895 | "avg": false, 2896 | "current": false, 2897 | "max": false, 2898 | "min": false, 2899 | "show": true, 2900 | "total": false, 2901 | "values": false 2902 | }, 2903 | "lines": true, 2904 | "linewidth": 1, 2905 | "nullPointMode": "null", 2906 | "options": { 2907 | "dataLinks": [] 2908 | }, 2909 | "percentage": false, 2910 | "pointradius": 2, 2911 | "points": false, 2912 | "renderer": "flot", 2913 | "seriesOverrides": [], 2914 | "spaceLength": 10, 2915 | "stack": false, 2916 | "steppedLine": false, 2917 | "targets": [ 2918 | { 2919 | "expr": "beacon_clock_time_slot-beacon_head_slot", 2920 | "interval": "", 2921 | "legendFormat": "node slots behind", 2922 | "refId": "A" 2923 | } 2924 | ], 2925 | "thresholds": [ 2926 | { 2927 | "colorMode": "critical", 2928 | "fill": true, 2929 | "line": true, 2930 | "op": "gt", 2931 | "value": 50 2932 | } 2933 | ], 2934 | "timeFrom": null, 2935 | "timeRegions": [], 2936 | "timeShift": null, 2937 | "title": "Alert: 50 slots behind", 2938 | "tooltip": { 2939 | "shared": true, 2940 | "sort": 0, 2941 | "value_type": "individual" 2942 | }, 2943 | "type": "graph", 2944 | "xaxis": { 2945 | "buckets": null, 2946 | "mode": "time", 2947 | "name": null, 2948 | "show": true, 2949 | "values": [] 2950 | }, 2951 | "yaxes": [ 2952 | { 2953 | "format": "short", 2954 | "label": null, 2955 | "logBase": 1, 2956 | "max": null, 2957 | "min": null, 2958 | "show": true 2959 | }, 2960 | { 2961 | "format": "short", 2962 | "label": null, 2963 | "logBase": 1, 2964 | "max": null, 2965 | "min": null, 2966 | "show": true 2967 | } 2968 | ], 2969 | "yaxis": { 2970 | "align": false, 2971 | "alignLevel": null 2972 | } 2973 | }, 2974 | { 2975 | "alert": { 2976 | "alertRuleTags": {}, 2977 | "conditions": [ 2978 | { 2979 | "evaluator": { 2980 | "params": [ 2981 | 0.9 2982 | ], 2983 | "type": "lt" 2984 | }, 2985 | "operator": { 2986 | "type": "and" 2987 | }, 2988 | "query": { 2989 | "params": [ 2990 | "A", 2991 | "5m", 2992 | "now" 2993 | ] 2994 | }, 2995 | "reducer": { 2996 | "params": [], 2997 | "type": "avg" 2998 | }, 2999 | "type": "query" 3000 | } 3001 | ], 3002 | "executionErrorState": "alerting", 3003 | "for": "5m", 3004 | "frequency": "1m", 3005 | "handler": 1, 3006 | "message": "NODE/VALIDATOR: THE NODE OR VALIDATOR IS DOWN FOR MORE THAN 1 MINUTE", 3007 | "name": "NODE/VALIDATOR: Process down", 3008 | "noDataState": "no_data", 3009 | "notifications": [ 3010 | { 3011 | "uid": "USY-LmRGz" 3012 | } 3013 | ] 3014 | }, 3015 | "aliasColors": {}, 3016 | "bars": false, 3017 | "dashLength": 10, 3018 | "dashes": false, 3019 | "datasource": "Prometheus", 3020 | "fieldConfig": { 3021 | "defaults": { 3022 | "custom": {} 3023 | }, 3024 | "overrides": [] 3025 | }, 3026 | "fill": 1, 3027 | "fillGradient": 0, 3028 | "gridPos": { 3029 | "h": 1, 3030 | "w": 5, 3031 | "x": 19, 3032 | "y": 54 3033 | }, 3034 | "hiddenSeries": false, 3035 | "id": 44, 3036 | "legend": { 3037 | "alignAsTable": false, 3038 | "avg": false, 3039 | "current": false, 3040 | "max": false, 3041 | "min": false, 3042 | "show": true, 3043 | "total": false, 3044 | "values": false 3045 | }, 3046 | "lines": true, 3047 | "linewidth": 1, 3048 | "nullPointMode": "null", 3049 | "options": { 3050 | "dataLinks": [] 3051 | }, 3052 | "percentage": false, 3053 | "pointradius": 2, 3054 | "points": false, 3055 | "renderer": "flot", 3056 | "seriesOverrides": [], 3057 | "spaceLength": 10, 3058 | "stack": false, 3059 | "steppedLine": false, 3060 | "targets": [ 3061 | { 3062 | "expr": "up{job=\"beacon node\"}", 3063 | "hide": false, 3064 | "interval": "", 3065 | "intervalFactor": 1, 3066 | "legendFormat": "beacon node", 3067 | "refId": "A" 3068 | }, 3069 | { 3070 | "expr": "up{job=\"validator\"}", 3071 | "interval": "", 3072 | "legendFormat": "validator", 3073 | "refId": "B" 3074 | } 3075 | ], 3076 | "thresholds": [ 3077 | { 3078 | "colorMode": "critical", 3079 | "fill": true, 3080 | "line": true, 3081 | "op": "lt", 3082 | "value": 0.9 3083 | } 3084 | ], 3085 | "timeFrom": null, 3086 | "timeRegions": [], 3087 | "timeShift": null, 3088 | "title": "Alert: Process down", 3089 | "tooltip": { 3090 | "shared": true, 3091 | "sort": 0, 3092 | "value_type": "individual" 3093 | }, 3094 | "type": "graph", 3095 | "xaxis": { 3096 | "buckets": null, 3097 | "mode": "time", 3098 | "name": null, 3099 | "show": true, 3100 | "values": [] 3101 | }, 3102 | "yaxes": [ 3103 | { 3104 | "format": "short", 3105 | "label": null, 3106 | "logBase": 1, 3107 | "max": null, 3108 | "min": null, 3109 | "show": true 3110 | }, 3111 | { 3112 | "format": "short", 3113 | "label": null, 3114 | "logBase": 1, 3115 | "max": null, 3116 | "min": null, 3117 | "show": true 3118 | } 3119 | ], 3120 | "yaxis": { 3121 | "align": false, 3122 | "alignLevel": null 3123 | } 3124 | }, 3125 | { 3126 | "alert": { 3127 | "alertRuleTags": {}, 3128 | "conditions": [ 3129 | { 3130 | "evaluator": { 3131 | "params": [ 3132 | 0.000001 3133 | ], 3134 | "type": "lt" 3135 | }, 3136 | "operator": { 3137 | "type": "and" 3138 | }, 3139 | "query": { 3140 | "params": [ 3141 | "A", 3142 | "10s", 3143 | "now" 3144 | ] 3145 | }, 3146 | "reducer": { 3147 | "params": [], 3148 | "type": "last" 3149 | }, 3150 | "type": "query" 3151 | }, 3152 | { 3153 | "evaluator": { 3154 | "params": [ 3155 | -10 3156 | ], 3157 | "type": "gt" 3158 | }, 3159 | "operator": { 3160 | "type": "and" 3161 | }, 3162 | "query": { 3163 | "params": [ 3164 | "A", 3165 | "10s", 3166 | "now" 3167 | ] 3168 | }, 3169 | "reducer": { 3170 | "params": [], 3171 | "type": "last" 3172 | }, 3173 | "type": "query" 3174 | } 3175 | ], 3176 | "executionErrorState": "alerting", 3177 | "for": "0m", 3178 | "frequency": "1m", 3179 | "handler": 1, 3180 | "message": "VALIDATOR ALERT: THE EARNING IN THE LAST HOUR IS LESS THAN 0", 3181 | "name": "VALIDATOR: Hourly earning <= 0", 3182 | "noDataState": "ok", 3183 | "notifications": [ 3184 | { 3185 | "uid": "USY-LmRGz" 3186 | } 3187 | ] 3188 | }, 3189 | "aliasColors": {}, 3190 | "bars": false, 3191 | "dashLength": 10, 3192 | "dashes": false, 3193 | "datasource": "Prometheus", 3194 | "fieldConfig": { 3195 | "defaults": { 3196 | "custom": {} 3197 | }, 3198 | "overrides": [] 3199 | }, 3200 | "fill": 1, 3201 | "fillGradient": 0, 3202 | "gridPos": { 3203 | "h": 1, 3204 | "w": 5, 3205 | "x": 19, 3206 | "y": 55 3207 | }, 3208 | "hiddenSeries": false, 3209 | "id": 48, 3210 | "interval": "", 3211 | "legend": { 3212 | "avg": false, 3213 | "current": false, 3214 | "max": false, 3215 | "min": false, 3216 | "show": true, 3217 | "total": false, 3218 | "values": false 3219 | }, 3220 | "lines": true, 3221 | "linewidth": 1, 3222 | "nullPointMode": "null", 3223 | "options": { 3224 | "dataLinks": [] 3225 | }, 3226 | "percentage": false, 3227 | "pointradius": 2, 3228 | "points": false, 3229 | "renderer": "flot", 3230 | "seriesOverrides": [], 3231 | "spaceLength": 10, 3232 | "stack": false, 3233 | "steppedLine": false, 3234 | "targets": [ 3235 | { 3236 | "expr": "sum(validator_balance) - sum(validator_balance offset 1h) - count(validator_balance > 16)*32 + count(validator_balance offset 1h > 0)*32", 3237 | "instant": false, 3238 | "interval": "", 3239 | "legendFormat": "validators earning on 1h", 3240 | "refId": "A" 3241 | } 3242 | ], 3243 | "thresholds": [ 3244 | { 3245 | "colorMode": "critical", 3246 | "fill": true, 3247 | "line": true, 3248 | "op": "lt", 3249 | "value": 0.000001 3250 | } 3251 | ], 3252 | "timeFrom": null, 3253 | "timeRegions": [], 3254 | "timeShift": null, 3255 | "title": "Alert: Hourly earning <= 0", 3256 | "tooltip": { 3257 | "shared": true, 3258 | "sort": 0, 3259 | "value_type": "individual" 3260 | }, 3261 | "type": "graph", 3262 | "xaxis": { 3263 | "buckets": null, 3264 | "mode": "time", 3265 | "name": null, 3266 | "show": true, 3267 | "values": [] 3268 | }, 3269 | "yaxes": [ 3270 | { 3271 | "decimals": 8, 3272 | "format": "short", 3273 | "label": "", 3274 | "logBase": 1, 3275 | "max": null, 3276 | "min": null, 3277 | "show": true 3278 | }, 3279 | { 3280 | "format": "short", 3281 | "label": null, 3282 | "logBase": 1, 3283 | "max": null, 3284 | "min": null, 3285 | "show": true 3286 | } 3287 | ], 3288 | "yaxis": { 3289 | "align": false, 3290 | "alignLevel": null 3291 | } 3292 | }, 3293 | { 3294 | "alert": { 3295 | "alertRuleTags": {}, 3296 | "conditions": [ 3297 | { 3298 | "evaluator": { 3299 | "params": [ 3300 | 50 3301 | ], 3302 | "type": "gt" 3303 | }, 3304 | "operator": { 3305 | "type": "and" 3306 | }, 3307 | "query": { 3308 | "params": [ 3309 | "A", 3310 | "10s", 3311 | "now" 3312 | ] 3313 | }, 3314 | "reducer": { 3315 | "params": [], 3316 | "type": "avg" 3317 | }, 3318 | "type": "query" 3319 | }, 3320 | { 3321 | "evaluator": { 3322 | "params": [ 3323 | 100 3324 | ], 3325 | "type": "gt" 3326 | }, 3327 | "operator": { 3328 | "type": "or" 3329 | }, 3330 | "query": { 3331 | "params": [ 3332 | "B", 3333 | "10s", 3334 | "now" 3335 | ] 3336 | }, 3337 | "reducer": { 3338 | "params": [], 3339 | "type": "avg" 3340 | }, 3341 | "type": "query" 3342 | } 3343 | ], 3344 | "executionErrorState": "alerting", 3345 | "for": "0m", 3346 | "frequency": "1m", 3347 | "handler": 1, 3348 | "message": "NODE ALERT: MORE THAN 50 ERRORS OR 100 WARNINGS IN THE LAST HOUR", 3349 | "name": "NODE: 50 errors or 100 warns in 1h", 3350 | "noDataState": "ok", 3351 | "notifications": [ 3352 | { 3353 | "uid": "USY-LmRGz" 3354 | } 3355 | ] 3356 | }, 3357 | "aliasColors": {}, 3358 | "bars": false, 3359 | "dashLength": 10, 3360 | "dashes": false, 3361 | "datasource": "Prometheus", 3362 | "fieldConfig": { 3363 | "defaults": { 3364 | "custom": {} 3365 | }, 3366 | "overrides": [] 3367 | }, 3368 | "fill": 1, 3369 | "fillGradient": 0, 3370 | "gridPos": { 3371 | "h": 1, 3372 | "w": 5, 3373 | "x": 19, 3374 | "y": 56 3375 | }, 3376 | "hiddenSeries": false, 3377 | "id": 52, 3378 | "legend": { 3379 | "avg": false, 3380 | "current": false, 3381 | "max": false, 3382 | "min": false, 3383 | "show": true, 3384 | "total": false, 3385 | "values": false 3386 | }, 3387 | "lines": true, 3388 | "linewidth": 1, 3389 | "nullPointMode": "null", 3390 | "options": { 3391 | "dataLinks": [] 3392 | }, 3393 | "percentage": false, 3394 | "pluginVersion": "6.7.2", 3395 | "pointradius": 2, 3396 | "points": false, 3397 | "renderer": "flot", 3398 | "seriesOverrides": [], 3399 | "spaceLength": 10, 3400 | "stack": false, 3401 | "steppedLine": false, 3402 | "targets": [ 3403 | { 3404 | "expr": "sum(delta(log_entries_total{job=\"beacon node\", level=\"error\"}[1h]) > 0) ", 3405 | "instant": false, 3406 | "interval": "", 3407 | "legendFormat": "errors", 3408 | "refId": "A" 3409 | }, 3410 | { 3411 | "expr": "sum(delta(log_entries_total{job=\"beacon node\", level=\"warning\"}[1h]) > 0)", 3412 | "instant": false, 3413 | "interval": "", 3414 | "legendFormat": "warnings", 3415 | "refId": "B" 3416 | } 3417 | ], 3418 | "thresholds": [ 3419 | { 3420 | "colorMode": "critical", 3421 | "fill": true, 3422 | "line": true, 3423 | "op": "gt", 3424 | "value": 50 3425 | } 3426 | ], 3427 | "timeFrom": null, 3428 | "timeRegions": [], 3429 | "timeShift": null, 3430 | "title": "Alert: 50 errors or 100 warns in 1h", 3431 | "tooltip": { 3432 | "shared": true, 3433 | "sort": 0, 3434 | "value_type": "individual" 3435 | }, 3436 | "type": "graph", 3437 | "xaxis": { 3438 | "buckets": null, 3439 | "mode": "time", 3440 | "name": null, 3441 | "show": true, 3442 | "values": [] 3443 | }, 3444 | "yaxes": [ 3445 | { 3446 | "format": "short", 3447 | "label": null, 3448 | "logBase": 1, 3449 | "max": null, 3450 | "min": null, 3451 | "show": true 3452 | }, 3453 | { 3454 | "format": "short", 3455 | "label": null, 3456 | "logBase": 1, 3457 | "max": null, 3458 | "min": null, 3459 | "show": true 3460 | } 3461 | ], 3462 | "yaxis": { 3463 | "align": false, 3464 | "alignLevel": null 3465 | } 3466 | }, 3467 | { 3468 | "alert": { 3469 | "alertRuleTags": {}, 3470 | "conditions": [ 3471 | { 3472 | "evaluator": { 3473 | "params": [ 3474 | 4.9, 3475 | 5.1 3476 | ], 3477 | "type": "within_range" 3478 | }, 3479 | "operator": { 3480 | "type": "and" 3481 | }, 3482 | "query": { 3483 | "params": [ 3484 | "A", 3485 | "10s", 3486 | "now" 3487 | ] 3488 | }, 3489 | "reducer": { 3490 | "params": [], 3491 | "type": "avg" 3492 | }, 3493 | "type": "query" 3494 | } 3495 | ], 3496 | "executionErrorState": "alerting", 3497 | "for": "0m", 3498 | "frequency": "1m", 3499 | "handler": 1, 3500 | "message": "VALIDATOR ALERT: YOUR VALIDATOR HAS BEEN SLASHED", 3501 | "name": "VALIDATOR: Validator has been slashed", 3502 | "noDataState": "ok", 3503 | "notifications": [ 3504 | { 3505 | "uid": "USY-LmRGz" 3506 | } 3507 | ] 3508 | }, 3509 | "aliasColors": {}, 3510 | "bars": false, 3511 | "dashLength": 10, 3512 | "dashes": false, 3513 | "datasource": "Prometheus", 3514 | "fieldConfig": { 3515 | "defaults": { 3516 | "custom": {} 3517 | }, 3518 | "overrides": [] 3519 | }, 3520 | "fill": 1, 3521 | "fillGradient": 0, 3522 | "gridPos": { 3523 | "h": 1, 3524 | "w": 5, 3525 | "x": 19, 3526 | "y": 57 3527 | }, 3528 | "hiddenSeries": false, 3529 | "id": 50, 3530 | "legend": { 3531 | "avg": false, 3532 | "current": false, 3533 | "max": false, 3534 | "min": false, 3535 | "show": true, 3536 | "total": false, 3537 | "values": false 3538 | }, 3539 | "lines": true, 3540 | "linewidth": 1, 3541 | "nullPointMode": "null", 3542 | "options": { 3543 | "dataLinks": [] 3544 | }, 3545 | "percentage": false, 3546 | "pointradius": 2, 3547 | "points": false, 3548 | "renderer": "flot", 3549 | "seriesOverrides": [], 3550 | "spaceLength": 10, 3551 | "stack": false, 3552 | "steppedLine": false, 3553 | "targets": [ 3554 | { 3555 | "expr": "label_replace(validator_statuses, \"pubkey\", \"$1\", \"pubkey\", \"(.{10}).*\")", 3556 | "interval": "", 3557 | "legendFormat": "{{pubkey}}", 3558 | "refId": "A" 3559 | } 3560 | ], 3561 | "thresholds": [ 3562 | { 3563 | "colorMode": "critical", 3564 | "fill": true, 3565 | "line": true, 3566 | "op": "gt", 3567 | "value": 4.9 3568 | }, 3569 | { 3570 | "colorMode": "critical", 3571 | "fill": true, 3572 | "line": true, 3573 | "op": "lt", 3574 | "value": 5.1 3575 | } 3576 | ], 3577 | "timeFrom": null, 3578 | "timeRegions": [], 3579 | "timeShift": null, 3580 | "title": "Alert: Validator has been slashed", 3581 | "tooltip": { 3582 | "shared": true, 3583 | "sort": 0, 3584 | "value_type": "individual" 3585 | }, 3586 | "type": "graph", 3587 | "xaxis": { 3588 | "buckets": null, 3589 | "mode": "time", 3590 | "name": null, 3591 | "show": true, 3592 | "values": [] 3593 | }, 3594 | "yaxes": [ 3595 | { 3596 | "format": "short", 3597 | "label": null, 3598 | "logBase": 1, 3599 | "max": null, 3600 | "min": null, 3601 | "show": true 3602 | }, 3603 | { 3604 | "format": "short", 3605 | "label": null, 3606 | "logBase": 1, 3607 | "max": null, 3608 | "min": null, 3609 | "show": true 3610 | } 3611 | ], 3612 | "yaxis": { 3613 | "align": false, 3614 | "alignLevel": null 3615 | } 3616 | }, 3617 | { 3618 | "alert": { 3619 | "alertRuleTags": {}, 3620 | "conditions": [ 3621 | { 3622 | "evaluator": { 3623 | "params": [ 3624 | 66 3625 | ], 3626 | "type": "lt" 3627 | }, 3628 | "operator": { 3629 | "type": "and" 3630 | }, 3631 | "query": { 3632 | "params": [ 3633 | "A", 3634 | "10s", 3635 | "now" 3636 | ] 3637 | }, 3638 | "reducer": { 3639 | "params": [], 3640 | "type": "last" 3641 | }, 3642 | "type": "query" 3643 | } 3644 | ], 3645 | "executionErrorState": "alerting", 3646 | "for": "0m", 3647 | "frequency": "1m", 3648 | "handler": 1, 3649 | "message": "NETWORK ALERT: THE PARTICIPATION RATE IS BELOW 66%! You will start to get penalties until the rate rise up above 66% again. This alert doesn't require any action from you", 3650 | "name": "NETWORK: Participation rate below 66%", 3651 | "noDataState": "ok", 3652 | "notifications": [ 3653 | { 3654 | "uid": "USY-LmRGz" 3655 | } 3656 | ] 3657 | }, 3658 | "aliasColors": {}, 3659 | "bars": false, 3660 | "dashLength": 10, 3661 | "dashes": false, 3662 | "datasource": "Prometheus", 3663 | "fieldConfig": { 3664 | "defaults": { 3665 | "custom": {} 3666 | }, 3667 | "overrides": [] 3668 | }, 3669 | "fill": 1, 3670 | "fillGradient": 0, 3671 | "gridPos": { 3672 | "h": 1, 3673 | "w": 5, 3674 | "x": 19, 3675 | "y": 58 3676 | }, 3677 | "hiddenSeries": false, 3678 | "id": 65, 3679 | "legend": { 3680 | "avg": false, 3681 | "current": false, 3682 | "max": false, 3683 | "min": false, 3684 | "show": true, 3685 | "total": false, 3686 | "values": false 3687 | }, 3688 | "lines": true, 3689 | "linewidth": 1, 3690 | "nullPointMode": "null", 3691 | "options": { 3692 | "dataLinks": [] 3693 | }, 3694 | "percentage": false, 3695 | "pointradius": 2, 3696 | "points": false, 3697 | "renderer": "flot", 3698 | "seriesOverrides": [], 3699 | "spaceLength": 10, 3700 | "stack": false, 3701 | "steppedLine": false, 3702 | "targets": [ 3703 | { 3704 | "expr": "total_voted_target_balances/total_eligible_balances*100", 3705 | "interval": "", 3706 | "legendFormat": "", 3707 | "refId": "A" 3708 | } 3709 | ], 3710 | "thresholds": [ 3711 | { 3712 | "colorMode": "critical", 3713 | "fill": true, 3714 | "line": true, 3715 | "op": "lt", 3716 | "value": 66 3717 | } 3718 | ], 3719 | "timeFrom": null, 3720 | "timeRegions": [], 3721 | "timeShift": null, 3722 | "title": "Alert: Participation rate < 66%", 3723 | "tooltip": { 3724 | "shared": true, 3725 | "sort": 0, 3726 | "value_type": "individual" 3727 | }, 3728 | "type": "graph", 3729 | "xaxis": { 3730 | "buckets": null, 3731 | "mode": "time", 3732 | "name": null, 3733 | "show": true, 3734 | "values": [] 3735 | }, 3736 | "yaxes": [ 3737 | { 3738 | "format": "percent", 3739 | "label": null, 3740 | "logBase": 1, 3741 | "max": null, 3742 | "min": null, 3743 | "show": true 3744 | }, 3745 | { 3746 | "format": "short", 3747 | "label": null, 3748 | "logBase": 1, 3749 | "max": null, 3750 | "min": null, 3751 | "show": true 3752 | } 3753 | ], 3754 | "yaxis": { 3755 | "align": false, 3756 | "alignLevel": null 3757 | } 3758 | } 3759 | ], 3760 | "refresh": "1m", 3761 | "schemaVersion": 25, 3762 | "style": "dark", 3763 | "tags": [], 3764 | "templating": { 3765 | "list": [ 3766 | { 3767 | "current": { 3768 | "selected": true, 3769 | "text": "beacon node", 3770 | "value": "beacon node" 3771 | }, 3772 | "hide": 2, 3773 | "label": null, 3774 | "name": "node_job", 3775 | "options": [ 3776 | { 3777 | "selected": true, 3778 | "text": "beacon node", 3779 | "value": "beacon node" 3780 | } 3781 | ], 3782 | "query": "beacon node", 3783 | "skipUrlSync": false, 3784 | "type": "constant" 3785 | }, 3786 | { 3787 | "current": { 3788 | "selected": false, 3789 | "text": "validator", 3790 | "value": "validator" 3791 | }, 3792 | "hide": 2, 3793 | "label": null, 3794 | "name": "validator_job", 3795 | "options": [ 3796 | { 3797 | "selected": true, 3798 | "text": "validator", 3799 | "value": "validator" 3800 | } 3801 | ], 3802 | "query": "validator", 3803 | "skipUrlSync": false, 3804 | "type": "constant" 3805 | }, 3806 | { 3807 | "allValue": "ETH", 3808 | "current": { 3809 | "selected": false, 3810 | "text": "All", 3811 | "value": "$__all" 3812 | }, 3813 | "datasource": "Prometheus", 3814 | "definition": "label_values(crypto_currency, pair)", 3815 | "hide": 0, 3816 | "includeAll": true, 3817 | "label": "Currency converter", 3818 | "multi": false, 3819 | "name": "fiat", 3820 | "options": [], 3821 | "query": "label_values(crypto_currency, pair)", 3822 | "refresh": 1, 3823 | "regex": "eth([a-z]*)", 3824 | "skipUrlSync": false, 3825 | "sort": 1, 3826 | "tagValuesQuery": "", 3827 | "tags": [], 3828 | "tagsQuery": "", 3829 | "type": "query", 3830 | "useTags": false 3831 | } 3832 | ] 3833 | }, 3834 | "time": { 3835 | "from": "now-6h", 3836 | "to": "now" 3837 | }, 3838 | "timepicker": { 3839 | "refresh_intervals": [ 3840 | "10s", 3841 | "30s", 3842 | "1m", 3843 | "5m", 3844 | "15m", 3845 | "30m", 3846 | "1h", 3847 | "2h", 3848 | "1d" 3849 | ] 3850 | }, 3851 | "timezone": "", 3852 | "title": "ETH staking dashboard", 3853 | "uid": "t2yHaa3Zz", 3854 | "version": 99 3855 | } 3856 | --------------------------------------------------------------------------------