-
-
Published
Linked with GitHub
# Public eth2 launch health metrics
[toc]
## Pre-genesis
Prior to genesis, we want to ensure all clients agree on genesis info and that the p2p network looks strong
* genesis root/state/time and fork_digest in agreement
* nodes of each type successfully peer through discovery and maintain healthy peer counts leading up to genesis
## Post-genesis
Monitor logs, block explorers, and local http endpoints looking for the following events
* Genesis epoch
* Block published in early slot (No user block proposed at GENESIS_SLOT)
* GOOD: First block seen at slot 1 or 2
* CONCERNING: First block seen between slots 3 and 8. Signals potential bad connectivity or low validator liveness
* BAD: First block not seen before slot 8 (25% of epoch passed). Signals network might be fragmented
* End of epoch (No change in finality possible):
* GOOD: vote participation >= 90%
* CONCERNING: 66.6% <= vote participation < 90%
* BAD: vote participation < 66.6%
* Epoch 1
* Monitor logs looking for very regular blocks and attestations
* End of epoch (No change in finality possible):
* GOOD: vote participation >= 90%
* CONCERNING: 66.6% <= vote participation < 90%
* BAD: vote participation < 66.6%
* Epoch 2
* Monitor logs looking for very regular blocks and attestations
* End of epoch:
* GOOD: Epoch 2 justifies
* CONCERNING: Epoch 1 justifies but _not_ epoch 2. Implies good connectivity/participation at epoch 1 but not 2
* BAD: No justifications at end of epoch 2. Tracking participation in previous epochs would have already signalled that this as likely
* Epoch 3
* Monitor logs looking for very regular blocks and attestations
* End of epoch:
* GOOD: Epoch 3 justifies, epoch 2 finalizes
* CONCERNING: Some combination of justifications that does not lead to finality
* BAD: No justifications since genesis
## Relevant http endpoints
Listed the most relevant API endpoints for initial health monitoring.
Usage: `curl http://localhost:PORT/ENDPOINT` where `PORT` is the configured http port for your client and `ENDPOINT` is one of the endpoints below
_Note_: `jq` is a wonderful tool for parsing json return values from these http requests. Just pipe your call to `curl` into `jq`. Give it a shot!
* Lighthouse (default http port: 5052)
* `/network/peer_count`
* `/consensus/global_votes?epoch=EPOCH`
* `/beacon/head`
* `/beacon/state?slot=SLOT` piped into the following:
* `jq '.beacon_state.finalized_checkpoint'`
* `jq '.beacon_state.current_justified_checkpoint'`
* Teku (default http port: 5051)
* `/network/peer_count`
* `/beacon/chainhead`
* `/beacon/state?slot=SLOT` piped into the following:
* `jq '.finalized_checkpoint'`
* `jq '.current_justified_checkpoint'`
* Prysm (default http port: 3500)
* `/eth/v1alpha1/node/peers | jq '.peers | length'`
* `/eth/v1alpha1/beacon/chainhead`
* Lodestar
* `/eth/v1/node/peers | jq '.data | length'`
* `/eth/v1/beacon/states/head/finality_checkpoints`