# Stake Local Dashboard

A multi-client Grafana dashboard for Ethereum staking

## Introduction

The Stake Local Dashboard is a Grafana dashboard and software configuration that provides access to Ethereum staking data from nine different Ethereum clients. Clients may be configured in one or more staking groups that are running on one or more hosts. The dashboard relies on data collected from client metrics pages and client API calls to populate the customizable dashboard. Third-party APIs are also used to collect the current ETH price ([CoinGecko](https://www.coingecko.com/)) and the latest client version information ([GitHub](https://github.com/)). The result is a powerful tool for viewing the status of staking operations.

This really should be called a dashboard library, because it is meant to be customized to meet your staking needs. The panels within may not all be relevant to your clients or your monitoring area of focus. They may not be organized according to your priorities. Therefore, remove or reorganize panels, hide columns or queries, and make the dashboard your own.

The following screenshot shows a sample dashboard using a mix of panels that I selected for an at-a-glance view of testnet staking operations. This is just one way that the library of panels can be personalized to your staking operations, and the dashboard depicted below is only using one quarter of the panels available.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-82c809a32ffcc2ed6e9101dc3acb603e0480136a%2FSample%20%20Dashboard%20-%20Prysm%20Geth%20-%20Hidden.png?alt=media" alt=""><figcaption><p>Sample Dashboard for Prysm/Geth on Goerli</p></figcaption></figure>

Additional screenshots of the sample dashboard for other Ethereum clients are in the [Sample Dashboard](#sample-dashboard) section below.

## Key Features

* Consensus clients: [Lighthouse](https://github.com/sigp/lighthouse), [Lodestar](https://github.com/ChainSafe/lodestar), [Nimbus](https://github.com/status-im/nimbus-eth2), [Prysm](https://github.com/prysmaticlabs/prysm), and [Teku](https://github.com/ConsenSys/teku)
* Execution clients: [Besu](https://github.com/hyperledger/besu), [Erigon](https://github.com/ledgerwatch/erigon), [Geth](https://github.com/ethereum/go-ethereum), and [Nethermind](https://github.com/NethermindEth/nethermind)
* 84+ primary multi-client dashboard panels with significant support across clients
* 28 additional library panels with limited support across clients
* Group consensus and execution clients into pairs and easily switch between groups
* Displays multiple staking groups at a time
* Track the status of multiple hosts and easily switch between hosts
* Displays multiple hosts at a time
* Displays and calculates validator and address balances and rates of change over time
* Supports for multiple currencies for fiat values, via [CoinGecko](https://www.coingecko.com/). Includes: USD, EUR, JPY, GBP, AUD, CAD, CHF, CNY, HKD, NZD, ILS, KRW, MXN, RUB, SGD, TWD, and INR
* Displays client current version and latest release from [GitHub](https://github.com/), with links to release notes
* Links to [Beaconcha.in](https://beaconcha.in/) for slot, block, epoch and validator details
* Links to [Etherscan.io](https://etherscan.io/) for Ethereum address details
* Explorer links can be customized to the network served. Links for Goerli nodes will go to Goerli explorers, for example.
* Provides some status of supporting software: [Grafana](https://github.com/grafana/grafana), [Prometheus](https://github.com/prometheus/prometheus), [json\_exporter](https://github.com/prometheus-community/json_exporter), [node\_exporter](https://github.com/prometheus/node_exporter), and [Ethereum Metrics Exporter](https://github.com/ethpandaops/ethereum-metrics-exporter)

If you want to get started without reading more about the dashboard, begin the installation and configuration process with [Dashboard Installation](/dashboard-installation/installation-overview).

{% content-ref url="/pages/g3PkY6foUD5LtLNab6bl" %}
[Dashboard Installation](/dashboard-installation/installation-overview)
{% endcontent-ref %}

## What is Stake Local?

Stake Local is the new name under which I will be publishing my contributions to the Ethereum staking community. I wanted to distinguish these efforts independent of my username, and I wanted the new name to have an obvious connection to staking. Stake Local is not just a name, though. It is also an imperative for decentralized and independent staking. Stake Local!

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-a0066dce65f8dc07418e61d4b51b12d8729babc8%2Fstake-logo-001-Master.png?alt=media" alt=""><figcaption></figcaption></figure>

## Screenshots

The screenshots in the sections that follow show each primary dashboard section for each of the five different Goerli staking groups listed in the image below.

Switching between groups or hosts can be done using the dashboard variable drop-downs at the top of the screen.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FnW5OK4xNe2omridlf1YS%2FDashboard%20Variable%20Drop%20Downs.png?alt=media&amp;token=db4b6c90-a0ac-45f6-8b01-794b84815d5d" alt=""><figcaption><p>Grafana Dashboard Variable Drop-Down</p></figcaption></figure>

### Clients Section

The Clients section displays panels related to the operation of the clients, including:

* Sync status
* Peer count
* Peer count by client type
* RPC received per second
* Execution layer transaction pools

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-9e82b99c9bcfbb548c78d7ea2aba196181def572%2FClients%20-%20Prysm%20Geth.png?alt=media" alt=""><figcaption><p>Prysm/Geth</p></figcaption></figure>

<div><figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-9319db4f2b2d1b1f530e64bb9610439473567713%2FClients%20-%20Lighthouse%20Erigon.png?alt=media" alt=""><figcaption><p>Lighthouse/Erigon</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-6df3b32c125fcf655abe60aa3362534f1b781cbe%2FClients%20-%20Teku%20Besu.png?alt=media" alt=""><figcaption><p>Teku/Besu</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-59a585d94e245c97fa60ca621df55bde91934a57%2FClients%20-%20Nimbus%20Nethermind.png?alt=media" alt=""><figcaption><p>Nimbus/Nethermind</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-601a342c765125b080ae6a43cae6d0228648b0ca%2FClients%20-%20Lodestar%20Geth.png?alt=media" alt=""><figcaption><p>Lodestar/Geth</p></figcaption></figure></div>

{% hint style="info" %}
Some data is presented on multiple panels in different forms. For example, peer types are shown in the Clients section as a pie chart of current peer counts and also as as bar chart showing peer counts over time. You can choose the panels you would like to keep or move around within the dashboard.
{% endhint %}

### Network Section

The Network section covers the status of the Ethereum network (i.e. Mainnet, Goerli, Sepolia). This information is independent from the clients being monitored and data should be similar from any staking group on the same network.

* Participation Rate
* Network liveness
* Validator counts
* Current slot, epoch, and block numbers
* Base fee per gas
* Gas used
* Epochs since finalization
* Expected time between proposals
* Head block information
* Beacon reorgs

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-a0312e8a49032d577eeacf11a4217d2babae0ce4%2FNetwork%20-%20Prysm%20Geth.png?alt=media" alt=""><figcaption><p>Prysm/Geth</p></figcaption></figure>

<div><figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-c64938b38c2a79ebd25427aac6d24aec42592142%2FNetwork%20-%20Lighthouse%20Erigon.png?alt=media" alt=""><figcaption><p>Lighthouse/Erigon</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-45e790c022ee3ea217e67eb1a20826d241de7749%2FNetwork%20-%20Teku%20Besu.png?alt=media" alt=""><figcaption><p>Teku/Besu</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-c26059f1028f88756ad1d2a26e9ebbe38443d9f2%2FNetwork%20-%20Nimbus%20Nethermind.png?alt=media" alt=""><figcaption><p>Nimbus/Nethermind</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-3a59b854109af6a5440c1b25ba5b1f9d60e37bfd%2FNetwork%20-%20Lodestar%20Geth.png?alt=media" alt=""><figcaption><p>Lodestar/Geth</p></figcaption></figure></div>

### Software Section

The Software section shows software information for both the selected group and the selected host. Software is displayed with self-reported current version information, version number of the latest GitHub release, software uptime, and database size.

The Latest Release link will take the user to the release notes for the latest release on GitHub.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-cd20a5e21fd8915ad6813c1a39c787080939f751%2FSoftware%20-%20Prysm%20Geth%20-%20nuc07.png?alt=media" alt=""><figcaption><p>Prysm/Geth and nuc07</p></figcaption></figure>

<div><figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-b6f75bb4d403d34a3e66ac0166344a3de454e7dd%2FSoftware%20-%20Lighthouse%20Erigon%20-%20nuc02.png?alt=media" alt=""><figcaption><p>Lighthouse/Erigon and nuc02</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-007363fa01f01ffd9cb637df501f73cf7dca8e47%2FSoftware%20-%20Teku%20Besu%20-%20nuc05.png?alt=media" alt=""><figcaption><p>Teku/Besu and nuc05</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-ff333cffc88b2bcf1a6e7e46522f718d10682fbe%2FSoftware%20-%20Nimbus%20Nethermind%20-%20nuc03.png?alt=media" alt=""><figcaption><p>Nimbus/Nethermind and nuc03</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-663c8fab5787830c21dd78310eb2cb3653571904%2FSoftware%20-%20Lodestar%20Geth%20-%20nuc06.png?alt=media" alt=""><figcaption><p>Lodestar/Geth and nuc06</p></figcaption></figure></div>

{% hint style="info" %}
Not all clients report current version information or database size.
{% endhint %}

### Local Validators Section

The Local Validators section is intended to show status information for locally-run validators, but it can be used just as well for monitoring any other validator on the network. Data includes:

* Individual Ethereum address balance
* Individual validator balance and status
* Total validators balance
* Total Ethereum addresses balance
* Balance changes over time and annualized rates of change, for validators, addresses, and the sum of both
* Ethereum price in one of over a dozen supported currencies, including: USD, EUR, JPY, GBP, AUD, CAD, CHF, CNY, HKD, NZD, ILS, KRW, MXN, RUB, SGD, TWD, and INR
* Total number of monitored validators

{% hint style="info" %}
Prysm users have an advantage with access to proposal, attestation, and aggregation slot numbers provided directly by the client. Other consensus clients can still monitor validators through client API calls, but less detail is available.
{% endhint %}

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-3347ed3f465d6f01b07e4ba89bd02eb1417348a1%2FLocal%20Validators%20-%20Prysm%20Geth%20-%20Hidden.png?alt=media" alt=""><figcaption><p>Prysm/Geth</p></figcaption></figure>

<div><figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-947f81fcbaf7636b39165a7a8289fd8e04c67129%2FLocal%20Validators%20-%20Lighthouse%20Erigon%20-%20Hidden.png?alt=media" alt=""><figcaption><p>Lighthouse/Erigon</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-b26635d61d465cb8e97462080e668e755d1c3346%2FLocal%20Validators%20-%20Teku%20Besu%20-%20Hidden.png?alt=media" alt=""><figcaption><p>Teku/Besu</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-e3558442f49fec8d6417a86d63b8fee136e87752%2FLocal%20Validators%20-%20Nimbus%20Nethermind%20-%20Hidden.png?alt=media" alt=""><figcaption><p>Nimbus/Nethermind</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-c306465c7cc285728cd426556da48ee1b6e32121%2FLocal%20Validators%20-%20Lodestar%20Geth%20-%20Hidden.png?alt=media" alt=""><figcaption><p>Lodestar/Geth</p></figcaption></figure></div>

{% hint style="info" %}
The only limit to the number of validators and Ethereum addresses you can monitor is the number of queries your Ethereum clients can handle.
{% endhint %}

{% hint style="danger" %}
See [known issues](#known-issues) for a discussion about validator and address balance changes and how accurate "earnings" calculations are difficult with the tools used.
{% endhint %}

### Host Section

The Host section displays panels related to the system or host on which one or more of the consensus/execution groups are running.

* Memory use
* CPU use and temperature
* Network traffic
* Disk use
* Open file descriptors
* I/O operations per second.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-26c368076565af8e378361ef73f7588df6805386%2FHost%20-%20nuc02.png?alt=media" alt=""><figcaption><p>nuc02, Lighthouse/Erigon</p></figcaption></figure>

<div><figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-d5fa081b80bc8d94bbcfdb878b41c68fc171e0d0%2FHost%20-%20nuc03.png?alt=media" alt=""><figcaption><p>nuc03, Nimbus/Nethermind</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-1e14dac43ecbca82f9f353abd589aae6190ae54e%2FHost%20-%20nuc05.png?alt=media" alt=""><figcaption><p>nuc05, Teku/Besu</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-aa01aaee76add26efaac22aacbe0181bf3859f7b%2FHost%20-%20nuc06.png?alt=media" alt=""><figcaption><p>nuc06, Lodestar/Geth</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-3a30cbd1143c58e1d3dcac9efd5d0bbd03ae87dd%2FHost%20-%20nuc07.png?alt=media" alt=""><figcaption><p>nuc07, Prysm/Geth</p></figcaption></figure></div>

{% hint style="warning" %}
Not every data point/series available is represented by a panel, and some panels show the same data in different ways. Additional panels may be added in the future to cover any important gaps.
{% endhint %}

## Library Sections

See the [Library Sections](#library-sections) page for screenshots of additional dashboard panels with more limited client support.

## Feature Screenshots

### Links

The dashboard provides links to external resources in a few sections.

* The Local Validators section provides links to Beaconcha.in for validators by index and address, and slots by slot number.
* The Local Validators section provides links to Etherscan.io for Ethereum addresses by public key.
* The Network section provides links to Beaconcha.in for current slot, head slot, current epoch, justified epoch, and finalized epoch.
* The Network section provides links to Etherscan.io for head block and finalized block.
* The Software section provides links to GitHub for latest release notes for supported products.

<div><figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-7728c3c1b895a126ade8eaef0f3138eea1891311%2FLocal%20Validators%20Links.png?alt=media" alt=""><figcaption><p>Links in Local Validators Section</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-a93e333138d6ce7f165ef71f01d09052a2c677ac%2FNetwork%20Links.png?alt=media" alt=""><figcaption><p>Links in Network Section</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-0bc8ef3402e0d57bfd6690057a5e7208f61f5140%2FSoftware%20Links.png?alt=media" alt=""><figcaption><p>Links in Software Section</p></figcaption></figure></div>

### Multiple Group Selection

Display multiple staking groups at a time by selecting more than one group in the Group variable drop-down at the top of the dashboard. Most sections will repeat for each selected staking group. The Host section repeats for each selected host. The Sample Dashboard section does not presently work with multiple selections.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-3eeebcd1399eaac5b8b7ae927c962e75288738d9%2FClients%20-%20Multiple%20Groups.png?alt=media" alt=""><figcaption><p>The Clients Section with Multiple Groups Selected</p></figcaption></figure>

### Currency Support

The dashboard converts validator and address balances to fiat values using data provided by the [CoinGecko API](https://www.coingecko.com/api). Supported currencies include: USD, EUR, JPY, GBP, AUD, CAD, CHF, CNY, HKD, NZD, ILS, KRW, MXN, RUB, SGD, TWD, and INR. A few of the currencies are shown below.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-25a55f6f774d53ec1579aaf76e447081fc133e9e%2FLocal%20Validators%20-%20EUR%20-%20Hidden.png?alt=media" alt=""><figcaption><p>Local Validators w/ EUR</p></figcaption></figure>

<div><figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-6cbea71f9e2264fa4b337496262fcd6f8ce4f758%2FLocal%20Validators%20-%20JPY%20-%20Hidden.png?alt=media" alt=""><figcaption><p>Local Validators w/ JPY</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-8bb17b5d5071d8bc5233ed70fc758d5be67a01be%2FLocal%20Validators%20-%20GBP%20-%20Hidden.png?alt=media" alt=""><figcaption><p>Local Validators w/ GBP</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-2b07243e2eb6ed7430ee5210fc7d12d50351a40c%2FLocal%20Validators%20-%20CHF%20-%20Hidden.png?alt=media" alt=""><figcaption><p>Local Validators w/ CHF</p></figcaption></figure></div>

<div><figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-b8f0daec5490f02a5a834c0f15b2b19cc5684802%2FLocal%20Validators%20-%20AUD%20-%20Hidden.png?alt=media" alt=""><figcaption><p>Local Validators w/ AUD</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-f52b9ac966430ee072c62a78646f2f3d552b55a4%2FLocal%20Validators%20-%20CNY%20-%20Hidden.png?alt=media" alt=""><figcaption><p>Local Validators w/ CNY</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-3c4225eb51577b43f7688b35fa1017d4aa925a98%2FLocal%20Validators%20-%20CAD%20-%20Hidden.png?alt=media" alt=""><figcaption><p>Local Validators w/ CAD</p></figcaption></figure></div>

## Sample Dashboard

Users are encouraged to rearrange, remove, and modify the dashboard panels to meet their specific needs. Not all stakers use all clients and not all clients provide the same data. Stakers using only a single client pair may want to remove all of the panels not supported by their clients. Stakers focused on client internal metrics may want to remove or hide financial performance metrics to meet their needs.

A Sample Dashboard is provided as an example of a reorganization and prioritization of the panels from other dashboard sections.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-82c809a32ffcc2ed6e9101dc3acb603e0480136a%2FSample%20%20Dashboard%20-%20Prysm%20Geth%20-%20Hidden.png?alt=media" alt=""><figcaption><p>Prysm/Geth</p></figcaption></figure>

<div><figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-5561079d8e866eb0920e570b06e19c55e8cedc72%2FSample%20Dashboard%20-%20Lighthouse%20Erigon%20-%20Hidden.png?alt=media" alt=""><figcaption><p>Lighthouse/Erigon</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-59956b80816dfabb3e095e46e8cd4268be1cab2f%2FSample%20Dashboard%20-%20%20Teku%20Besu%20-%20Hidden.png?alt=media" alt=""><figcaption><p>Teku/Besu</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-1ad14d819685590a90b6ee8da0fa17bbb1100f2e%2FSample%20Dashboard%20-%20Nimbus%20Nethermind%20-%20Hidden.png?alt=media" alt=""><figcaption><p>Nimbus/Nethermind</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-663041d80d2aaa5216bb7d1d3f5bef339a52488e%2FSample%20Dashboard%20-%20Lodestar%20Geth%20-%20Hidden.png?alt=media" alt=""><figcaption><p>Lodestar/Geth</p></figcaption></figure></div>

{% hint style="info" %}
All panels in the Sample Dashboard section are copies of the panels from the primary sections and can be safely removed or modified without affecting the originals in the primary sections.

Some of the panels in the Sample Dashboard have had columns from the original panels hidden in order to reduce the space required and make room for additional panels.
{% endhint %}

## Supporting Software

Because this dashboard was intended to be an upgrade to the dashboards I previously created, I started with the same Grafana/Prometheus/json\_exporter/node\_exporter software stack used for the original dashboards. Investigating alternative software solutions (e.g. Loki) was something for a later phase. However, I later added [Ethereum Metrics Exporter](https://github.com/ethpandaops/ethereum-metrics-exporter) to the software stack after I realized that it gave me access to some additional API calls inaccessible to json\_exporter.

The diagram below shows the communication paths configured between the various software in use.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-1cad533679dc4b80f8e9d45e61c5a4fa4a5a82b4%2FStake%20Local%20Dashboard%20Diagram.png?alt=media" alt=""><figcaption><p>Communication Paths Between Software Supporting the Stake Local Dashboard Library</p></figcaption></figure>

{% hint style="warning" %}
Metrics for stand-alone validator clients are included for Lighthouse, Prysm, and Nimbus. Support for other stand-alone validators and remote key managers is intended for the future.
{% endhint %}

## Known Issues

### Validator and Address Balances

After withdrawals are enabled, calculations of accurate earnings and rates of earning over longer time periods on the dashboard are practically impossible with the software in use.

Prometheus cannot distinguish validator/address deposits from withdrawals. It cannot tell the difference between a bad week of earnings or a good week of earnings where everything has been withdrawn. It only sees a net balance change.

{% hint style="info" %}
Prometheus is not intended for transactional type data, such as deposits and withdrawals. Using a different type of database could solve this problem, but that was out of scope for this project.
{% endhint %}

Instead, the dashboard displays the raw balance change and calculates annualized rates of change based on that raw balance change over a period of time. Withdrawals will skew annualized rates of change downward for as long as the withdrawal is still within the lookback period for the calculation.

For example: A withdrawal made within the last hour will negatively skew the annualized rate of return for the one-hour annualized rate of change. After one hour has passed, the one-hour annualized rate of change will again reflect an accurate annualized rate of earnings.

Due to the expectation that earnings will be skimmed from validators more often than once a week, anything greater than a one-day annualized rate of change will likely be inaccurate after withdrawals are enabled.

### Queries

There is limited consistency to the names or meanings of client-provided metrics. Dashboard panels must query for many different metric names to cover all of the possible clients. For example, the panel that displays client version information queries Prometheus for metrics with the following names:

* *lighthouse\_info*
* *prysm\_version*
* *beacon\_teku\_version*
* *execution\_version*
* *prometheus\_build\_info*
* *lodestar\_version*
* *blackbox\_exporter\_build\_info*
* *node\_exporter\_build\_info*
* *dirk\_release*
* *vouch\_release*
* *process\_start\_time\_seconds*
* *eth\_exe\_web3\_client\_version*
* *eth\_con\_node\_version*

All of these metric names appear in a single query to Prometheus and Prometheus spends processing power looking for each, even if you are running a small subset of the clients.

Differing units, subtle semantic differences, and special display needs may require that some clients have completely separate queries for their data. Similar to above, if the client to which that query applies is not in use, the query is still executed and some processing power is wasted.

In practice, running all of the supporting software on the same system as a single monitored client has negligible impact to system resources. See the screenshots in the [Hosts section](#host-section) for examples of resource use under the Stake Local dashboard software stack. Only nuc06 is not running all supporting software at this time.

### Installation and Configuration

Installation and configuration of the supporting software and dashboard involves many steps. None of steps are particularly challenging, but 5 software products must be installed and configured, and a dozen Prometheus targets must be configured and labeled to get up and running with a single consensus/execution client pair.

An archive containing template Prometheus target configuration files is provided for quick installation. Reasonable default values have been provided in these files, but you may want or need to make changes to customize your installation.

## Notes

{% hint style="info" %}
The dashboard is not a substitute for third-party monitoring services and explorers.

* Third-party monitoring services and explorers have more historical data and more advanced querying capabilities than Prometheus provides.
* Third-party monitoring services and explorers are more easily accessible from anywhere. Special configurations and precautions are required to access Grafana from anywhere.
* Third party monitoring services can alert you when your Internet connection is down, while Grafana would not likely have a way to communicate with you.
* If your Internet connection is down, third-party monitoring services can still monitor/alert on your staking status, but will not have access to host data.
* Some Prometheus metrics reset to zero after your client has restarted. This will not happen with third party explorers.

Grafana does have some benefits.

* Grafana dashboards are highly customizable.
* Large variety of client and system performance metrics available.
* Nearly all data on the dashboard is from local sources.
* Grafana is still locally accessible when your Internet is down.
  {% endhint %}

{% hint style="info" %}
Though one dashboard panel may support multiple clients, the type of data displayed is not always equivalent or at the same level of detail.

Examples:

* The RPC Received per Second panel shows RPC calls broken out by specific statuses for Lighthouse but only simple successes and failures for Geth.
* The Validator Count panel shows pending/exiting queue lengths for Prysm but only the active validator count for all other clients.
  {% endhint %}

### Support Stake Local

stakelocal.eth

## Installation and Configuration

To install the Stake Local Dashboard Library and all supporting software, visit the [Dashboard Installation](https://github.com/stakelocal/stakelocal-dashboard/blob/docs/docs/broken-reference/README.md) section.


# Library Sections

Panels with support from fewer clients

The following additional dashboard sections include panels with support from a smaller subset of clients. These panels have been moved to separate sections named after supported clients.

## Erigon, Geth, Lighthouse

<div><figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-82b0dd37f9bd656ba97388e239089014f724d4bc%2FErigon%20Geth%20Lighthouse%20-%20Erigon%20Lighthouse.png?alt=media" alt=""><figcaption><p>Lighthouse/Erigon</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-1120fccbb519e6f0a3636d607f800a967d0d5b1b%2FErigon%20Geth%20Lighthouse%20-%20Geth.png?alt=media" alt=""><figcaption><p>Lodestar/Geth</p></figcaption></figure></div>

## Erigon, Geth, Lighthouse, Lodestar, Prysm

<div><figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-df374d2ad34778064f1db503f6d7e389df9ffb11%2FErigon%20Geth%20Lighthouse%20Lodestar%20Prysm%20-%20Erigon%20Lighthouse.png?alt=media" alt=""><figcaption><p>Lighthouse, Erigon</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-a917bff829b14902255f24ec8f5f624f7b3e8bdc%2FErigon%20Geth%20Lighthouse%20Lodestar%20Prysm%20-%20Geth%20Prysm.png?alt=media" alt=""><figcaption><p>Prysm/Geth</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-36ea32034c56cbc7bf4521bfe9a24c85c676a09d%2FErigon%20Geth%20Lighthouse%20Lodestar%20Prysm%20-%20Geth%20Lodestar.png?alt=media" alt=""><figcaption><p>Lodestar/Geth</p></figcaption></figure></div>

## Erigon, Geth, Nethermind

<div><figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-23983620ab440a828b0c780081009d6d39025cde%2FErigon%20Geth%20Nethermind%20-%20Erigon.png?alt=media" alt=""><figcaption><p>Lighthouse/Erigon</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-fef558a39e5752b7391c62e6bb3bfc273fea1d1f%2FErigon%20Geth%20Nethermind%20-%20Geth.png?alt=media" alt=""><figcaption><p>Prysm/Geth</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-10f9dbdd28d3f40fa4908169eb574eb46acdc386%2FErigon%20Geth%20Nethermind%20-%20Nethermind.png?alt=media" alt=""><figcaption><p>Nimbus/Nethermind</p></figcaption></figure></div>

## Lighthouse

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-716aab682de76f26db271d43adffac7b8e86267a%2FLighthouse%20-%20Lighthouse.png?alt=media" alt=""><figcaption><p>Lighthouse</p></figcaption></figure>

## Lighthouse, Lodestar, Teku

<div><figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-059942d35dac447f73d93c29d5bfd0f1326ece9e%2FLighthouse%20Lodestar%20Teku%20-%20Lighthouse.png?alt=media" alt=""><figcaption><p>Lighthouse/Erigon</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-b35f6fb4ca905ba63710f8bb11be760e6839f50c%2FLighthouse%20Lodestar%20Teku%20-%20Lodestar.png?alt=media" alt=""><figcaption><p>Lodestar/Geth</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-5fa5ee3a7a1c6b3c466cdd59534cfbdf6c8c958f%2FLighthouse%20Lodestar%20Teku%20-%20Teku.png?alt=media" alt=""><figcaption><p>Teku/Besu</p></figcaption></figure></div>

## Lighthouse, Nimbus

<div><figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-fcb4022b124ab45149b48ba9c86739f404321308%2FLighthouse%20Nimbus%20-%20Lighthouse.png?alt=media" alt=""><figcaption><p>Lighthouse, Erigon</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-c226d40bb02fa7585d4ee885b668dad251c4967b%2FLighthouse%20Nimbus%20-%20Nimbus.png?alt=media" alt=""><figcaption><p>Nimbus/Nethermind</p></figcaption></figure></div>

## Lighthouse, Prysm

<div><figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-1a2047e1483d0e13e08dd8143639db9f3f2ffeb3%2FLighthouse%20Prysm%20-%20Lighthouse.png?alt=media" alt=""><figcaption><p>Lighthouse, Erigon</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-85c1e767d64774946e92f63fa2070644fcd3aabb%2FLighthouse%20Prysm%20-%20Prysm.png?alt=media" alt=""><figcaption><p>Prysm/Geth</p></figcaption></figure></div>

## Lighthouse, Teku

<div><figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-45f7f679971c245f8ea246c20d88bdaccbbf039c%2FLighthouse%20Teku%20-%20Lighthouse.png?alt=media" alt=""><figcaption><p>Lighthouse, Erigon</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-f46fc15383ddb34b96f301180c576e511d8f9c51%2FLighthouse%20Teku%20-%20Teku.png?alt=media" alt=""><figcaption><p>Teku/Besu</p></figcaption></figure></div>

## Lodestar

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-0cd470214e069eae425c460d398cf7584de8d34b%2FLodestar%20-%20Lodestar.png?alt=media" alt=""><figcaption><p>Lodestar/Geth</p></figcaption></figure>

## Prysm

<div><figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-f5182d5113eac5cba8e1725d0f80dbc7222fbcc2%2FPrysm%20-%20Prysm%2001%20-%20Hidden.png?alt=media" alt=""><figcaption><p>Prysm/Geth</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-7d17de4b1f770cafa4d31bb4b87a736a9a9f512d%2FPrysm%20-%20Prysm%2002.png?alt=media" alt=""><figcaption><p>Prysm/Geth Continued</p></figcaption></figure></div>


# Installation Overview

Installation of the Stake Local Dashboard

## Installation Overview

The overall process of installing and configuring the Stake Local Dashboard is as follows:

* [Install Supporting Software](/dashboard-installation/install-supporting-software) - Install Prometheus, Grafana, node\_exporter, json\_exporter, and Ethereum Metrics Exporter.
* [Configure Ethereum Clients](https://github.com/stakelocal/stakelocal-dashboard/blob/docs/docs/dashboard-installation/broken-reference/README.md) - Update Ethereum client configurations to allow supporting software access to metrics and API data sources.
* [Configure Supporting Software](/dashboard-installation/configure-supporting-software) - Base configuration of Prometheus, node\_exporter, json\_exporter and Ethereum Metrics Exporter.
* [Prometheus Jobs & Targets Configuration](/dashboard-installation/prometheus-jobs-and-targets) - Configuration of Prometheus scraping jobs, scraping targets, and processing rules.
* [Optional: Alternative Dashboard Compatibility](/dashboard-installation/optional-alternative-dashboard-compatibility) - Configuration changes to ensure compatibility with prior Ethereum client dashboards.
* [Enable & Start/Restart Services](/dashboard-installation/enable-and-start-restart-services) - Start/restart software to enable all configurations.
* [Install Dashboard](/dashboard-installation/install-dashboard) - Install Grafana dashboard.

{% hint style="info" %}
You may skip the relevant [Install Supporting Software](/dashboard-installation/install-supporting-software) steps if you already have Prometheus, Grafana, node\_exporter, json\_exporter, or Ethereum Metrics Exporter installed. Configuration is handled in a separate section.
{% endhint %}

{% hint style="danger" %}
For ease of installation, the present guide instructs you to overwrite any existing `prometheus.yml` , and `json_exporter.yml` configuration files with entirely new files. You may need to manually merge your current files with the new files in order to keep some preexisting jobs functioning.

Instructions are provided to ensure that over a dozen other Ethereum client dashboards continue to work with the Stake Local `prometheus.yml` configuration file, but not all of your current Prometheus jobs may be covered by these modifications.
{% endhint %}


# Install Supporting Software

Install the supporting software required for the Stake Local Dashboard

For full functionality, the Stake Local Dashboard requires the following software packages:

* [Prometheus ](https://github.com/prometheus/prometheus)- Collects data from Ethereum clients and the data exporters
* [Grafana ](https://github.com/grafana/grafana)- Queries Prometheus for data and displays dashboards
* [node\_exporter ](https://github.com/prometheus/node_exporter)- Exports host status and performance metrics in the Prometheus format.
* [json\_exporter ](https://github.com/prometheus-community/json_exporter)- Converts JSON-formatted API responses to the Prometheus format. Used for API calls to consensus clients, execution clients, and third-party APIs.
* [Ethereum Metrics Exporter](https://github.com/ethpandaops/ethereum-metrics-exporter) - Exports consensus and execution client API responses in the Prometheus format. Covers some API calls inaccessible to json\_exporter.

{% hint style="warning" %}
The three "exporters" in the list above are technically optional, but highly recommended. Many dashboard panels will be partially or completely disabled without one or more of these exporters.
{% endhint %}

{% hint style="info" %}
Skip the installation process for any products already installed on your system. Configuration of the software is handled later.
{% endhint %}

### Instructions for Ubuntu Server 22.04 LTS

The following sections cover installation of all supporting software on a clean Ubuntu Server 22.04 LTS. You may need to adapt these instructions to your specific operating system.

{% content-ref url="/pages/sINVEe2p0dWTwrvEwDyi" %}
[Install Prerequisites](/dashboard-installation/install-supporting-software/install-prerequisites)
{% endcontent-ref %}

{% content-ref url="/pages/4mYW3DwmiuodrsY21GWz" %}
[Install Prometheus](/dashboard-installation/install-supporting-software/install-prometheus)
{% endcontent-ref %}

{% content-ref url="/pages/Hkbbq2Rc2b9ryAXUrnoo" %}
[Install Grafana](/dashboard-installation/install-supporting-software/install-grafana)
{% endcontent-ref %}

{% content-ref url="/pages/ORAPGZyKfCMkAkupbh6N" %}
[Install node\_exporter](/dashboard-installation/install-supporting-software/install-node_exporter)
{% endcontent-ref %}

{% content-ref url="/pages/88FpqdXzATjRxYSNICEw" %}
[Install json\_exporter](/dashboard-installation/install-supporting-software/install-json_exporter)
{% endcontent-ref %}

{% content-ref url="/pages/aep0kNmU5k9vYheQ7G5L" %}
[Install Ethereum Metrics Exporter](/dashboard-installation/install-supporting-software/install-ethereum-metrics-exporter)
{% endcontent-ref %}


# Install Prerequisites

Supporting software for supporting software

## Install Prerequisites

The following tools may not yet be available on your system, but are necessary for installing our supporting software.

## make

`make` is a utility to assist in building software.

```bash
sudo apt-get update
sudo apt-get install make
```

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2F5O5kFVl46OHjrdYtn7NP%2Faptget-install-make.png?alt=media&amp;token=8540104d-6e6b-4999-936e-19914bd5118e" alt=""><figcaption><p>Results of <code>apt-get install make</code> command</p></figcaption></figure>

Check to see if `make` was correctly installed.

```bash
make --version
```

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-4c60cc257d76fa812f27392f1de755e8177388c2%2Fmake--version.png?alt=media" alt=""><figcaption><p>Results of <code>make --version</code> command</p></figcaption></figure>

### Go

Go is a programming language and the `go` compiler is needed to build software written in Go.

The instructions below are for version 1.20. [Check for newer versions of go](https://go.dev/dl/), and adapt the instructions below.

```bash
cd
wget https://go.dev/dl/go1.20.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.20.linux-amd64.tar.gz
sudo ln -s /usr/local/go/bin/go /usr/bin/go
```

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FJBujvC6fS4stoIHBZVvZ%2Fwget-tar-ln-go.png?alt=media&amp;token=7feabee3-8ecf-459d-8ab5-557e0f267c09" alt=""><figcaption><p>Results of the <code>wget</code>, <code>tar</code>, and <code>ln</code> commands</p></figcaption></figure>

Check to see if `go` was installed correctly.

```bash
go version
```

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-4227fd89aab9a7e2f9dbdc06171b3d7adb7a4ab6%2Fgo-version.png?alt=media" alt=""><figcaption><p>Results of <code>go version</code> command</p></figcaption></figure>

Optionally, clean up installation files.

```bash
rm go1.20.linux-amd64.tar.gz
```

### Stake Local Dashboard Repository

Clone the Stake Local Dashboard repository.

```
mkdir ~/git
cd ~/git
git clone https://github.com/stakelocal/stakelocal-dashboard.git
```


# Install Prometheus

Install Prometheus to collect and serve data

## Prometheus

Prometheus handles data collection, storage, and queries. Data sources are configured as targets from which Prometheus will request metrics data. Prometheus stores this data and responds to Grafana queries against the data.

### Create System Account

Create a system account under which Prometheus can run.

<pre class="language-bash"><code class="lang-bash"><strong>sudo adduser --system prometheus --group --no-create-home
</strong></code></pre>

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FBfrmBqNusgOuTpsSNQIo%2Fadduser-prometheus.png?alt=media&amp;token=b2fd75f4-bd62-4d24-9027-a2b485b8648f" alt=""><figcaption><p>Results of <code>adduser</code> command</p></figcaption></figure>

### Install Prometheus

The instructions below are for version 2.42.0. [Check for newer versions of Prometheus](https://github.com/prometheus/prometheus/releases), and adapt the instructions below.

Download the latest release.

```bash
cd
wget https://github.com/prometheus/prometheus/releases/download/v2.42.0/prometheus-2.42.0.linux-amd64.tar.gz
```

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2F9k4oLYAgF2hJZjQG5sPU%2Fwget-prometheus.png?alt=media&amp;token=f154cf71-a342-43a5-b480-73ee25b0f59a" alt=""><figcaption><p>Results of <code>wget</code> command</p></figcaption></figure>

Unpack the release.

```bash
tar xzvf prometheus-2.42.0.linux-amd64.tar.gz
```

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FVHvRTuxU0lwi2R4aXLut%2Ftar-prometheus.png?alt=media&amp;token=079dcc12-add3-44d6-bd17-38a45dcdba64" alt=""><figcaption><p>Results of <code>tar</code> command</p></figcaption></figure>

Copy multiple executable files to `/usr/local/bin`.

```bash
cd prometheus-2.42.0.linux-amd64
sudo cp -t /usr/local/bin/ prometheus promtool
```

Create additional required directories.

```bash
sudo mkdir -p /etc/prometheus/console_libraries \
    /etc/prometheus/consoles \
    /etc/prometheus/files_sd \
    /etc/prometheus/rules \
    /etc/prometheus/rules.d \
    /var/lib/prometheus
```

Change ownership on the `/var/lib/prometheus` directory so the prometheus service can access it.

```
sudo chown prometheus:prometheus /var/lib/prometheus
```

### Configure Startup

Create a systemd service file to configure automatic startup of the Prometheus service.

```bash
sudo nano /etc/systemd/system/prometheus.service
```

Insert the following into the Prometheus systemd service file.

```
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/prometheus \
    --config.file /etc/prometheus/prometheus.yml \
    --storage.tsdb.path /var/lib/prometheus/ \
    --web.console.templates=/etc/prometheus/consoles \
    --web.console.libraries=/etc/prometheus/console_libraries \
    --storage.tsdb.retention.time=32d
ExecReload=kill -HUP $MAINPID
        
[Install]
WantedBy=multi-user.target
```

{% hint style="info" %}
Data retention is set to 32 days in the default configuration. The number of days can be increased by changing the value assigned to the `storage.tsdb.retention.time` flag in the last line of the `ExecStart` configuration above.
{% endhint %}

Save the file and exit the editor.

### Optional: Clean Up Installation Files

Remove the Prometheus archive and installation directory.

```bash
cd
rm prometheus-2.42.0.linux-amd64.tar.gz
rm -rf prometheus-2.42.0.linux-amd64
```

### Notes

{% hint style="info" %}
Prometheus will listen on port 9090. This is the port for the Prometheus admin UI.
{% endhint %}

{% hint style="warning" %}
We have not yet configured nor started Prometheus.
{% endhint %}


# Install Grafana

Install Grafana to serve dashboards

## Grafana

Grafana provides all dashboard functionality. Dashboards are displayed using Grafana's user interface, and query for data from Prometheus.

### Install Supporting Software

Install the supporting software we may need.

```bash
sudo apt-get update
sudo apt-get install apt-transport-https
sudo apt-get install software-properties-common wget
```

### Install Grafana

Install the key for authenticating Grafana packages.

```bash
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
```

This command may generate a warning about `apt-key` being deprecated. That is not a problem.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-22771e2963d015596107a2844ceb0231c4a469f9%2Fgrafana-apt-get.png?alt=media" alt=""><figcaption><p>Results of <code>wget | apt-key</code> command</p></figcaption></figure>

Add the Grafana repository to the list of external repositories and update the package list.

```bash
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
```

The `add-apt-repository` command may also generate a warning about `apt-key` being deprecated.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-4bcd3a3da5131062dd9c60c15dd5964baddcc619%2Fgrafana-add-apt-repository.png?alt=media" alt=""><figcaption><p>Results of <code>add-apt-repository</code> command</p></figcaption></figure>

Update the package list and install Grafana.

```bash
sudo apt-get update
sudo apt-get install grafana
```

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-6e4ab58d44049fd12fa9e243b9c3398308b72f67%2Finstall-grafana.png?alt=media" alt=""><figcaption><p>Results of <code>sudo apt-get install grafana</code> command</p></figcaption></figure>

### Notes

{% hint style="info" %}
Grafana will listen on port 3000. This is the port for the Grafana user interface.
{% endhint %}

{% hint style="warning" %}
We have not yet configured nor started Grafana.
{% endhint %}


# Install node\_exporter

Install node\_exporter for system status and performance data

## node\_exporter

node\_exporter exports metrics related to system status and performance.

### Create System Account

Create a system account under which node\_exporter can run.

```
sudo adduser --system node_exporter --group --no-create-home
```

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-56a50def9e7c5a755bd89094145fca22fcdf05c9%2Fadduser-node_exporter.png?alt=media" alt=""><figcaption><p>Results of <code>adduser</code> command</p></figcaption></figure>

### Install node\_exporter

The instructions below are for version 1.5.0. [Check for newer versions of node\_exporter](https://github.com/prometheus/node_exporter/releases), and adapt the instructions below.

Download the latest release.

```bash
cd
wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz
```

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FPiTWuDCg1OISrbgibG0z%2Fwget-node_exporter.png?alt=media&amp;token=45d06ea9-3e08-4186-8f5f-0ee4d33a12fc" alt=""><figcaption><p>Results of <code>wget</code> command</p></figcaption></figure>

Unpack the release.

```bash
tar xzvf node_exporter-1.5.0.linux-amd64.tar.gz
```

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2F5Swur8LNKKf0PRbqrv1l%2Ftar-node_exporter.png?alt=media&amp;token=95672a89-049b-4612-a82d-ad6f7df848cf" alt=""><figcaption><p>Results of <code>tar node_exporter</code> command</p></figcaption></figure>

Copy the executable file to `/usr/local/bin`.

```bash
sudo cp node_exporter-1.5.0.linux-amd64/node_exporter /usr/local/bin/
```

### Configure Startup

Create a systemd service file to configure automatic startup of the node\_exporter service.

```bash
sudo nano /etc/systemd/system/node_exporter.service
```

Insert the following into the node\_exporter systemd service file.

<pre><code><strong>[Unit]
</strong>Description=Node Exporter

[Service]
Type=simple
Restart=always
RestartSec=5
User=node_exporter
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target
</code></pre>

Save the file and exit the editor.

### Optional: Clean Up Installation Files

Remove the node\_exporter archive and installation directory.

```bash
cd
rm node_exporter-1.5.0.linux-amd64.tar.gz
rm -rf node_exporter-1.5.0.linux-amd64
```

### Notes

{% hint style="info" %}
node\_exporter will listen on port 9100. This is the port from which Prometheus will query for metrics.
{% endhint %}

{% hint style="warning" %}
We have not yet configured nor started node\_exporter.
{% endhint %}


# Install json\_exporter

Install json\_exporter for access to local and third-party API data

## json\_exporter

json\_exporter queries endpoints providing JSON-formatted data and converts that data into the Prometheus metrics format. It is used to query consensus and execution client JSON APIs, and to query external APIs for price and software release data.

### Create System Account

Create a user account under which json\_exporter can run.

```bash
sudo adduser --system json_exporter --group --no-create-home
```

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-f7cd254a372472734cf741c6b8088d8a9a426589%2Fadduser-json_exporter.png?alt=media" alt=""><figcaption><p>Results of <code>adduser</code> command</p></figcaption></figure>

### Build the json\_exporter Executable

The instructions below are for version 0.5.0. [Check for newer versions of json\_exporter](https://github.com/prometheus-community/json_exporter/releases), and adapt the instructions below.

Clone the latest release.

```bash
mkdir ~/git
cd ~/git
git clone --depth 1 --branch v0.5.0 https://github.com/prometheus-community/json_exporter.git
```

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FhbAfZeIcUcZdeJbagIm7%2Fgit-clone-json_exporter.png?alt=media&amp;token=1954973f-eb67-4fc1-95a6-f9cc57fe5485" alt=""><figcaption><p>Results of <code>git clone</code> command</p></figcaption></figure>

Build json\_exporter from source code.

```bash
cd json_exporter
make build
```

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FshC6RgaU3C79bQhyAbHS%2Fmake-build-json_exporter.png?alt=media&amp;token=38f4b0c3-51f1-465b-bf35-7d8025f02afb" alt=""><figcaption><p>Results of <code>make build</code> command</p></figcaption></figure>

### Install json\_exporter

Copy the json\_exporter executable to the `/usr/local/bin` directory.

```bash
sudo cp json_exporter /usr/local/bin/
```

Check to see if `json_exporter` was installed correctly.

```bash
/usr/local/bin/json_exporter --version --help
```

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2F5qnwpODEHYZLAjJZpBwy%2Fjson_exporter-version.png?alt=media&amp;token=ef52eee8-28c6-4840-b657-5d23346d2fe2" alt=""><figcaption><p>Results of <code>json_exporter</code> command</p></figcaption></figure>

Create a directory for the configuration file.

```bash
sudo mkdir /etc/json_exporter
```

### Configure Startup

Create a systemd service file to configure automatic startup of the json\_exporter service.

```bash
sudo nano /etc/systemd/system/json_exporter.service
```

Insert the following into the json\_exporter systemd service file.

```
[Unit]
Description=JSON Exporter

[Service]
Type=simple
Restart=always
RestartSec=5
User=json_exporter
ExecStart=/usr/local/bin/json_exporter --config.file /etc/json_exporter/json_exporter.yml

[Install]
WantedBy=multi-user.target
```

Save the file and exit the editor.

### Optional: Clean Up Installation Files

Remove the json\_exporter git repository.

```bash
cd
rm -rf ~/git/json_exporter
```

### Notes

{% hint style="info" %}
json\_exporter will listen on port 7979. This is the port from which Prometheus will query for metrics.
{% endhint %}

{% hint style="warning" %}
We have not yet configured nor started json\_exporter.
{% endhint %}


# Install Ethereum Metrics Exporter

Install Ethereum Metrics Exporter for access to additional API data

## Ethereum Metrics Exporter

Ethereum Metrics Exporter exports queries consensus and execution client APIs and exports that data in the Prometheus metrics format. There is some overlap between the client API endpoints accessed by Ethereum Metrics Exporter and json\_exporter, but both exporters offer access to data in unique ways.

{% hint style="warning" %}
A single instance of Ethereum Metrics Exporter can be configured to query a single consensus/execution client group. Multiple instances of Ethereum Metrics Exporter are required to monitor multiple consensus/execution groups.
{% endhint %}

### Create System Account

Create a user account under which Ethereum Metrics Exporter can run.

```bash
sudo adduser --system eth-metrics --group --no-create-home
```

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-ff7f0d2f33afe18ee85ed399cf2d095e139fcf2c%2Fadduser-eth-metrics.png?alt=media" alt=""><figcaption><p>Results of <code>adduser</code> command</p></figcaption></figure>

### Install Ethereum Metrics Exporter

Download and build the Ethereum Metrics Exporter executable.

```bash
go install github.com/ethpandaops/ethereum-metrics-exporter@latest
```

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-77b89131222ec1d7a11b1e536c8e6a1aa3f85abc%2Fgo-install-eth-metrics.png?alt=media" alt=""><figcaption><p>Results of <code>go install</code> command</p></figcaption></figure>

Copy the executable to the `/usr/local/bin` directory.

```bash
sudo cp ~/go/bin/ethereum-metrics-exporter /usr/local/bin
```

### Create Supporting Directories

Create additional required directories.

```bash
sudo mkdir -p /var/local/lib/eth-metrics /etc/eth-metrics
```

### Configure Startup

Create a systemd service file to configure automatic startup of the Ethereum Metrics Exporter service for a single consensus/execution client pair.

```bash
sudo nano /etc/systemd/system/eth-metrics.service
```

Insert the following into the Ethereum Metrics Exporter systemd service file.

```
[Unit]
Description=Ethereum Metrics Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=eth-metrics
Group=eth-metrics
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/ethereum-metrics-exporter \
                --config /etc/eth-metrics/eth-metrics.yml \
                --metrics-port 9095

[Install]
WantedBy=multi-user.target
```

{% hint style="warning" %}
The default listening port for the Ethereum Metrics Exporter is 9090, which also happens to be the default listening port for Prometheus. In the service file above, the Ethereum Metrics Exporter port is re-assigned to 9095 through the `metrics port` flag.
{% endhint %}

{% hint style="info" %}
Each instance of Ethereum Metrics Exporter can only monitor a single consensus/execution client pair. If you need to monitor multiple consensus/execution client pairs using Ethereum Metrics Exporter, there are two options:

1. If each client pair is running on a separate host, it is easiest to follow the instructions above to install Ethereum Metrics Exporter on each host and configure it to query the local clients.
2. If multiple client pairs are running on the same host, or if you want to run all monitoring software from the same host, you will need to configure multiple instances of Ethereum Metrics Exporter on the same system. For each new client pair, copy the eth-metrics.service file above to a new unique name, and modify the configuration file and port specified in the `ExecStart` line to something unique across instances.
   {% endhint %}

### Notes

{% hint style="info" %}
Ethereum Metrics Exporter will listen on port 9095. This is the port from which Prometheus will query for metrics.
{% endhint %}

{% hint style="warning" %}
We have not yet configured nor started Ethereum Metrics Exporter.
{% endhint %}


# Configure Ethereum Clients

Configuration consensus and execution clients to serve metrics and API data

Each consensus and execution client must have the appropriate metrics services and APIs enabled and accessible to the supporting software. Find your clients below and ensure that the required command-line flags/configuration values are present in your startup scripts, configuration files, or service files.

{% hint style="info" %}
Refer to the guides you originally used to set up your clients for help determining where the following options should be set.
{% endhint %}

## Consensus Clients

{% tabs %}
{% tab title="Lighthouse" %}
In addition to other command-line flags, the following Lighthouse flags may be required to support the dashboard.

**Required**

* `--metrics` - Enables the Prometheus metrics service

**Optional**

* `--metrics-address 0.0.0.0` - Authorizes Lighthouse to answer metrics requests from other IP addresses. This is only required if you want to run Prometheus on a separate system

{% hint style="info" %}
The default metrics port for Lighthouse is 5054.

The default REST API port for Lighthouse is 5052.
{% endhint %}

{% hint style="warning" %}
If you would like other IP addresses to have access to Lighthouse's metrics, do not expose Lighthouse's metrics port to the Internet. Keep the metrics port closed at your router.
{% endhint %}
{% endtab %}

{% tab title="Lodestar" %}
In addition to other command-line flags, the following flags are required to support the dashboard.

**Required**

* `--metrics true` - Enables the Prometheus metrics service
* `--rest` - Enables the HTTP API

**Optional**

* `--metrics.address 0.0.0.0` - Authorizes Lodestar to answer metrics requests from other IP addresses. Only required if you want to run Prometheus on a separate system
* `--rest.address '0.0.0.0'` - Authorizes Lodestar to answer HTTP API requests from other IP addresses. Only required if you want to run Prometheus on a separate system

{% hint style="info" %}
The default metrics port for Lodestar is 8008.

The default REST API port for Lodestar is 9596.
{% endhint %}

{% hint style="warning" %}
If you would like other IP addresses to have access to Lodestar's metrics, do not expose Lodestar's port to the Internet. Keep the metrics port closed at your router.
{% endhint %}
{% endtab %}

{% tab title="Nimbus" %}
In addition to other command-line flags, the following Nimbus flags may be required to support the dashboard.

**Required**

* `--metrics` - Enables the Prometheus metrics service
* `--rest` - Enables the REST API

**Optional**

* `--metrics-address 0.0.0.0` - Authorizes Lighthouse to answer metrics requests from other IP addresses. Only required if you want to run Prometheus on a separate system.
* `--rest-address 0.0.0.0` - Authorizes Lighthouse to answer API requests from other IP addresses. Only required if you want to run Prometheus on a separate system.

{% hint style="info" %}
The default metrics port for Nimbus is 8008.

The default REST API port for Nimbus is 5052.
{% endhint %}

{% hint style="warning" %}
If you would like other IP addresses to have access to Nimbus' metrics, do not expose Nimbus' port to the Internet. Keep the metrics port closed at your router.
{% endhint %}
{% endtab %}

{% tab title="Prysm" %}
In addition to other command-line flags, the following flags are required to support the dashboard.

**Required**

* `--monitoring-host 0.0.0.0` - Authorizes Lighthouse to answer metrics requests from other IP addresses. Only required if you want to run Prometheus on a separate system.

**Optional**

* `--grpc-gateway-host '0.0.0.0'` - Authorizes Prysm to answer API requests from other IP addresses. Only required if you want to run Ethereum Metrics Exporter or json\_exporter on systems separate from Prysm.

{% hint style="info" %}
The default metrics port for the Prysm beacon chain is 8080.

The default metrics port for the Prysm validator is 8081.

The default REST API port for the Prysm beacon chain is 3500.
{% endhint %}

{% hint style="warning" %}
If you would like other IP addresses to have access to Prysm's metrics, do not expose Prysm's port to the Internet. Keep the metrics port closed at your router
{% endhint %}
{% endtab %}

{% tab title="Teku" %}
In addition to other command-line flags, the following Teku flags may be required to support the dashboard.

**Required**

* `--metrics-enabled` - Enables the Prometheus metrics service
* `--rest-api-enabled` - Enables the REST API
* `--metrics-categories=JVM,PROCESS,BEACON,DISCOVERY,EVENTBUS,EXECUTOR,LIBP2P,NETWORK,STORAGE,STORAGE_HOT_DB,STORAGE_FINALIZED_DB,REMOTE_VALIDATOR,VALIDATOR,VALIDATOR_PERFORMANCE` - Turns on all metrics

**Optional**

* `--metrics-interface 0.0.0.0` - Authorizes Teku to answer metrics requests from other IP addresses. Only required if you want to run Prometheus on a separate system.
* `--rest-api-interface 0.0.0.0` - Authorizes Teku to answer API requests from other IP addresses. Only required if you want to run Prometheus on a separate system.
* `--rest-api-host-allowlist 0.0.0.0` - Authorizes Teku to answer API requests from other IP addresses. Only required if you want to run Prometheus on a separate system.
* `--metrics-host-allowlist 0.0.0.0` - Authorizes Teku to answer metrics requests from other IP addresses. Only required if you want to run Prometheus on a separate system.

{% hint style="info" %}
The default metrics port for Teku is 8008.

The default REST API port for Teku is 5051.
{% endhint %}

{% hint style="warning" %}
If you would like other IP addresses to have access to Teku's metrics, do not expose Teku's port to the Internet. Keep the metrics port closed at your router
{% endhint %}
{% endtab %}
{% endtabs %}

## Execution Clients

{% tabs %}
{% tab title="Besu" %}
In addition to other command-line flags, the following Besu flags may be required to support the dashboard.

**Required**

* `--metrics-enabled` - Enables the Prometheus metrics service
* `--rpc-http-enabled` - Enables the HTTP API
* `--rpc-http-api=ETH,NET,WEB3,TXPOOL` - These API namespaces are required, in addition to any others you already use.
* `--metrics-protocol=PROMETHEUS` - Configures Besu to return metrics in Prometheus format
* `--metrics-category=BLOCKCHAIN,ETHEREUM,EXECUTORS,NETWORK,PEERS,PERMISSIONING,PRUNER,RPC,SYNCHRONIZER,TRANSACTION_POOL,STRATUM,JVM,PROCESS` - Turns on all metrics

**Optional**

* `--metrics-host=0.0.0.0` - Authorizes Besu to answer metrics requests from other IP addresses. Only required if you want to run Prometheus on a separate system.
* `--rpc-http-host=0.0.0.0` - Authorizes Besu to answer API requests from other IP addresses. Only required if you want to run Prometheus on a separate system.
* `--host-allowlist="*"` - TBD

{% hint style="info" %}
The default metrics port for Besu is 9545.

The default RPC port for Besu is 8545.
{% endhint %}

{% hint style="warning" %}
If you would like other IP addresses to have access to Besu's metrics, do not expose Besu's port to the Internet. Keep the metrics port closed at your router.
{% endhint %}
{% endtab %}

{% tab title="Erigon" %}
In addition to other command-line flags, the following Erigon flags may be required to support the dashboard.

**Required**

* `--metrics` - Enables the Prometheus metrics service
* `--http` - Enables the HTTP API
* `--http.api=eth,net,txpool,web3` - These API namespaces are required, in addition to any others you already use.
* `--private.api.addr=0.0.0.0:9091` - Required to change the private API port to from its default of 9090 to 9091. It conflicts with Prometheus' use of port 9090.

**Optional**

* `--metrics.addr 0.0.0.0` - Authorizes Erigon to answer metrics requests from other IP addresses. Only required if you want to run Prometheus on a separate system.
* `--http.addr 0.0.0.0` - Authorizes Erigon to answer API requests from other IP addresses. Only required if you want to run Prometheus on a separate system.

{% hint style="info" %}
The default metrics port for Erigon is 6060.

The default RPC port for Erigon is 8545.
{% endhint %}

{% hint style="warning" %}
If you would like other IP addresses to have access to Erigon's metrics, do not expose Erigon's port to the Internet. Keep the metrics port closed at your router.
{% endhint %}
{% endtab %}

{% tab title="Geth" %}
In addition to other command-line flags, the following Geth flags may be required to support the dashboard.

**Required**

* `--metrics` - Enables the Prometheus metrics service
* `--http` - Enables the HTTP API
* `--http.api net,web3,eth,txpool` -  These API namespaces are required, in addition to any others you already use.

**Optional**

* `--metrics.addr=0.0.0.0` - Authorizes Geth to answer metrics requests from other IP addresses. Only required if you want to run Prometheus on a separate system.
* `--http.addr=0.0.0.0` - Authorizes Geth to answer API requests from other IP addresses. Only required if you want to run Prometheus on a separate system.

{% hint style="info" %}
The default metric port for Geth is 6060.

The default RPC port for Geth is 8545.
{% endhint %}

{% hint style="warning" %}
If you would like other IP addresses to have access to Geth's metrics, do not expose Geth's port to the Internet. Keep the metrics port closed at your router.
{% endhint %}
{% endtab %}

{% tab title="Nethermind" %}
In addition to other command-line flags, the following Nethermind flags may be required to support the dashboard.

**Required**

* `--Metrics.Enabled true` - Enables the Prometheus metrics service
* `--Metrics.ExposePort 8080` - Required to open the metrics port

**Optional**

* `--JsonRpc.Host 0.0.0.0` - Authorizes Nethermind to answer API requests from other IP addresses. Only required if you want to run Prometheus on a separate system.

{% hint style="info" %}
The default metrics port for Nethermind is 8080.

The default RPC port for Nethermind is 8545.
{% endhint %}

{% hint style="warning" %}
If you would like other IP addresses to have access to Nethermind's metrics, do not expose Nethermind's port to the Internet. Keep the metrics port closed at your router.
{% endhint %}
{% endtab %}
{% endtabs %}

{% hint style="warning" %}
Restart all clients for which the configuration changed. Refer to the guides you originally used to set up your clients for help determining how to restart the clients and whether any configuration changes have taken effect.
{% endhint %}


# Configure Supporting Software

System independent software configurations

With all supporting software installed, we can begin configuring the software. The instructions in this section will install configurations that are not specific to the clients you are monitoring nor the systems on which they run.

1. [Configure json\_exporter](/dashboard-installation/configure-supporting-software/configure-json_exporter) - Add a configuration file that defines how to call various APIs and translate the responses into Prometheus metrics.
2. [Configure Prometheus Rules](/dashboard-installation/configure-supporting-software/configure-prometheus-rules) - Add a configuration file that defines queries for Prometheus to pre-process for efficiency.
3. [Configure Ethereum Metrics Exporter](/dashboard-installation/configure-supporting-software/configure-ethereum-metrics-exporter) - Add a configuration file that defines the consensus and execution clients to which Ethereum Metrics Exporter will connect.


# Configure json\_exporter

Configure how json\_exporter communicates with APIs

## Configure json\_exporter

{% hint style="danger" %}
The instructions below will overwrite your current `json_exporter.yml` file with a version that supports the Stake Local Dashboard. A backup will be made of your existing file, but it is up to you to merge the two files, if necessary.
{% endhint %}

{% hint style="warning" %}
This configuration requires json\_exporter v0.5.0 or later.
{% endhint %}

Back up your current `json_exporter.yml` file to your home directory, if you have one.

```bash
cp -v --backup=numbered /etc/json_exporter/json_exporter.yml ~/
```

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FHe7u3Pr1l8wK5HbV5Tqz%2Fcp-backup-json_exporter.png?alt=media&amp;token=7cf30a71-33b8-4dca-aa5b-4e683d2a9c03" alt=""><figcaption><p>Results of <code>cp</code> command</p></figcaption></figure>

### Install Rules from Repository

Copy the `json_exporter.yml` rules configuration file from the Stake Local Dashboard repository to `/etc/json_exporter/`.

```bash
cd ~/git/stakelocal-dashboard/config/json_exporter
sudo cp json_exporter.yml /etc/json_exporter
```


# Configure Prometheus Rules

Configure how Prometheus preprocesses data for efficiency

## Configuring Prometheus Rules

Prometheus rules improve query response times by precomputing expensive query expressions.

### Install Rules from Repository

Copy the `stakelocal_rules.yml` rules configuration file from the Stake Local Dashboard repository to `/etc/prometheus/rules.d/`.

```bash
cd ~/git/stakelocal-dashboard/config/prometheus/rules.d
sudo cp stakelocal_rules.yml /etc/prometheus/rules.d
```


# Configure Ethereum Metrics Exporter

Configure the consensus and execution clients to which Ethereum Metrics Exporter will listen

## Configure Ethereum Metrics Exporter

Edit the `eth-metrics.yml` file.

```bash
sudo nano /etc/eth-metrics/eth-metrics.yml
```

Insert the following text into the `eth-metrics.yml` file.

```yaml
consensus:
  enabled: true
  url: "<CONSENSUS_CLIENT_URL>"
  name: "<CONSENSUS_CLIENT_NAME>"
execution:
  enabled: true
  url: "<EXECUTION_CLIENT_URL>"
  name: "<EXECUTION_CLIENT_NAME>"
  modules:
    - "eth"
    - "net"
    - "web3"
    - "txpool"
pair:
  enabled: true
```

Make the following customizations to the text inserted:

1. Replace `<CONSENSUS_CLIENT_URL>` with the URL to your consensus client API. It should look similar to `http://localhost:3500/`. You can replace `localhost` with the IP address of your consensus client, if it is not running on the local host. Use the correct port for your consensus client.

   \
   **Default Consensus Client API Ports**

   1. Lighthouse: 5052
   2. Lodestar: 9596
   3. Nimbus: 5052
   4. Prysm: 3500
   5. Teku: 5051
2. Replace `<CONSENSUS_CLIENT_NAME>` with one of the following execution client names: `Lighthouse Beacon`, `Lodestar Beacon`, `Nimbus`, `Prysm Beacon`, `Teku`.
3. Replace `<EXECUTION_CLIENT_URL>` with the URL to your execution client API. It should look similar to `http://localhost:8545`. You can replace `localhost` with the IP address of your execution client, if it is not running on the local host. All execution clients use the same port.
4. Replace `<EXECUTION_CLIENT_URL>` with one of the following execution client names: `Besu`, `Erigon`, `Geth`, `Nethermind`.

When you are done making changes, you final `eth-metrics.yml` file might look something like the following.

```yaml
consensus:
  enabled: true
  url: "http://127.0.0.1:3500/"
  name: "Prysm Beacon"
execution:
  enabled: true
  url: "http://127.0.0.1:8545/"
  name: "Geth"
  modules:
    - "eth"
    - "net"
    - "web3"
    - "txpool"
pair:
  enabled: true
```

Save the file and exit the editor.


# Prometheus Jobs & Targets

Configure the client data sources from which Prometheus will scrape data

## Prometheus Jobs & Targets

A Prometheus `job` represents a set of rules for processing client metrics from similar data sources/targets. A Prometheus `target` is a single data source from which Prometheus should collect and process data using the rules of a specific job. Prometheus jobs are collections of targets for which the same rules are applied.

The `consensus_node_version` job is one example. This job is configured to build a URL to a consensus API endpoint and pass that URL to json\_exporter to parse the results. This job may be configured for multiple consensus client targets, allowing monitoring of Lighthouse, Lodestar, Nimbus, Prysm, and Teku with the same rules simultaneously.

In this section we will set up the Prometheus jobs required for the dashboard. Then we will move on to configuring the various Prometheus targets your specific Ethereum clients.


# Prometheus Jobs

Configure the Prometheus jobs to which targets will be assigned

## Prometheus Jobs

### Configure prometheus.yml

{% hint style="danger" %}
The instructions below will overwrite your current `prometheus.yml` file with a version that supports the Stake Local Dashboard. A backup will be made of your existing file, but it is up to you to merge the two files, if necessary.

Many existing Ethereum client dashboards will work with this `prometheus.yml` file as-is or with minimal changes. See [Optional: Alternative Dashboard Compatibility](/dashboard-installation/optional-alternative-dashboard-compatibility) for a guide to maintaining compatibility with other dashboards.
{% endhint %}

Back up your current `prometheus.yml` file to your home directory, if you have one.

```bash
cp -v --backup=numbered /etc/prometheus/prometheus.yml ~/
```

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-d1a5db4548c569514c4e80f171c3de1e96ce5ca7%2Fcp-backup-prometheus.png?alt=media" alt=""><figcaption><p>Results of <code>cp</code> command</p></figcaption></figure>

Copy the `prometheus.yml` rules configuration file from the Stake Local Dashboard repository to `/etc/prometheus/`.

```bash
cd ~/git/stakelocal-dashboard/config/prometheus/
sudo cp prometheus.yml /etc/prometheus
```

### Check Configuration

Check the configuration with `promtool`.

```bash
sudo promtool check config /etc/prometheus/prometheus.yml
```

{% hint style="info" %}
You will get many warnings about files that do not exist. These are the target files that have not yet been configured. This is not a problem.
{% endhint %}

Look for "SUCCESS" messages similar to the following for both the configuration file and the rules file.

```
SUCCESS: /etc/prometheus/prometheus.yml is valid prometheus config file syntax
SUCCESS: 46 rules found
```

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-475cf789ff7422cd67e8179e842539bcccf098d0%2Fpromtool-check.png?alt=media" alt=""><figcaption><p>A successful <code>promtool check</code> command</p></figcaption></figure>

If you see the output above, then you have successfully configured the Prometheus jobs.


# About Stake Local Labels

How Stake Local uses Prometheus Labels

## About Stake Local Labels

In Prometheus, `labels` are used to tag data as it is collected. Labels can be defined by the data source, by Prometheus directly, by the Prometheus target configuration, and by the Prometheus job configuration. The Stake Local Dashboard uses labels extensively for categorization, filtering, configuration, and interoperability between data source. These labels are defined in the Prometheus target configuration files configured in the next few sections.

As you configure the Prometheus targets, update the labels as needed for your staking architecture.

{% hint style="warning" %}
Nearly all of the labels required by the dashboard have reasonable default values that will work as-is for monitoring a mainnet consensus/execution group. You can leave the default values or update them later to customize your dashboard.

**Note:** Changing the labels at a later time may cause the colors on some dashboard panels to change at the point in time where the label values changed.
{% endhint %}

### network

The `network` label is used to tag the Ethereum network that applies to the data source. These labels are used to display the network name in some dashboard panels, and can be used for creating new panels that compare different networks.

Example values:

* Mainnet
* Goerli
* Sepolia

Default value: Mainnet

{% hint style="info" %}
Some of the Prometheus targets will not be associated with a specific network. For example, the GitHub target is not specific to a particular Ethereum network.
{% endhint %}

### host

The `host` label is used to tag the host/system on which clients/services are running. This is primarily used for filtering node\_exporter data to specific hosts, but it is also used to compare metrics across all software running on the same host.

Example values:

* nuc01
* Prysm/Geth Mainnet System
* sir-stake-a-lot

Default value: Default Host

### service

The `service` label is used to define the display name of the service being run. This is the name of the service as it will show up on the dashboard panels.

A unique name should be given to each client instance to ensure that clients can be distinguished from one another, particularly if you are running multiple instances of a client.

Consensus clients with separate beacon and validator metrics should be distinguished in their service label.

Example values:

* Prysm Beacon
* Teku
* Nimbus
* Lighthouse Beacon
* Lodestar Beacon
* Geth
* Erigon
* Nethermind
* Besu
* Prysm Validator
* Lighthouse Validator
* Prysm Mainnet
* Lighthouse Goerli
* Geth Sepolia
* Internet Testnet 02

Default value: Client specific

### client

The `client` label is used to match GitHub release information to the current running client. Values appear similar to the default service label values, these values should not be modified.

Example values:

* Prysm
* Geth
* Lighthouse
* Lodestar
* Erigon
* Besu
* Teku
* Nimbus
* Nethermind

Default value: Client specific

{% hint style="warning" %}
Do not modify the client labels from their default values. This may negatively affect GitHub integration.
{% endhint %}

### group

The `group` label is primarily used to name consensus/execution client pairs and their supporting software. This allows the dashboard to display results for only those services supporting a single client pair. To work correctly, the group label must be spelled identically for all software in the same group.

Example values:

* Prysm/Geth Mainnet
* Teku/Besu Goerli
* Mainnet

Default value: Default Group

{% hint style="info" %}
Some of the Prometheus targets will not be associated with a specific group. For example, the GitHub target is not specific to a particular consensus/execution client group.
{% endhint %}

### explorer

The `explorer` label configures the domain name of the third-party consensus or execution layer explorer for external links in dashboard panels. The explorer label should be customized for the Ethereum network and layer (consensus/execution) of the data source.

{% hint style="info" %}
By default, consensus clients are configured to go to `beaconcha.in` and execution clients are configured to go to `etherscan.io`. Other explorers can be used if their URL paths are the same as those for the current explorers.
{% endhint %}

Example values:

* beaconcha.in
* etherscan.io
* goerli.beaconcha.in
* goerli.etherscan.io
* sepolia.beaconcha.in
* sepolia.etherscan.io

Default values: beaconcha.in or etherscan.io

### json\_exporter

The `json_exporter` label is used to define the instance of json\_exporter that will be handling API requests for the Prometheus target.

{% hint style="info" %}
Keep the default value unless you are running json\_exporter on a different host than Prometheus.
{% endhint %}

Example values:

* 127.0.0.1:7979
* 192.168.0.10:7979
* localhost:7979

Default value: 127.0.0.1:7979

### instance

The `instance` label defines the address and port of the client API from which Ethereum address and validator statuses/balances are collected. Ethereum address Prometheus targets must have the address and port of an execution client defined, while validator Prometheus targets must have the address and port of a consensus client defined.

Example values:

* 127.0.0.1:5052
* localhost:5051
* 192.168.0.10:8545

Execution client default value: 127.0.0.1:8545

{% hint style="warning" %}
A port is not provided for the consensus client default value, because consensus clients do not all use the same port for their API. This value must be updated during the configuration process.
{% endhint %}


# Base Targets Installation

Install default Prometheus targets that we can edit later

Download and unpack the archive of default target configuration files. This will install configuration files for all supported clients. We can [clean up the unused target](/dashboard-installation/prometheus-jobs-and-targets/clean-up-unused-targets) files later.

```bash
cd ~/git/stakelocal-dashboard
sudo tar xzvf stakelocal_prometheus_targets.tgz -C /etc/prometheus/files_sd
```

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FLBNkULJHj5Qk5cFSsvFO%2Ftar-stakelocal-prometheus-targets.png?alt=media&amp;token=dd2185c6-80fb-449a-a849-296d513b29d3" alt=""><figcaption><p>Results of <code>tar</code> command</p></figcaption></figure>

Clean up the archive file now that we have unpacked it.

```bash
rm stakelocal_prometheus_targets.tgz
```

Most of the targets unpacked will have default IP addresses, ports, and label values suitable to get the dashboard up and running quickly without modification.

Specifically, the default target files assume the following.

* All clients and supporting software are accessible at 127.0.0.1 from any other client.
* All clients and supporting software are using the ports defined in this guide, nearly all of which are the client default ports.

And the default labels are assigned as follows.

* Where used, the `network` label is set to "Mainnet".
* Where used, the `host` label is set to "Default Host".
* Where used, the `group` label is set to "Default Group".
* Where used, the `explorer` label is set to "beaconcha.in" or "etherscan.io".

If these assumptions and defaults are acceptable, you can jump ahead to [Ethereum Address Targets](/dashboard-installation/prometheus-jobs-and-targets/ethereum-address-targets) and continue from there. Changes can always be made later, and Prometheus will automatically reload these configuration files without running any restart/reload commands.

{% hint style="info" %}
You may want to review and update the label values now. Label values that are changed in the future may cause historical data to appear as a different data series with separate colors/legends for as long as the historical data is within view.
{% endhint %}

If your clients or supporting software are not accessible at `127.0.0.1` or are running on non-standard ports, you must continue to the next sections.

The following sections will guide you through a review of the Prometheus targets we just unpacked. Making changes as necessary to IP addresses, ports, or labels.


# Consensus Client Targets

Customize the default consensus client targets

## Consensus Client Targets

Consensus client data is collected by Prometheus from three different sources:

1. Directly from the client metrics page
2. Indirectly from the client API via json\_exporter
3. Indirectly from the client API via Ethereum Metrics Exporter

We will review the configuration files for the first two here. Ethereum Metrics Exporter is covered in a later section.

{% hint style="info" %}
If you would like to monitor more than one instance of the same client, please see the [Additional Modifications](/additional-modifications) section for details.
{% endhint %}

### Consensus Client Metrics Configuration

To configure the Prometheus target for client metrics, follow the instructions for your client below.

{% tabs %}
{% tab title="Lighthouse" %}
Edit the Lighthouse configuration file in the `/etc/prometheus/files_sd/stakelocal/consensus_metrics` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/consensus_metrics/lighthouse.yml
```

It should look like the following.

```
    - targets: ['127.0.0.1:5054']
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Lighthouse Beacon'
        group: 'Default Group'
        explorer: 'beaconcha.in'
```

If this instance of Lighthouse is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.
{% endtab %}

{% tab title="Lodestar" %}
Edit the Lodestar configuration file in the `/etc/prometheus/files_sd/stakelocal/consensus_metrics` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/consensus_metrics/lodestar.yml
```

It should look like the following.

```
    - targets: ['127.0.0.1:8008']
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Lodestar Beacon'
        group: 'Default Group'
        explorer: 'beaconcha.in'
```

If this instance of Lodestar is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.
{% endtab %}

{% tab title="Nimbus" %}
Edit the Nimbus configuration file in the `/etc/prometheus/files_sd/stakelocal/consensus_metrics` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/consensus_metrics/nimbus.yml
```

It should look like the following.

```
    - targets: ['127.0.0.1:8008']
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Nimbus'
        group: 'Default Group'
        explorer: 'beaconcha.in'
```

If this instance of Nimbus is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.
{% endtab %}

{% tab title="Prysm" %}
Edit the Prysm configuration file in the `/etc/prometheus/files_sd/stakelocal/consensus_metrics` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/consensus_metrics/prysm.yml
```

It should look like the following.

```
    - targets: ['127.0.0.1:8080']
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Prysm Beacon'
        group: 'Default Group'
        explorer: 'beaconcha.in'
```

If this instance of Prysm is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.
{% endtab %}

{% tab title="Teku" %}
Edit the Teku configuration file in the `/etc/prometheus/files_sd/stakelocal/consensus_metrics` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/consensus_metrics/teku.yml
```

It should look like the following.

```
    - targets: ['127.0.0.1:8008']
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Teku'
        group: 'Default Group'
        explorer: 'beaconcha.in'
```

If this instance of Teku is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.
{% endtab %}
{% endtabs %}

An example consensus client metrics target file for the Goerli network could look like the following.

```
    - targets: ['192.168.0.42:8080']
      labels:
        network: 'Goerli'
        host: 'server12'
        service: 'Prysm Beacon'
        group: 'Goerli Prysm/Geth'
        explorer: 'goerli.beaconcha.in'
```

### Consensus Client API Configuration

To configure the Prometheus target for client APIs, follow the instructions for your client below.

{% tabs %}
{% tab title="Lighthouse" %}
Edit the Lighthouse configuration file in the `/etc/prometheus/files_sd/stakelocal/consensus_apis` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/consensus_apis/lighthouse.yml
```

It should look like the following.

```
    - targets: ['127.0.0.1:5052']
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Lighthouse Beacon'
        group: 'Default Group'
        explorer: 'beaconcha.in'
```

If this instance of Lighthouse is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.
{% endtab %}

{% tab title="Lodestar" %}
Edit the Lodestar configuration file in the `/etc/prometheus/files_sd/stakelocal/consensus_apis` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/consensus_apis/lodestar.yml
```

It should look like the following.

```
    - targets: ['127.0.0.1:9596']
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Lodestar Beacon'
        group: 'Default Group'
        explorer: 'beaconcha.in'
```

If this instance of Lodestar is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.
{% endtab %}

{% tab title="Nimbus" %}
Edit the Nimbus configuration file in the `/etc/prometheus/files_sd/stakelocal/consensus_apis` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/consensus_apis/nimbus.yml
```

It should look like the following.

```
    - targets: ['127.0.0.1:5052']
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Nimbus'
        group: 'Default Group'
        explorer: 'beaconcha.in'
```

If this instance of Nimbus is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.
{% endtab %}

{% tab title="Prysm" %}
Edit the Prysm configuration file in the `/etc/prometheus/files_sd/stakelocal/consensus_apis` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/consensus_apis/prysm.yml
```

It should look like the following.

<pre><code><strong>    - targets: ['127.0.0.1:3500']
</strong>      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Prysm Beacon'
        group: 'Default Group'
        explorer: 'beaconcha.in'
</code></pre>

If this instance of Prysm is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.
{% endtab %}

{% tab title="Teku" %}
Edit the Teku configuration file in the `/etc/prometheus/files_sd/stakelocal/consensus_apis` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/consensus_apis/teku.yml
```

It should look like the following.

```
    - targets: ['127.0.0.1:5051']
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Teku'
        group: 'Default Group'
        explorer: 'beaconcha.in'
```

If this instance of Teku is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.
{% endtab %}
{% endtabs %}

An example consensus client API target file for the Mainnet network could look like the following.

```
    - targets: ['127.0.0.1:5051']
      labels:
        network: 'Mainnet'
        host: 'wopr'
        service: 'Backup Teku'
        group: 'Mainnet Teku/Besu'
        explorer: 'beaconcha.in'
```


# Execution Client Targets

Customize the default execution client targets

## Execution Client Targets

Execution client data is collected by Prometheus from three different sources:

1. Directly from the client metrics page
2. Indirectly from the client API via json\_exporter
3. Indirectly from the client API via Ethereum Metrics Exporter

We will set up the first two here. Ethereum Metrics Exporter is covered in a later section.

{% hint style="info" %}
If you would like to monitor more than one instance of the same client, please see the Additional Modifications section for details.
{% endhint %}

### Execution Client Metrics Configuration

To configure the Prometheus target for client metrics, follow the instructions for your client below.

{% tabs %}
{% tab title="Besu" %}
Edit the Besu configuration file in the `/etc/prometheus/files_sd/stakelocal/execution_metrics` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/execution_metrics/besu.yml
```

It should look like the following.

```
    - targets: ['127.0.0.1:9545']
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Besu'
        group: 'Default Group'
        explorer: 'etherscan.io'
```

If this instance of Besu is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.
{% endtab %}

{% tab title="Erigon" %}
Edit the Erigon configuration file in the `/etc/prometheus/files_sd/stakelocal/execution_metrics` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/execution_metrics/erigon.yml
```

It should look like the following.

```
    - targets: ['127.0.0.1:6060']
      labels:
        network: 'Mainnet'
        service: 'Erigon'
        host: 'Default Host'
        group: 'Default Group'
        explorer: 'etherscan.io'
```

If this instance of Erigon is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.
{% endtab %}

{% tab title="Geth" %}
Edit the Geth configuration file in the `/etc/prometheus/files_sd/stakelocal/execution_metrics` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/execution_metrics/geth.yml
```

It should look like the following.

```
    - targets: ['127.0.0.1:6060']
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Geth'
        group: 'Default Group'
        explorer: 'etherscan.io'
```

If this instance of Geth is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.
{% endtab %}

{% tab title="Nethermind" %}
Edit the Nethermind configuration file in the `/etc/prometheus/files_sd/stakelocal/execution_metrics` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/execution_metrics/nethermind.yml
```

It should look like the following.

```
    - targets: ['127.0.0.1:8080']
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Nethermind'
        group: 'Default Group'
        explorer: 'etherscan.io'
```

If this instance of Nethermind is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.
{% endtab %}
{% endtabs %}

An example execution client API target file for the Sepolia network could look like the following.

```
    - targets: ['localhost:8080']
      labels:
        network: 'Sepolia'
        host: 'nuc'
        service: 'Nethermind'
        group: 'Sepolia Nimbus/Nethermind'
        explorer: 'sepolia.etherscan.io'
```

### Execution Client API Configuration

To configure the Prometheus target for client APIs, follow the instructions for your client below.

{% tabs %}
{% tab title="Besu" %}
Edit the Besu configuration file in the `/etc/prometheus/files_sd/stakelocal/execution_apis` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/execution_apis/besu.yml
```

It should look like the following.

```
    - targets: ['127.0.0.1:8545']
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Besu'
        group: 'Default Group'
        explorer: 'etherscan.io'
        json_exporter: '127.0.0.1:7979'
        client: 'Besu'
```

If this instance of Besu is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions. The `json_exporter` and `client` labels may be left as-is.

Save the file and exit the editor.
{% endtab %}

{% tab title="Erigon" %}
Edit the Erigon configuration file in the `/etc/prometheus/files_sd/stakelocal/execution_apis` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/execution_apis/erigon.yml
```

It should look like the following.

```
    - targets: ['127.0.0.1:8545']
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Erigon'
        group: 'Default Group'
        explorer: 'etherscan.io'
        json_exporter: '127.0.0.1:7979'
        client: 'Erigon'
```

If this instance of Erigon is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions. The `json_exporter` and `client` labels may be left as-is.

Save the file and exit the editor.
{% endtab %}

{% tab title="Geth" %}
Edit the Geth configuration file in the `/etc/prometheus/files_sd/stakelocal/execution_apis` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/execution_apis/geth.yml
```

It should look like the following.

```
    - targets: ['127.0.0.1:8545']
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Geth'
        group: 'Default Group'
        explorer: 'etherscan.io'
        json_exporter: '127.0.0.1:7979'
        client: 'Geth'
```

If this instance of Geth is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions. The `json_exporter` and `client` labels may be left as-is.

Save the file and exit the editor.
{% endtab %}

{% tab title="Nethermind" %}
Edit the Nethermind configuration file in the `/etc/prometheus/files_sd/stakelocal/execution_apis` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/execution_apis/nethermind.yml
```

It should look like the following.

```
    - targets: ['127.0.0.1:8545']
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Nethermind'
        group: 'Default Group'
        explorer: 'etherscan.io'
        json_exporter: '127.0.0.1:7979'
        client: 'Nethermind'
```

If this instance of Nethermind is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions. The `json_exporter` and `client` labels may be left as-is.

Save the file and exit the editor.
{% endtab %}
{% endtabs %}

An example execution client metrics target file for the Goerli network could look like the following.

```
    - targets: ['192.168.0.12:8545']
      labels:
        network: 'Goerli'
        host: 'mrwhiskers'
        service: 'Erigon'
        group: 'Goerli Lighthouse/Erigon'
        explorer: 'goerli.etherscan.io'
        json_exporter: '127.0.0.1:7979'
        client: 'Erigon'
```


# Validator Client Targets

Customize the default validator client targets

## Validator Client Targets

Prometheus may also collect metrics data from validator clients that run as a separate process from the beacon chain client. Some validator clients produce more detailed validator status information than available from beacon chain clients.

{% hint style="warning" %}
Validator clients for Lighthouse, Lodestar, and Prysm have been tested with the dashboard.
{% endhint %}

{% hint style="info" %}
If you would like to monitor more than one instance of the same client, please see the Additional Modifications section for details.
{% endhint %}

### Validator Client Metrics Configuration

To configure the Prometheus target for client metrics, follow the instructions for your client below.

{% tabs %}
{% tab title="Lighthouse" %}
Edit the Lighthouse configuration file in the `/etc/prometheus/files_sd/stakelocal/validator_metrics` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/validator_metrics/lighthouse.yml
```

It should look like the following.

```yaml
    - targets: ['127.0.0.1:5064']
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Lighthouse Validator'
        group: 'Default Group'
```

If this instance of Lighthouse is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.
{% endtab %}

{% tab title="Lodestar" %}
Edit the Lodestar configuration file in the `/etc/prometheus/files_sd/stakelocal/validator_metrics` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/validator_metrics/lodestar.yml
```

It should look like the following.

```yaml
    - targets: ['127.0.0.1:5064']
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Lodestar Validator'
        group: 'Default Group'
```

If this instance of Lodestar is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.
{% endtab %}

{% tab title="Prysm" %}
Edit the Prysm configuration file in the `/etc/prometheus/files_sd/stakelocal/validator_metrics` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/validator_metrics/prysm.yml
```

It should look like the following.

```yaml
    - targets: ['127.0.0.1:8081']
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Prysm Validator'
        group: 'Default Group'
```

If this instance of Prysm is accessible at a different IP address or port, update those in the `targets` line.

Update the `network`, `host`, `service`, `group` and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.
{% endtab %}
{% endtabs %}

An example validator client metrics target file for the Goerli network could look like the following.

```
    - targets: ['127.0.0.1:5064']
      labels:
        network: 'Goerli'
        host: 'stakemaster5000'
        service: 'Lodestar Validator - Goerli'
        group: 'Goerli Lodestar/Geth'
```


# node\_exporter Target

Customize the default node\_exporter target

## node\_exporter Target

Edit the node\_exporter configuration file in the `/etc/prometheus/files_sd/stakelocal/other` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/other/node_exporter.yml
```

It should look like the following.

```yaml
    - targets: ['127.0.0.1:9100']
      labels:
        host: 'Default Host'
        service: 'Node Exporter'
        client: 'Node Exporter'
```

If this instance of node\_exporter is accessible at a different IP address or port, update those in the `targets` line.

Update the `host` or `service` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.

An example target file could look like the following.

```
    - targets: ['127.0.0.1:9100']
      labels:
        host: 'host043'
        service: 'Node Exporter'
        client: 'Node Exporter'
```


# json\_exporter Target

Customize the default json\_exporter target

## json\_exporter Target

Edit the json\_exporter configuration file in the `/etc/prometheus/files_sd/stakelocal/other` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/other/json_exporter.yml
```

It should look like the following.

```yaml
    - targets: ['127.0.0.1:7979']
      labels:
        host: 'Default Host'
        service: 'JSON Exporter'
        client: 'JSON Exporter'
```

If this instance of json\_exporter is accessible at a different IP address or port, update those in the `targets` line.

Update the `host` or `service` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.

An example target file could look like the following.

```
    - targets: ['127.0.0.1:7979']
      labels:
        host: 'MacBook'
        service: 'JSON Exporter'
        client: 'JSON Exporter'
```


# Ethereum Metrics Exporter Targets

Customize the default Ethereum Metrics Exporter target

## Ethereum Metrics Exporter Targets

For accessing Ethereum client APIs, Ethereum Metrics Exporter has an advantage over json\_exporter. It can craft API queries that json\_exporter cannot, and it maintains state over time, allowing it to subscribe to events, for example.

The dashboard was nearly complete before Ethereum Metrics Exporter was incorporated. There is overlap in the data provided by Ethereum Metrics Exporter and json\_exporter, but both have been retained in the solution for now.

{% hint style="info" %}
The redundant API calls may be removed in the future. For now, having both sources of data provides some flexibility to not install Ethereum Metrics Exporter and still have much of the same functionality. A small number of dashboard panels will stop working entirely if Ethereum Metrics Exporter is not installed.
{% endhint %}

Edit the Ethereum Metrics Exporter configuration file in the `/etc/prometheus/files_sd/stakelocal/other/` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/other/eth-metrics.yml
```

It should look like the following.

```yaml
    - targets: ['127.0.0.1:9095']
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: 'Ethereum Metrics Exporter'
        group: 'Default Group'
        client: 'Ethereum Metrics Exporter'
```

If the Ethereum Metrics Exporter instance being queried is not on the local host or uses a non-standard port, update those on the `targets` line.

Update the `network`, `host`, `service`, and `group` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

{% hint style="info" %}
Each instance of Ethereum Metrics Exporter can only serve a single pair of consensus and execution clients. Repeat this configuration for each instance of Ethereum Metrics Exporter to be monitored.
{% endhint %}

Save the file and exit the editor.

An example target file could look like the following.

```
    - targets: ['192.168.2.6:9095']
      labels:
        network: 'Mainnet'
        host: 'nuc'
        service: 'Ethereum Metrics - Lodestar/Erigon'
        group: 'Mainnet Lodestar/Erigon'
        client: 'Ethereum Metrics Exporter'
```

{% hint style="info" %}
Reminder: We are running Ethereum Metrics Exporter on a custom port (9095). The default port is 9090.
{% endhint %}


# Third-Party Targets

## Third-Party Targets

The following two targets allow the Stake Local dashboard to access information from external APIs.

### GitHub

GitHub provides details about the latest release of software packages in use.

View the GitHub configuration file in the `/etc/prometheus/files_sd/stakelocal/other` directory.

```bash
cat /etc/prometheus/files_sd/stakelocal/other/github.yml
```

It should look like the following.

```yaml
    - targets: [ 'ledgerwatch/erigon' ]
      labels:
        client: 'Erigon'
    - targets: [ 'nethermindeth/nethermind' ]
      labels:
        client: 'Nethermind'
    - targets: [ 'ethereum/go-ethereum' ]
      labels:
        client: 'Geth'
    - targets: [ 'hyperledger/besu' ]
      labels:
        client: 'Besu'
    - targets: [ 'prysmaticlabs/prysm' ]
      labels:
        client: 'Prysm'
    - targets: [ 'consensys/teku' ]
      labels:
        client: 'Teku'
    - targets: [ 'status-im/nimbus-eth2' ]
      labels:
        client: 'Nimbus'
    - targets: [ 'sigp/lighthouse' ]
      labels:
        client: 'Lighthouse'
    - targets: [ 'attestantio/dirk' ]
      labels:
        client: 'Dirk'
    - targets: [ 'attestantio/vouch' ]
      labels:
        client: 'Vouch'
    - targets: [ 'chainsafe/lodestar' ]
      labels:
        client: 'Lodestar'
    - targets: [ 'prometheus/prometheus' ]
      labels:
        client: 'Prometheus'
    - targets: [ 'prometheus/node_exporter' ]
      labels:
        client: 'Node Exporter'
    - targets: [ 'prometheus/blackbox_exporter' ]
      labels:
        client: 'Blackbox Exporter'
    - targets: [ 'prometheus-community/json_exporter' ]
      labels:
        client: 'JSON Exporter'
    - targets: [ 'ethpandaops/ethereum-metrics-exporter' ]
      labels:
        client: 'Ethereum Metrics Exporter'
    - targets: [ 'grafana/grafana' ]
      labels:
        client: 'Grafana'
```

{% hint style="info" %}
No changes are required for this file.
{% endhint %}

### CoinGecko

CoinGecko provides the latest ETH price in multiple fiat values.

View the CoinGecko configuration file in the `/etc/prometheus/files_sd/stakelocal/other` directory.

```bash
cat /etc/prometheus/files_sd/stakelocal/other/coingecko.yml
```

It should look like the following.

```yaml
    - targets: ['usd,eur,jpy,gbp,aud,cad,chf,cny,hkd,nzd,ils,krw,mxn,rub,sgd,twd,inr']
      labels:
        source: 'CoinGecko'
```

{% hint style="info" %}
No changes are required for this file.
{% endhint %}


# Ethereum Address Targets

Add targets for Ethereum addresses to be monitored

## Ethereum Address Targets

The Stake Local Dashboard can monitor the balance of fee addresses, withdrawal addresses, or any other Ethereum address. Due to the limited data available, it cannot provide accurate long-term reporting of earnings/fees. However, it can provide address balances and their annualized rates of change a calculated over various periods.

Edit the addresses configuration file in the `/etc/prometheus/files_sd/stakelocal/` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/addresses.yml
```

It should look like the following.

```yaml
    - targets: []
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: ''
        group: 'Default Group'
        instance: '127.0.0.1:8545'
        explorer: 'etherscan.io'
```

Update the `targets` line to include a comma-delimited list of Ethereum addresses to be monitored in between the square brackets.

Example values:

* `-targets: [ 0x0000000000000000000000000000000000000000, 0x0000000000000000000000000000000000000000, 0x0000000000000000000000000000000000000000 ]`
* `-targets: [ "0x0000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000" ]`
* `-targets: [ '0x0000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000' ]`

If the execution client being queried is not on the local host or uses a non-standard port, update those on the `instance` line.

Update the `network`, `host`, `service`, `group`, and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

{% hint style="info" %}
The service label is optional. It only serves to identify the type of client being queried in Ethereum address requests, but the value itself is not presently used in the dashboard.
{% endhint %}

An example `addresses.yml` file for the Goerli network could look like the following.

```
    - targets: [ 0x0000000000000000000000000000000000000000, 0x0000000000000000000000000000000000000000 ]
      labels:
        network: 'Goerli'
        host: 'nuc'
        service: 'Geth'
        group: 'Goerli Prysm/Geth'
        instance: '127.0.0.1:8545'
        explorer: 'goerli.etherscan.io'
```

Save the file and exit the editor.


# Validator Public Key Targets

Add targets for Ethereum addresses to be monitored

## Validator Public Key Targets

Prometheus collects individual validator balances and status information from consensus clients via json\_exporter. Validators may be specified by public key or validator index.

Edit the validator configuration file in the `/etc/prometheus/files_sd/stakelocal/` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/validators.yml
```

It should look like the following.

```yaml
    - targets: [ ]
      labels:
        network: 'Mainnet'
        host: 'Default Host'
        service: ''
        group: 'Default Group'
        instance: '127.0.0.1:3500'
        explorer: 'beaconcha.in'
```

Update the `targets` line to include a comma-delimited list of validator public keys or indices to be monitored in between the square brackets.

Example values:

* `-targets: [ 1, 2, 3, 4, 5 ]`
* `-targets: [ 0x0000000000000000000000000000000000000000, 0x0000000000000000000000000000000000000000, 0x0000000000000000000000000000000000000000 ]`
* `-targets: [ 1, "2", '3', 0x0000000000000000000000000000000000000000, "0x0000000000000000000000000000000000000000", '0x0000000000000000000000000000000000000000']`

If the consensus client being queried is not on the local host or uses a non-standard port, update those on the `instance` line.

Update the `network`, `host`, `service`, `group`, and `explorer` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

{% hint style="info" %}
The service label is optional. It only serves to identify the type of client being queried in Ethereum address requests, but the value itself is not presently used in the dashboard.
{% endhint %}

An example `validators.yml` file for the Goerli network could look like the following.

```
    - targets: [ 1, 2, 3 ]
      labels:
        network: 'Goerli'
        host: 'nuc'
        service: 'Prysm Beacon'
        group: 'Goerli Prysm/Geth'
        instance: '127.0.0.1:3500'
        explorer: 'goerli.beaconcha.in'
```

Save the file and exit the editor.


# Optional: Grafana Target

Monitor some basic detail about Grafana

## Grafana

### Create Prometheus Target

The Stake Local dashboard provides only basic, high-level information about Grafana. It may only include memory use, version information, and latest GitHub release. Configuring this target is optional.

Edit the Grafana configuration file in the `/etc/prometheus/files_sd/stakelocal/other` directory.

<pre class="language-bash"><code class="lang-bash"><strong>sudo nano /etc/prometheus/files_sd/stakelocal/other/grafana.yml
</strong></code></pre>

It should look like the following.

```yaml
    - targets: ['127.0.0.1:3000']
      labels:
        host: 'Default Host'
        service: 'Grafana'
        client: 'Grafana'
```

If this instance of Grafana is accessible at a different IP address or port, update those in the `targets` line.

Update the `host` and `service` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.

### Configure Grafana Monitoring

Turn on Grafana metrics by editing the Grafana configuration file.

```bash
sudo nano /etc/grafana/grafana.ini
```

Uncomment the `enabled = true` and `disable_total_stats = false` lines in the `[metrics]` section by removing the leading semicolon.

The following is an example from [Grafana's documentation on enabling metrics](https://grafana.com/docs/grafana/latest/setup-grafana/set-up-grafana-monitoring/#pull-metrics-from-grafana-into-prometheus).

```
# Metrics available at HTTP URL /metrics and /metrics/plugins/:pluginId
[metrics]
# Disable / Enable internal metrics
enabled           = true

# Disable total stats (stat_totals_*) metrics to be generated
disable_total_stats = false
```

Save the file and exit the editor.


# Optional: Prometheus Target

Monitor some basic details about Prometheus

## Prometheus Target

The Stake Local dashboard provides only basic, high-level information about Prometheus. It may include memory use, version information, and latest GitHub release. Configuring this target is optional.

Edit the Prometheus configuration file in the `/etc/prometheus/files_sd/stakelocal/other` directory.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/other/prometheus.yml
```

It should look like the following.

```yaml
    - targets: ['127.0.0.1:9090']
      labels:
        host: 'Default Host'
        service: 'Prometheus'
        client: 'Prometheus'
```

If this instance of Prometheus is accessible at a different IP address or port, update those in the `targets` line.

Update the `host` or `service` labels, as needed. See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) for label definitions.

Save the file and exit the editor.

An example `prometheus.yml` file could look like the following.

```
    - targets: ['10.0.2.54:9090']
      labels:
        host: 'gringotts'
        service: 'Prometheus'
        client: 'Prometheus'
```


# Clean Up Unused Targets

Remove Prometheus target configurations for clients not in use

We started by unpacking an archive of Prometheu target files, and have now made modifications to files for clients we intend to use. At this point we may have many more target files installed for clients we do not intend to use.

Remove the target configuration files for clients you do not intend to use. Do not delete the target configuration files we have already customized and intend to use.

{% hint style="danger" %}
**Warning:** Do not delete target configuration files for clients you are using.
{% endhint %}

Here are commands to delete unwanted execution client target configuration files.

{% tabs %}
{% tab title="Besu" %}
Only run these commands if you are **NOT** monitoring Besu with the Stake Local Dashboard.

```bash
sudo rm -i /etc/prometheus/files_sd/stakelocal/execution_metrics/besu.yml
sudo rm -i /etc/prometheus/files_sd/stakelocal/execution_apis/besu.yml
```

{% endtab %}

{% tab title="Erigon" %}
Only run these commands if you are **NOT** monitoring Erigon with the Stake Local Dashboard.

```bash
sudo rm -i /etc/prometheus/files_sd/stakelocal/execution_metrics/erigon.yml
sudo rm -i /etc/prometheus/files_sd/stakelocal/execution_apis/erigon.yml
```

{% endtab %}

{% tab title="Geth" %}
Only run these commands if you are **NOT** monitoring Geth with the Stake Local Dashboard.

```bash
sudo rm -i /etc/prometheus/files_sd/stakelocal/execution_metrics/geth.yml
sudo rm -i /etc/prometheus/files_sd/stakelocal/execution_apis/geth.yml
```

{% endtab %}

{% tab title="Nethermind" %}
Only run these commands if you are **NOT** monitoring Nethermind with the Stake Local Dashboard.

```bash
sudo rm -i /etc/prometheus/files_sd/stakelocal/execution_metrics/nethermind.yml
sudo rm -i /etc/prometheus/files_sd/stakelocal/execution_apis/nethermind.yml
```

{% endtab %}
{% endtabs %}

Here are commands to delete unwanted consensus client target configuration files.

{% tabs %}
{% tab title="Lighthouse" %}
Only run these commands if you are **NOT** monitoring Lighthouse with the Stake Local Dashboard.

```bash
sudo rm -i /etc/prometheus/files_sd/stakelocal/consensus_metrics/lighthouse.yml
sudo rm -i /etc/prometheus/files_sd/stakelocal/consensus_apis/lighthouse.yml
```

{% endtab %}

{% tab title="Lodestar" %}
Only run these commands if you are **NOT** monitoring Lodestar with the Stake Local Dashboard.

```bash
sudo rm -i /etc/prometheus/files_sd/stakelocal/consensus_metrics/lodestar.yml
sudo rm -i /etc/prometheus/files_sd/stakelocal/consensus_apis/lodestar.yml
```

{% endtab %}

{% tab title="Nimbus" %}
Only run these commands if you are **NOT** monitoring Teku with the Stake Local Dashboard.

```bash
sudo rm -i /etc/prometheus/files_sd/stakelocal/consensus_metrics/nimbus.yml
sudo rm -i /etc/prometheus/files_sd/stakelocal/consensus_apis/nimbus.yml
```

{% endtab %}

{% tab title="Prysm" %}
Only run these commands if you are **NOT** monitoring Teku with the Stake Local Dashboard.

```bash
sudo rm -i /etc/prometheus/files_sd/stakelocal/consensus_metrics/prysm.yml
sudo rm -i /etc/prometheus/files_sd/stakelocal/consensus_apis/prysm.yml
```

{% endtab %}

{% tab title="Teku" %}
Only run these commands if you are **NOT** monitoring Teku with the Stake Local Dashboard.

```bash
sudo rm -i /etc/prometheus/files_sd/stakelocal/consensus_metrics/teku.yml
sudo rm -i /etc/prometheus/files_sd/stakelocal/consensus_apis/teku.yml
```

{% endtab %}
{% endtabs %}


# Optional: Alternative Dashboard Compatibility

Keep your other dashboards working with the Stake Local Dashboard

## Alternative Dashboard Compatibility

If you used other Grafana dashboards with your Ethereum clients prior to installing the Stake Local Dashboard, you may want to continue using those dashboards into the future. Some of those dashboards may work seamlessly with the new Stake Local configuration as-is. Other dashboards may require configuration changes only if you want to avoid a temporary visual anomaly. And yet others will require configuration changes if you would like to use the alternative dashboard at all.

See each client page for information about alternative Grafana dashboards and how the Stake Local configuration can be updated to support each dashboard.

{% content-ref url="/pages/JD1wP3i4amhes3BRkAcy" %}
[Besu Dashboard Compatibility](/dashboard-installation/optional-alternative-dashboard-compatibility/besu-dashboard-compatibility)
{% endcontent-ref %}

{% content-ref url="/pages/GOVNVwft8CE1GpmmpD3B" %}
[Erigon Dashboard Compatibility](/dashboard-installation/optional-alternative-dashboard-compatibility/erigon-dashboard-compatibility)
{% endcontent-ref %}

{% content-ref url="/pages/gS3QNhgIq9sAqceDCnGB" %}
[Geth Dashboard Compatibility](/dashboard-installation/optional-alternative-dashboard-compatibility/geth-dashboard-compatibility)
{% endcontent-ref %}

{% content-ref url="/pages/eYQ8XDES5VVL2nfU28JM" %}
[Lighthouse Dashboard Compatibility](/dashboard-installation/optional-alternative-dashboard-compatibility/lighthouse-dashboard-compatibility)
{% endcontent-ref %}

{% content-ref url="/pages/MnDVGmfuMX9OmWNJwHAS" %}
[Lodestar Dashboard Compatibility](/dashboard-installation/optional-alternative-dashboard-compatibility/lodestar-dashboard-compatibility)
{% endcontent-ref %}

{% content-ref url="/pages/kbr2gPtR2a49YR8AQb37" %}
[Nethermind Dashboard Compatibility](/dashboard-installation/optional-alternative-dashboard-compatibility/nethermind-dashboard-compatibility)
{% endcontent-ref %}

{% content-ref url="/pages/ym8APKbRnLHdZRDqgMTq" %}
[Nimbus Dashboard Compatibility](/dashboard-installation/optional-alternative-dashboard-compatibility/nimbus-dashboard-compatibility)
{% endcontent-ref %}

{% content-ref url="/pages/1l27lEEqnTOdWwrUkMiE" %}
[Prysm Dashboard Compatibility](/dashboard-installation/optional-alternative-dashboard-compatibility/prysm-dashboard-compatibility)
{% endcontent-ref %}

{% content-ref url="/pages/ym8APKbRnLHdZRDqgMTq" %}
[Nimbus Dashboard Compatibility](/dashboard-installation/optional-alternative-dashboard-compatibility/nimbus-dashboard-compatibility)
{% endcontent-ref %}

{% content-ref url="/pages/EqzKrQEuZYPQRxFtrAkT" %}
[Teku Compatibility](/dashboard-installation/optional-alternative-dashboard-compatibility/teku-compatibility)
{% endcontent-ref %}


# Besu Dashboard Compatibility

How to keep other Besu dashboards running with the Stake Local Dashboard

## **Besu Dashboard Compatibility**

### Besu Overview Dashboard - Grafana 10273

Dashboard: <https://grafana.com/grafana/dashboards/10273-besu-overview/>

This Besu dashboard should work seamlessly with the Stake Local configuration if your prior Besu `job_name` was `besu`. `besu` is the default `job_name` for the [someresat](https://someresat.medium.com/guide-to-staking-on-ethereum-ubuntu-goerli-prysm-4a640794e8b5) and [Coin Cashew](https://www.coincashew.com/coins/overview-eth/guide-or-how-to-setup-a-validator-on-eth2-mainnet/part-i-installation/monitoring-your-validator-with-grafana-and-prometheus) guides to installing this Besu dashboard. If you used these guides, you may not need to make any changes.

If your prior Besu `job_name` was `besu-nodes`, this dashboard will continue to work, but historical data may show as a different data series under a different color. To avoid this problem, you may update the Nimbus `job_name` in the new `prometheus.yml` file to match your prior `job_name` value. `besu-nodes` is the default `job_name` for this [Consensys ](https://consensys.net/blog/developers/setting-up-monitoring-for-hyperledger-besu-in-aws/)guide.

**Optional**

Edit the `/etc/prometheus/prometheus.yml` file.

```bash
sudo vi /etc/prometheus/prometheus.yml
```

Find the line containing `- job_name: besu`.

Change that line to `- job_name: <PREVIOUS BESU job_name>`.

Replace `<PREVIOUS BESU JOB NAME>` with the `job_name` value for Besu in your previous `prometheus.yml` file. If you used the Consensys guide to setting up your original dashboard, this value may be `besu-nodes`.

Save the file and exit the editor.


# Erigon Dashboard Compatibility

How to keep other Erigon dashboards running with the Stake Local Dashboard

## **Erigon Dashboard Compatibility**

### LedgerWatch Erigon Dashboard

Dashboard: [https://raw.githubusercontent.com/ledgerwatch/erigon/.../dashboards/erigon.json](https://raw.githubusercontent.com/ledgerwatch/erigon/devel/cmd/prometheus/dashboards/erigon.json)

This Erigon dashboard should work seamlessly with the Stake Local configuration without any further changes to the `prometheus.yml` configuration file.


# Geth Dashboard Compatibility

How to keep other Geth dashboards running with the Stake Local Dashboard

## **Geth Dashboard Compatibility**

### Geth Overview Dashboard - Grafana 14053

Dashboard: <https://grafana.com/grafana/dashboards/14053-geth-overview/>

This Geth dashboard should work seamlessly with the Stake Local configuration without any further changes to the `prometheus.yml` configuration file.

### Geth Server Dashboard - Grafana 15750

Dashboard: <https://grafana.com/grafana/dashboards/15750-geth-server/>

This Geth dashboard should work seamlessly with the Stake Local configuration without any further changes to the `prometheus.yml` configuration file.

### karalabe Geth Dashboard

Dashboard: [https://gist.githubusercontent.com/karalabe/.../dashboard.json](https://gist.githubusercontent.com/karalabe/e7ca79abdec54755ceae09c08bd090cd/raw/3a400ab90f9402f2233280afd086cb9d6aac2111/dashboard.json)

This Geth dashboard should work seamlessly with the Stake Local configuration without any further changes to the `prometheus.yml` configuration file.

{% hint style="info" %}
Alternative Geth dashboards that use InfluxDB instead of Prometheus are not impacted by the Stake Local Dashboard configuration.
{% endhint %}


# Lighthouse Dashboard Compatibility

How to keep other Lighthouse dashboards running with the Stake Local Dashboard

## **Lighthouse Dashboard Compatibility**

### Lighthouse Summary Dashboard

Dashboard: <https://raw.githubusercontent.com/sigp/lighthouse-metrics/master/dashboards/Summary.json>

This Lighthouse dashboard should work seamlessly with the Stake Local configuration if your prior Lighthouse beacon chain `job_name` was `lighthouse_beacon`. and your prior Lighthouse validator `job_name` was `lighthouse_validator`.

If your prior Lighthouse beacon chain or validator `job_name` were any other value, this dashboard will continue to work, but historical data may show as a different data series under a different color if it is in the selected time range. To avoid this problem, you may update the Lighthouse beacon chain and validator `job_name` values in the new `prometheus.yml` file to match your prior `job_name` values. `nodes` and `validators` are the default `job_name` values from this Coin Cashew guide. `lighthouse` is the default `job_name` from this someresat guide. `local-lighthouse` is the default `job_name` from this SigmaPrime guide.

**Optional**

Edit the `/etc/prometheus/prometheus.yml` file.

```bash
sudo vi /etc/prometheus/prometheus.yml
```

Find the line containing `- job_name: lighthouse_beacon`.

Change that line to `- job_name: <PREVIOUS LIGHTHOUSE BEACON job_name>`.

Replace `<PREVIOUS LIGHTHOUSE BEACON JOB NAME>` with the value for Besu in your previous `prometheus.yml` file. If you used the somersat guide to setting, this value may be `lighthouse`.

Save the file and exit the editor.

### Yoldark34 ETH Staking Dashboard

Dashboard: <https://raw.githubusercontent.com/Yoldark34/lighthouse-staking-dashboard/main/Yoldark_ETH_staking_dashboard.json>

This Lighthouse dashboard is not compatible with the Stake Local configuration without some additional configuration.

To continue to use this Lighthouse dashboard, update the Nimbus `job_name` in the new `prometheus.yml` file to match your prior value. `lighthouse` is the default for this Coin Cashew guide to installing a Nimbus dashboard.

Edit the `/etc/prometheus/prometheus.yml` file.

```bash
sudo vi /etc/prometheus/prometheus.yml
```

Find the line containing `- job_name: lighthouse_beacon`.

Change that line to `- job_name: <PREVIOUS LIGHTHOUSE BEACON job_name>`.

Replace `<PREVIOUS LIGHTHOUSE BEACON JOB NAME>` with the value for Lighthouse beacon chain in your previous `prometheus.yml` file. If you used the Coin Cashew guide to setting up your original dashboard, this value may be `nodes`.

Find the line containing `- job_name: lighthouse_validator`.

Change that line to `- job_name: <PREVIOUS LIGHTHOUSE VALIDATOR job_name>`.

Replace `<PREVIOUS LIGHTHOUSE VALIDATOR JOB NAME>` with the value for Lighthouse validator in your previous `prometheus.yml` file. If you used the Coin Cashew guide to setting up your original dashboard, this value may be `validators`.

{% hint style="danger" %}
The Coin Cashew guide to installing this dashboard recommends the Lighthouse beacon `job_name` of `nodes` and the Lighthouse validator `job_name` of `validators`. Some queries in this dashboard require the use of `lighthouse` and `lighthouse_validator` for those `job_name` values, respectively. Changing the `job_name` values to `lighthouse` and `lighthouse_validator` instead of your previous values will enable all queries in this dashboard to work, but historical data may appear under a separate color/legend from present data.
{% endhint %}

Save the file and exit the editor.

{% hint style="warning" %}
If the Lighthouse beacon chain or Lighthouse validator job names are changed from their Stake Local defaults, please complete the steps to update the job name variables during [dashboard installation](/dashboard-installation/install-dashboard).
{% endhint %}


# Lodestar Dashboard Compatibility

How to keep other Lodestar dashboards running with the Stake Local Dashboard

## Lodestar Dashboard Compatibility

### ChainSafe Lodestar Summary Dashboard

Dashboard: [https://raw.githubusercontent.com/ChainSafe/lodestar/.../lodestar\_summary.json](https://raw.githubusercontent.com/ChainSafe/lodestar/unstable/dashboards/lodestar_summary.json)

The Lodestar dashboard listed above has a hard-coded `job_name` in many queries. To continue to use this dashboard, the Lodestar `job_name` in the new configuration file must be updated to match the hard-coded value.

Edit the `/etc/prometheus/prometheus.yml` file.

```bash
sudo vi /etc/prometheus/prometheus.yml
```

Find the line containing `- job_name: lodestar_beacon`.

Change that line to `- job_name: <PREVIOUS LODESTAR BEACON job_name>`.

Replace `<PREVIOUS LODESTAR BEACON JOB NAME>` with the value for the Lodestar beacon in your previous `prometheus.yml` file. If you used the Coin Cashew guide to setting up your original dashboard, this value may be `Lodestar`. If you used the someresat guide to setting up your original dashboard, this value may be `lodestarbeacon`.

Find the line containing `- job_name: lodestar_validator`.

Change that line to `- job_name: <PREVIOUS LODESTAR VALIDATOR job_name>`.

Replace `<PREVIOUS LODESTAR VALIDATOR job_name>` with the value for the Lodestar beacon in your previous `prometheus.yml` file. You may not have this job in your prior `prometheus.yml` configuration file.

{% hint style="danger" %}
The Coin Cashew and someresat guides may recommend default `job_name` values that are incompatible with some portions of the alternative Lodestar dashboard. You may continue to use the prior values recommended by these guides for a consistent user experience. However, using the values `beacon` and `validator` in place of your prior values may provide more complete functionality for the original dashboard. This will cause the color change effect for historical data on the alternative Lodestar dashboard, but full functionality should be returned to the dashboard.
{% endhint %}

Replace `<PREVIOUS LODESTAR JOB NAME>` with the value for Besu in your previous `prometheus.yml` file. If you used the Consensys guide to setting up your original dashboard, this value may be `besu-nodes`.

Save the file and exit the editor.


# Nethermind Dashboard Compatibility

How to keep other Nethermind dashboards running with the Stake Local Dashboard

## **Nethermind Dashboard Compatibility**

### NethermindEth Nethermind Dashboard

Dashboard: <https://raw.githubusercontent.com/NethermindEth/metrics-infrastructure/master/grafana/dashboards/nethermind.json>

This Nethermind dashboard should work seamlessly with the Stake Local configuration without any further changes to the `prometheus.yml` configuration file.


# Nimbus Dashboard Compatibility

How to keep other Nimbus dashboards running with the Stake Local Dashboard

## Nimbus Dashboard Compatibility

### Status IM Beacon Nodes Grafana Dashboard

Dashboard: <https://raw.githubusercontent.com/status-im/nimbus-eth2/stable/grafana/beacon_nodes_Grafana_dashboard.json>

This Nimbus dashboard should work seamlessly with the Stake Local configuration if your prior Nimbus `job_name` was `nimbus`. `nimbus` is the default `job_name` for the someresat guide.

If your prior Nimbus `job_name` was anything else, this dashboard will continue to work, but historical data may show as a different data series under a separate color/legend. To avoid this problem, you may update the Nimbus `job_name` in the new `prometheus.yml` file to match your prior `job_name` value. `nodes` is the default `job_name` for the Coin Cashew guide.

**Optional**

Edit the `/etc/prometheus/prometheus.yml` file.

```bash
sudo vi /etc/prometheus/prometheus.yml
```

Find the line containing `- job_name: teku`.

Change that line to `- job_name: <PREVIOUS TEKU job_name>`.

Replace `<PREVIOUS TEKU JOB NAME>` with the `job_name` value for Teku in your previous `prometheus.yml` file. If you used the Coin Cashew or someresat guides to setting up this dashboard, this value may be `nodes`.

Save the file and exit the editor.


# Prysm Dashboard Compatibility

How to keep other Prysm dashboards running with the Stake Local Dashboard

## **Prysm Dashboard Compatibility**

### Prysmatic Labs and GuillaumeMiralles Dashboards

Dashboard: <https://docs.prylabs.network/assets/grafana-dashboards/small_amount_validators.json>

Dashboard: <https://raw.githubusercontent.com/GuillaumeMiralles/prysm-grafana-dashboard/master/less_10_validators.json>

Dashboard: <https://raw.githubusercontent.com/GuillaumeMiralles/prysm-grafana-dashboard/master/more_10_validators.json>

To continue to use the alternative Prysm dashboards listed above, update the Prysm`job_name` in the new `prometheus.yml` file to match your prior value. `nodes` is the default for this Coin Cashew guide to installing a Nimbus dashboard.

Edit the `/etc/prometheus/prometheus.yml` file.

```bash
sudo vi /etc/prometheus/prometheus.yml
```

Find the line containing `- job_name: prysm_beacon`.

Change that line to `- job_name: <PREVIOUS PRYSM BEACON job_name>`.

Replace `<PREVIOUS PRYSM BEACON JOB NAME>` with the value for Prysm beacon chain in your previous `prometheus.yml` file. If you used the Coin Cashew guide to setting up your original dashboard, this value may be `beacon node`. If you used the someresat guide to setting up your original dashboard, this value may be `prysm-beacon`.

Find the line containing `- job_name: prysm_validator`.

Change that line to `- job_name: <PREVIOUS PRYSM VALIDATOR job_name>`.

Replace `<PREVIOUS PRYSM VALIDATOR JOB NAME>` with the value for Prysm validator in your previous `prometheus.yml` file. If you used the Coin Cashew guide to setting up your original dashboard, this value may be `validator`. If you used the someresat guide to setting up your original dashboard, this value may be `prysm-validator`.

{% hint style="danger" %}
The someresat guide to installing this dashboard recommends the Prysm beacon `job_name` of `prysm-beacon` and the Prysm validator `job_name` of `prysm-validator`. Some queries in this dashboard require the use of `beacon_node` and `validator` for those `job_name` values, respectively. Changing the `job_name` values to `beacon_node` and `validator` instead of your previous values will enable all queries in this dashboard to work, but historical data may appear under a separate color/legend from present data.
{% endhint %}

Save the file and exit the editor.

{% hint style="warning" %}
If the Prysm beacon chain or Prysm validator job names are changed from their Stake Local defaults, please complete the steps to update the job name variables during [dashboard installation](/dashboard-installation/install-dashboard).
{% endhint %}


# Teku Compatibility

How to keep other Teku dashboards running with the Stake Local Dashboard

## Teku

### Teku Dashboard - Grafana 13457

Dashboard: <https://grafana.com/grafana/dashboards/13457-teku/>

This Teku dashboard should work seamlessly with the Stake Local configuration if your prior Teku `job_name` was `teku`.

If your prior Teku `job_name` was anything else, this dashboard will continue to work, but historical data may show as a different data series under a separate color/legend. To avoid this problem, you may update the Teku `job_name` in the new `prometheus.yml` file to match your prior `job_name` value. `nodes` is the default `job_name` for the Coin Cashew and someresat guides.

**Optional**

Edit the `/etc/prometheus/prometheus.yml` file.

```bash
sudo vi /etc/prometheus/prometheus.yml
```

Find the line containing `- job_name: teku`.

Change that line to `- job_name: <PREVIOUS TEKU job_name>`.

Replace `<PREVIOUS TEKU JOB NAME>` with the `job_name` value for Teku in your previous `prometheus.yml` file. If you used the Coin Cashew or someresat guides to setting up this dashboard, this value may be `nodes`.

Save the file and exit the editor.


# Enable & Start/Restart Services

Getting everything up, running, and starting on its own

Everything is now configured and ready to be started or restarted.

{% hint style="info" %}
For any software installed using another guide, follow your usual instructions for starting or restarting the consensus client, the execution client, Prometheus, Grafana, node\_exporter, json\_exporter, and Ethereum Metrics Exporter.
{% endhint %}

Refresh the service files for systemd so that systemd knows there are changes to how services are to be run.

{% code overflow="wrap" %}

```bash
sudo systemctl daemon-reload
```

{% endcode %}

Enable all services.

{% code overflow="wrap" %}

```bash
sudo systemctl enable prometheus grafana-server node_exporter json_exporter eth-metrics
```

{% endcode %}

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FLmkmbRUa3FXhzbbQxdVV%2Fsystemctl-enable.png?alt=media&amp;token=845ddce0-a211-4a90-9da9-e05e5c60f7f6" alt=""><figcaption><p>Results of <code>systemctl enable</code> command</p></figcaption></figure>

The quick and easy method to get everything running/reloaded is to simply tell all services to restart. Everything already running will restart and the rest will start.

{% code overflow="wrap" %}

```bash
sudo systemctl restart prometheus grafana-server node_exporter json_exporter eth-metrics
```

{% endcode %}

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FyCfuSU6W4Hx1HFaqlIwN%2Fsystemctl-restart.png?alt=media&amp;token=89349285-ffb3-4970-86f9-1850e3f2bafe" alt=""><figcaption><p>Results of <code>systemctl restart</code> command</p></figcaption></figure>

The `systemctl restart` command does not provide any feedback on how things are running. We can check the status on the next page.

{% hint style="warning" %}
If you changed any command-line flags for your consensus or execution clients, reload and restart those services using your standard procedures.
{% endhint %}


# Checking Software Status

Monitoring the monitors

## Checking Software Status

### systemctl

The quick way to check the status of all of the supporting software is to run `systemctl status` on all of the services.

```bash
sudo systemctl status prometheus grafana-server node_exporter json_exporter eth-metrics
```

You will see output like the following.

<div><figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fc5hlBQPvGWtSeu9CFuvv%2Fsystemctl-status-prometheus-grafana.png?alt=media&amp;token=1a508ed4-ff15-46db-8ab5-2b6185ef822c" alt=""><figcaption><p>Prometheus and Grafana status</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fwujq8u7SDLe1Cxnetmco%2Fsystemctl-status-node_exporter-json_exporter.png?alt=media&amp;token=06c291f6-d57d-4668-900f-2b067842d3cb" alt=""><figcaption><p>node_exporter and json_exporter status</p></figcaption></figure> <figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2F13JWaLhedfW3RpdploAM%2Fsystemctl-status-eth-metrics.png?alt=media&amp;token=f800c4c5-56d0-453b-920b-c635ae5e83ec" alt=""><figcaption><p>Ethereum Metrics Exporter status</p></figcaption></figure></div>

If you would like to see the logs individually for the supporting software, use the following commands to see the last 100 lines of log files.

```
sudo journalctl -u prometheus -n 100
sudo journalctl -u grafana-server -n 100
sudo journalctl -u node_exporter -n 100
sudo journalctl -u json_exporter -n 100
sudo journalctl -u eth-metrics -n 100
```

Replace "100" in the commands above with any number of lines you would like to see.

To see a never-ending stream of logs, use these commands, and use CTRL-C to exit.

```bash
sudo journalctl -fu prometheus
sudo journalctl -fu grafana-server
sudo journalctl -fu node_exporter
sudo journalctl -fu json_exporter
sudo journalctl -fu eth-metrics
```

Healthy Startups

Here is what a healthy start looks like in the logs for the supporting software.

### Logs

#### Prometheus

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FWC9RSRJj2CHauQQ7SH4g%2Fhealthy-prometheus.png?alt=media&amp;token=beaab1fb-ca99-45a7-b1a8-6e75f122e0a4" alt=""><figcaption><p>Logs for a healthy Prometheus start</p></figcaption></figure>

#### Grafana

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FulVJ7KGyFJs5Cbd0LEmE%2Fhealthy-grafana.png?alt=media&amp;token=d18bf5d5-3468-41d2-a1bd-4c069a08447c" alt=""><figcaption><p>Logs for a healthy Grafana start</p></figcaption></figure>

#### node\_exporter

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FrD8IL4cXHGP6uyuhSwPs%2Fhealthy-node_exporter.png?alt=media&amp;token=6c9ae3a4-3bd9-4871-b306-8da92052a900" alt=""><figcaption><p>Logs for a healthy node_exporter start</p></figcaption></figure>

#### json\_exporter

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fcp0Bg9jrRQc6teVsqPsj%2Fhealthy-json_exporter.png?alt=media&amp;token=28795943-3d4e-4191-96fd-c0ef164358bf" alt=""><figcaption><p>Logs for a healthy json_exporter start</p></figcaption></figure>

#### Ethereum Metrics Exporter

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FYLie4kh1hHBGsEkcOFXR%2Fhealthy-eth-metrics.png?alt=media&amp;token=db161d31-14c4-4de1-9a47-5108b4eced3e" alt=""><figcaption><p>Logs for a healthy Ethereum Metrics Exporter start</p></figcaption></figure>

Prometheus Targets

One way to check if your supporting software is running is to see whether Prometheus is able to scrape the software.&#x20;

Go to `http://127.0.0.1:9090`, replacing `127.0.0.1` with the IP address at which Prometheus is running.

At the top of the screen you should see a Status menu. Hover over that menu and click on the Targets link.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FXsb1xs6djObGjCK1Qlwv%2Fprometheus-ui-status-menu.png?alt=media&amp;token=cab83d7b-4630-4546-97d9-95dfcccb02bb" alt=""><figcaption><p>Find the Targets link under the Status menu</p></figcaption></figure>

The Targets screen will appear listing all of the Prometheus targets we previously set up.

You may need click Clear Selection in the targets filter in the upper-left corner of the screen.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FEsMTj2jtRVi0JLqzwtEQ%2Fprometheus-ui-clear-selection.png?alt=media&amp;token=20178034-a89b-4bd4-98b4-ff61167b0743" alt=""><figcaption><p>Clear the selection to see all Prometheus targets</p></figcaption></figure>

Each line of blue or red text represents a single Prometheus job serving one or more targets.

* Blue means Prometheus has successfully scraped data recently
* Red means Prometheus has not successfully scraped data recently from one

The numbers in parentheses show how many of the targets within each group Prometheus has successfully scraped recently.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FvyyFDazaQF8cq6mBdUNP%2Fprometheus-ui-targets.png?alt=media&amp;token=02beea6e-868b-40d7-bac6-c0edb41ce03d" alt=""><figcaption><p>The Targets screen showing the status of various Prometheus jobs</p></figcaption></figure>

{% hint style="warning" %}
If Prometheus has not had any data from a target within the last 15 minutes, it will show that target in the color red on this screen. Two of the jobs will often show a red color on this screen:

* consensus\_beacon\_genesis - This job runs every few hours, because the genesis information never changes. Therefore, Prometheus often shows this job in red.
* github\_latest\_release - This job runs every few hours, because GitHub has a low rate limit. Therefore, Prometheus often shows this job in red. Additionally, it may take a couple hours after a new release for that release to be reflected on the Prometheus Targets screen.

The last job that may be red is blackbox\_exporter. That job is not presently covered in these instructions.
{% endhint %}


# Install Dashboard

Configure Grafana and install the Stake Local Dashboard

### Install Dashboard

### Login to Grafana

Login to Grafana at [http://127.0.0.1:3000/](http://xxx.xxx.xxx.xxx:3000/), replacing `127.0.0.1` with the IP address of your Grafana instance.

If this is your first time logging in to Grafana, use the default username `admin` and the default password `admin`. Grafana will ask you to set a new password.

### Configure Prometheus Data Source

Connect Grafana to your Prometheus instance by configuring the Prometheus Data Source in Grafana.

On Grafana's left-hand menu, hover over the gear menu and click on Data Sources.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-5f1c05df196fd17b235e941d9d6b4c89fdb4d41d%2Fgrafana-data-sources.png?alt=media" alt=""><figcaption><p>Select Data Sources</p></figcaption></figure>

Then click on the Add Data Source button.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-a957c5f2dec586770d2586fc7b9615e0746add1b%2Fgrafana-add-data-source.png?alt=media" alt=""><figcaption><p>Click on Add Data Source</p></figcaption></figure>

Click on Prometheus under "Time series databases".

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-ee6a22af9c3f35cd09d17be4f45125845a35026c%2Fgrafana-add-prometheus.png?alt=media" alt=""><figcaption><p>Select the Prometheus panel</p></figcaption></figure>

Enter `http://127.0.0.1:9090/` into the URL field. If your Prometheus instance is accessible at a different IP address or port, update those here. Otherwise, click on the Add Data Source button.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FaZVNa7KqnKORiXH16OlD%2Fgrafana-data-source-prometheus.png?alt=media&amp;token=511fcca0-b0ab-4e3f-ae6f-c93dceac0d31" alt=""><figcaption><p>Enter the URL to your Prometheus instance</p></figcaption></figure>

Click Save & Test.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FKGLrLDQl7C0wIKTOngpF%2Fgrafana-save-test.png?alt=media&amp;token=63548c7f-488c-46d0-9478-66714634ab62" alt=""><figcaption><p>Save and test the connection</p></figcaption></figure>

Grafana should report that the data source is working.

#### **Install Grafana Dashboard**

Hover over the Dashboards menu in Grafana's left-hand menu, then click on Import.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-c33411147f8aea4bf26bf43a288cddbff7f4a478%2Fgrafana-import-dashboard.png?alt=media" alt=""><figcaption><p>Click on the Import menu option</p></figcaption></figure>

Copy and paste the dashboard at into the "Import via panel json" text box on the screen.

[Dashboard JSON via GitHub](https://raw.githubusercontent.com/stakelocal/stakelocal-dashboard/main/dashboard/stakelocal-dashboard.json)

It is also available in the cloned Stake Local Dashboard GitHub repository at `~/git/stakelocal-dashboard/dashboard/stakelocal-dashboard.json`.

```bash
cat ~/git/stakelocal-dashboard/dashboard/stakelocal-dashboard.json
```

Then click the Load button.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-1653a33b8c3a2e730de52d0f4e1fea9376a33c9a%2Fgrafana-load.png?alt=media" alt=""><figcaption><p>Paste the JSON and click on the Load button</p></figcaption></figure>

Select your Prometheus data source in the Prometheus field.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-9acae1052fdad3c4c3465673cb7c4d9aea5133af%2Fdashboard-data-source.png?alt=media" alt=""><figcaption><p>Select the Prometheus data source</p></figcaption></figure>

Optionally change the Currency Code value to one of the supported currencies: USD, EUR, JPY, GPB, AUD, CAD, CHF, CNY, HKD, NZD, ILS, KRW, MXN, RUB, SGD, TWD, or INR.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-9d5e845ac42a8a152f9241e98578edae2a77405e%2Fdashboard-currency-code.png?alt=media" alt=""><figcaption><p>Modify the currency variable</p></figcaption></figure>

If you used the [Optional: Alternative Dashboard Compatibility](/dashboard-installation/optional-alternative-dashboard-compatibility) instructions to change the default Stake Local Prometheus `job_name` to another value for Lighthouse or Prysm, you must update the job names on this screen. Update the `Prysm Beacon Job Name`, `Prysm Validator Job Name`, `Lighthouse Beacon Job Name`, and `Lighthouse Validator Job Name` variables to match your new `job_name` values, if applicable.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2Fgit-blob-ffbabc41bcabc6f918ddba702426fec7d09b5cee%2Fdashboard-job-names.png?alt=media" alt=""><figcaption><p>Change Lighthouse and Prysm job names for dashboard compatibility</p></figcaption></figure>

Click the Import button.

The dashboard should appear and data should begin to populate. Some data may take additional time to populate, from an epoch to two hours.

{% hint style="success" %}
Congratulations, you have set up the Stake Local Dashboard.
{% endhint %}


# Additional Modifications

What else can you do?

The following are some changes you can make to your Stake Local Dashboard after you have completed setting up your first staking group.

* [Additional Staking Groups](/additional-modifications/additional-staking-groups) - Add more consensus/execution pairs to the dashboard.
* [Change or Add Currency](/additional-modifications/change-or-add-currency) - Change to another pre-configured currency for fiat value calculations, or add a new currency.


# Additional Staking Groups

Set up Prometheus to monitor multiple groups of consensus/execution clients

## Additional Staking Groups

The Stake Local Dashboard can monitor multiple consensus/execution pairs at a time. Each consensus and execution client pair is assigned to a group. A new client group can be created as simply as configuring Prometheus targets for the new clients and assigning them a unique `group` label.

### Configure Prometheus Targets

To start adding a new client: Create new consensus client targets, execution client targets, and validator client targets. Return to the these three previous sections and add a new `targets` sections to the client-specific configuration files.

* [Consensus Client Targets](/dashboard-installation/prometheus-jobs-and-targets/consensus-client-targets)
* [Execution Client Targets](/dashboard-installation/prometheus-jobs-and-targets/execution-client-targets)
* [Validator Client Target](/dashboard-installation/prometheus-jobs-and-targets/validator-client-targets)

Copy the existing targets in the files, or copy the default targets from this documentation.

{% hint style="info" %}
Multiple targets sections can appear in the same file, but they should always be for the same client type.
{% endhint %}

For each new `targets` section created, modify the IP address, port, and label values.

#### IP Address and Port

The new client will have a unique IP address or port. Update the IP address and port of the new `targets` line to the correct IP address and port for the new client.

#### Labels

Labels help classify data from different client instances. Depending on your architecture, one or more of these labels may need to change for your new `targets` section.

See [About Stake Local Labels](/dashboard-installation/prometheus-jobs-and-targets/about-stake-local-labels) to refresh to refresh your knowledge of how the Stake Local Dashboard uses Prometheus labels.

Below the `labels` line in the `targets` section for the new client:

* Update the `network` label for the new client. The network of the new client may/may not be the same as for the original client. Examples: Mainnet, Goerli
* Update the `group` label for the new client. The group of the new client is most likely a different from that of the original client. Examples: Mainnet Prysm/Geth, Goerli Teku/Besu, Group A
* Update the `host` label for the new client. The host of the new client may/may not be the same as for the original client. Examples: nuc, node.stakelocal.io, srv-lax-03932, trogdor
* Update the `service` label for the new client. The service label is used to distinguish individual instances of a client type. With only one instance of each type, you can keep it simple with "Nimbus" and "Nethermind", but with multiple instances of each type the service values should be unique. Examples: Mainnet Lodestar, Goerli Erigon,, Backup Lighthouse, srv-lax-03932-besu

After adding a second Besu client, one target file might look like the following.

```
    - targets: ['127.0.0.1:8545']
      labels:
        network: 'Mainnet'
        host: 'srv01'
        service: 'Mainnet Besu'
        group: 'Mainnet Teku/Besu'
        explorer: 'etherscan.io'
        json_exporter: '127.0.0.1:7979'
        client: 'Besu'
    - targets: ['192.168.0.50:8545']
      labels:
        network: 'Goerli'
        host: 'srv02'
        service: 'Goerli Besu'
        group: 'Goerli Teku/Besu'
        explorer: 'goerli.etherscan.io'
        json_exporter: '127.0.0.1:7979'
        client: 'Besu'
```

{% hint style="info" %}
Prometheus targets are read in from files that follow a naming convention. All files that begin with the name of a client in lower case are read in by Prometheus and associated with jobs appropriate for that client.

The default file names provided in this guide use only the client name in the file name (e.g. teku.yml, nethermind.yml), but Prometheus will also read in files such as the following:

* `prysm-mainnet.yml`
* `erigon-goerli.yml`
* `nimbus-srv-lax-039302.yml`

The only requirement is that the name of the client be in lower case at the beginning of the filename.

This provides greater flexibility in organizing Prometheus target configurations.
{% endhint %}

{% hint style="warning" %}
Why so many target files in the first place? Not all clients support all API calls. Separating targets by client type allows us to configure API-specific Prometheus jobs to execute for only those clients that correctly support the end point.
{% endhint %}

### Configure Ethereum Exporter

Ethereum Metrics Exporter can only support a single consensus/execution client pair. For full dashboard support of a new pair, a new instance of Ethereum Metrics Exporter must be run.

To add another Ethereum Metrics Exporter instance, you must either run Ethereum Metrics Exporter on a separate system from your first instance, or you must configure Ethereum Metrics Exporter to run more than once on the same system under a different port.

#### New Instance on Separate System

To install a new instance of Ethereum Metrics Exporter on a separate system, follow all of the Ethereum Metrics Exporter instructions on the new system.

1. [Install Ethereum Metrics Exporter](/dashboard-installation/install-supporting-software/install-ethereum-metrics-exporter) on the new system.
2. [Configure Ethereum Metrics Exporter ](/dashboard-installation/configure-supporting-software/configure-ethereum-metrics-exporter)on the new system.
3. [Configure the Prometheus target for the new Ethereum Metrics Exporter](/dashboard-installation/prometheus-jobs-and-targets/ethereum-metrics-exporter-targets).
4. Enable and start the Ethereum Metrics Exporter software on the new system.
5. Add a new Ethereum Metrics Exporter target to your `eth-metrics.yml` file in `/etc/prometheus/files_sd/stakelocal/other/` directory. Modify the IP address, port, and labels, as necessary.

You do not need to restart Prometheus. Prometheus will pick up the changes shortly after you save the target file.

#### Second Instance on Same System

To run a second instance of Ethereum Metrics Exporter on the same system:

1. Skip the installation steps, but follow the steps to [Configure Startup](/dashboard-installation/install-supporting-software/install-ethereum-metrics-exporter#configure-startup) for Ethereum Metrics Exporter from the [Install Ethereum Metrics Exporter](/dashboard-installation/install-supporting-software/install-ethereum-metrics-exporter) page.
   1. Modify the commands on that page to use a unique filename for the second instance of Ethereum Metrics Exporter. For example: `eth-metrics-goerli.service`, `eth-metrics-backup.service`
   2. Change the port in the `ExecStart` line to the port on which the new instance of Ethereum Metrics Exporter is running
   3. Change the name of the configuration file in the `ExecStart` line to a name unique to the new instance of Ethereum Metrics Exporter. For example: `eth-metrics-goerli.yml`, `eth-metrics-backup.yml`.
2. Repeat the steps to [Configure Ethereum Metrics Exporter](/dashboard-installation/configure-supporting-software/configure-ethereum-metrics-exporter), using the configuration filename configured in the previous step. For example: `eth-metrics-goerli.yml`, `eth-metrics-backup.yml`
3. Repeat the steps to configure [Ethereum Metrics Exporter Targets](/dashboard-installation/prometheus-jobs-and-targets/ethereum-metrics-exporter-targets), creating a new `targets` section in the `/etc/prometheus/files_sd/stakelocal/other/eth-metrics.yml` file
4. Enable and start the new Ethereum Metrics Exporter service with `sudo systemctl enable --now eth-metrics-goerli`, using the name of the `.service` file created above.


# Change or Add Currency

Change the currency used to calculate fiat values of Ether on the dashboard.

## Change or Add Currency

The dashboard comes preconfigured to support 17 different currencies for fiat value conversions.

| USD | EUR | JPY |
| --- | --- | --- |
| GBP | AUD | CAD |
| CHF | CNY | HKD |
| NZD | ILS | KRW |
| MXN | RUB | SGD |
| TWD | INR |     |

It is easy to change to one of the supported currencies through the Grafana UI using the instructions below. If you want to add an unsupported currency, instructions are included for that afterward.

## Change Currency

Follow these steps to change the selected currency to another supported currency.

Click on the gear icon in the upper-right corner of the Grafana dashboard.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FfORATU5sXrKqNWE1rTq6%2Fgrafana-dashboard-settings.png?alt=media&amp;token=8e13e59e-3813-4ce5-8810-b99eb43d95db" alt=""><figcaption></figcaption></figure>

Click on the Variables link on the left-hand side of the screen.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FIaqBD0xyXuBjWk3PBral%2Fgrafana-variables-menu.png?alt=media&amp;token=850b25ac-fcaa-45c6-9986-d98706bc7eb9" alt=""><figcaption></figcaption></figure>

Click on the `currency` variable name.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2F9nq4diKpuyLFqUvRAJAG%2Fgrafana-variables.png?alt=media&amp;token=4b66e450-fca6-41a5-9718-f849859d1670" alt=""><figcaption><p>The currency variable in the variables list</p></figcaption></figure>

Change the variable value to one of the 17 supported currencies listed in the Description field.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FwwWQe432nVSkLYvGa9h4%2Fgrafana-currency-variable.png?alt=media&amp;token=25a537d0-362d-4f1f-bcef-dffc75560b11" alt=""><figcaption><p>Updating the currency value to GBP</p></figcaption></figure>

Click the Apply button to save the change.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FlHe2UJE0ysZvqRyAUGAF%2Fgrafana-apply.png?alt=media&amp;token=6b64e635-f1cf-4a5e-a308-fbab9b644711" alt=""><figcaption><p>Click the Apply button to apply the new currency value</p></figcaption></figure>

Click on the Save Dashboard button in the upper-right corner of the screen.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FHlEPjjEpRajAgXvWdsE0%2Fgrafana-save-dashboard-button.png?alt=media&amp;token=468c4241-657b-45ea-90c4-717fd21c0156" alt=""><figcaption><p>Click the Save Dashboard button to open the save panel</p></figcaption></figure>

The Save Dashboard panel will open. Enter a note and then click on the Save button.

<figure><img src="https://971382438-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZON6xeJcH6NDhbzjDAWf%2Fuploads%2FPEoQpKQypFdUNWePjkB8%2Fgrafana-save-dashboard.png?alt=media&amp;token=01fbd324-8090-4b7c-ad6f-c25359db5b88" alt=""><figcaption><p>Enter a note and click the Save button</p></figcaption></figure>

## Add New Currency

Additional languages may be added manually by modifying two configuration files and then following the above instructions to change the currency variable.

Currencies must be supported by the [Coingecko API](https://www.coingecko.com/en/api/documentation).

#### /etc/json\_exporter/json\_exporter.yml

First, edit the `json_exporter` configuration file to add support for parsing the new currency values

```bash
sudo nano /etc/json_exporter/json_exporter.yml
```

Find the `coingecko_eth_price` section and look for the list of currencies under the `values` line. That section should look similar to the following.

```
  coingecko_eth_price:
    metrics:
    - name: eth
      type: object
      path: '{.ethereum}'
      help: Ether (ETH) price in fiat
      values:
        USD: '{.usd}'
        EUR: '{.eur}'
        JPY: '{.jpy}'
        GBP: '{.gbp}'
        AUD: '{.aud}'
        CAD: '{.cad}'
        CHF: '{.chf}'
        CNY: '{.cny}'
        HKD: '{.hkd}'
        NZD: '{.nzd}'
        ILS: '{.ils}'
        KRW: '{.krw}'
        MXN: '{.mxn}'
        RUB: '{.rub}'
        SGD: '{.sgd}'
        TWD: '{.twd}'
        INR: '{.inr}'
```

Add a new currency line following the model of the other currency lines, with the three-character currency code first in all caps and then in lowercase.

For example, if we want to add support for Swedish krona, we would add the following line to the `values` section of the `coingecko_eth_price` module. There should be eight spaces before the currency code.

```yaml
         SEK: '{.sek}'
```

#### /etc/prometheus/files\_sd/other/currencies.yml

Second, edit the `currencies.yml` configuration file to add support for the new currency to the CoinGeck query.

```bash
sudo nano /etc/prometheus/files_sd/stakelocal/other/coingecko.yml
```

In the `targets` line, add the three-character currency code to the comma-delimited list of currencies to be queried. All three-character currency codes must be contained within the single set of quotes.

For example, to continue adding support for Swedish Krona, we would add `,sek` to the end of the `targets` line list of currencies. The final result may look like the following.

```
    - targets: ['usd,eur,jpy,gbp,aud,cad,chf,cny,hkd,nzd,ils,krw,mxn,rub,sgd,twd,inr,sek']
```

After modifying these two files, restart json\_exporter only. The changes to the Prometheus configuration will be picked up automatically.

```bash
sudo systemctl restart json_exporter
```

After completing the setup, set your new currency code as the `currency` variable value using the [instructions at the top of this page](#change-currency).


