# 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`