From 34f003adb8fff9c1341f79298ce1c8eb6031a370 Mon Sep 17 00:00:00 2001 From: Paul Hauner Date: Tue, 17 Dec 2019 10:20:27 +1100 Subject: [PATCH] Add more eth1 metrics (#728) * Add metrics for junk eth1 votes * Add eth1 cache metrics --- Cargo.lock | 2 ++ beacon_node/beacon_chain/src/eth1_chain.rs | 3 +++ beacon_node/beacon_chain/src/metrics.rs | 6 ++++++ beacon_node/eth1/Cargo.toml | 2 ++ beacon_node/eth1/src/lib.rs | 4 ++++ beacon_node/eth1/src/metrics.rs | 19 ++++++++++++++++ beacon_node/eth1/src/service.rs | 25 ++++++++++++++++++++++ 7 files changed, 61 insertions(+) create mode 100644 beacon_node/eth1/src/metrics.rs diff --git a/Cargo.lock b/Cargo.lock index 610aaa5f3..81e7af5bc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1047,7 +1047,9 @@ dependencies = [ "exit-future 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "libflate 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", + "lighthouse_metrics 0.1.0", "merkle_proof 0.1.0", "parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "reqwest 0.9.22 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/beacon_node/beacon_chain/src/eth1_chain.rs b/beacon_node/beacon_chain/src/eth1_chain.rs index a22e83353..ce11b75d7 100644 --- a/beacon_node/beacon_chain/src/eth1_chain.rs +++ b/beacon_node/beacon_chain/src/eth1_chain.rs @@ -1,3 +1,4 @@ +use crate::metrics; use eth1::{Config as Eth1Config, Eth1Block, Service as HttpService}; use eth2_hashing::hash; use exit_future::Exit; @@ -351,6 +352,8 @@ impl> Eth1ChainBackend for CachingEth1Backend { fn random_eth1_data() -> Eth1Data { let mut rng = rand::thread_rng(); + metrics::inc_counter(&metrics::JUNK_ETH1_VOTES); + macro_rules! rand_bytes { ($num_bytes: expr) => {{ let mut arr = [0_u8; $num_bytes]; diff --git a/beacon_node/beacon_chain/src/metrics.rs b/beacon_node/beacon_chain/src/metrics.rs index 63c9e30ac..81e47ca42 100644 --- a/beacon_node/beacon_chain/src/metrics.rs +++ b/beacon_node/beacon_chain/src/metrics.rs @@ -153,6 +153,12 @@ lazy_static! { pub static ref CHECKPOINT_CACHE_MISSES: Result = try_create_int_counter("beacon_checkpoint_cache_misses_total", "Count of times checkpoint cache fulfils request"); + /* + * Eth1 + */ + pub static ref JUNK_ETH1_VOTES: Result = + try_create_int_counter("beacon_eth1_junk_votes", "Count of times we have voted junk for eth1 dat"); + /* * Chain Head */ diff --git a/beacon_node/eth1/Cargo.toml b/beacon_node/eth1/Cargo.toml index ea3684046..604e0a2bc 100644 --- a/beacon_node/eth1/Cargo.toml +++ b/beacon_node/eth1/Cargo.toml @@ -27,3 +27,5 @@ tokio = "0.1.22" state_processing = { path = "../../eth2/state_processing" } exit-future = "0.1.4" libflate = "0.1" +lighthouse_metrics = { path = "../../eth2/utils/lighthouse_metrics"} +lazy_static = "1.4.0" diff --git a/beacon_node/eth1/src/lib.rs b/beacon_node/eth1/src/lib.rs index f1bc5b852..b3352c81a 100644 --- a/beacon_node/eth1/src/lib.rs +++ b/beacon_node/eth1/src/lib.rs @@ -1,8 +1,12 @@ +#[macro_use] +extern crate lazy_static; + mod block_cache; mod deposit_cache; mod deposit_log; pub mod http; mod inner; +mod metrics; mod service; pub use block_cache::{BlockCache, Eth1Block}; diff --git a/beacon_node/eth1/src/metrics.rs b/beacon_node/eth1/src/metrics.rs new file mode 100644 index 000000000..1d3381f91 --- /dev/null +++ b/beacon_node/eth1/src/metrics.rs @@ -0,0 +1,19 @@ +pub use lighthouse_metrics::*; + +lazy_static! { + /* + * Eth1 blocks + */ + pub static ref BLOCK_CACHE_LEN: Result = + try_create_int_gauge("eth1_block_cache_len", "Count of eth1 blocks in cache"); + pub static ref LATEST_CACHED_BLOCK_TIMESTAMP: Result = + try_create_int_gauge("eth1_latest_cached_block_timestamp", "Timestamp of latest block in eth1 cache"); + + /* + * Eth1 deposits + */ + pub static ref DEPOSIT_CACHE_LEN: Result = + try_create_int_gauge("eth1_deposit_cache_len", "Number of deposits in the eth1 cache"); + pub static ref HIGHEST_PROCESSED_DEPOSIT_BLOCK: Result = + try_create_int_gauge("eth1_highest_processed_deposit_block", "Number of the last block checked for deposits"); +} diff --git a/beacon_node/eth1/src/service.rs b/beacon_node/eth1/src/service.rs index 80fd6c479..2710b0398 100644 --- a/beacon_node/eth1/src/service.rs +++ b/beacon_node/eth1/src/service.rs @@ -1,3 +1,4 @@ +use crate::metrics; use crate::{ block_cache::{BlockCache, Error as BlockCacheError, Eth1Block}, deposit_cache::Error as DepositCacheError, @@ -461,6 +462,12 @@ impl Service { cache.last_processed_block = Some(block_range.end.saturating_sub(1)); + metrics::set_gauge(&metrics::DEPOSIT_CACHE_LEN, cache.cache.len() as i64); + metrics::set_gauge( + &metrics::HIGHEST_PROCESSED_DEPOSIT_BLOCK, + cache.last_processed_block.unwrap_or_else(|| 0) as i64, + ); + Ok(sum) }) .map(|logs_imported| DepositCacheUpdateOutcome::Success { logs_imported }) @@ -559,6 +566,19 @@ impl Service { .insert_root_or_child(eth1_block) .map_err(Error::FailedToInsertEth1Block)?; + metrics::set_gauge( + &metrics::BLOCK_CACHE_LEN, + cache_3.block_cache.read().len() as i64, + ); + metrics::set_gauge( + &metrics::LATEST_CACHED_BLOCK_TIMESTAMP, + cache_3 + .block_cache + .read() + .latest_block_timestamp() + .unwrap_or_else(|| 0) as i64, + ); + Ok(sum + 1) }) }) @@ -566,6 +586,11 @@ impl Service { // Prune the block cache, preventing it from growing too large. cache_4.prune_blocks(); + metrics::set_gauge( + &metrics::BLOCK_CACHE_LEN, + cache_4.block_cache.read().len() as i64, + ); + Ok(BlockCacheUpdateOutcome::Success { blocks_imported, head_block_number: cache_4.clone().block_cache.read().highest_block_number(),