diff --git a/src/cl/lighthouse/lighthouse_launcher.star b/src/cl/lighthouse/lighthouse_launcher.star index 8eb324d2..23d8887f 100644 --- a/src/cl/lighthouse/lighthouse_launcher.star +++ b/src/cl/lighthouse/lighthouse_launcher.star @@ -1,7 +1,7 @@ shared_utils = import_module("github.com/kurtosis-tech/eth-network-package/shared_utils/shared_utils.star") input_parser = import_module("github.com/kurtosis-tech/eth-network-package/package_io/input_parser.star") cl_client_context = import_module("github.com/kurtosis-tech/eth-network-package/src/cl/cl_client_context.star") -cl_node_metrics = import_module("github.com/kurtosis-tech/eth-network-package/src/cl/cl_node_metrics_info.star") +node_metrics = import_module("github.com/kurtosis-tech/eth-network-package/src/node_metrics_info.star") package_io = import_module("github.com/kurtosis-tech/eth-network-package/package_io/constants.star") @@ -165,13 +165,13 @@ def launch( beacon_metrics_port = beacon_service.ports[BEACON_METRICS_PORT_ID] beacon_metrics_url = "{0}:{1}".format(beacon_service.ip_address, beacon_metrics_port.number) - beacon_node_metrics_info = cl_node_metrics.new_cl_node_metrics_info(beacon_node_service_name, METRICS_PATH, beacon_metrics_url) + beacon_node_metrics_info = node_metrics.new_node_metrics_info(beacon_node_service_name, METRICS_PATH, beacon_metrics_url) nodes_metrics_info = [beacon_node_metrics_info] if validator_service: validator_metrics_port = validator_service.ports[VALIDATOR_METRICS_PORT_ID] validator_metrics_url = "{0}:{1}".format(validator_service.ip_address, validator_metrics_port.number) - validator_node_metrics_info = cl_node_metrics.new_cl_node_metrics_info(validator_node_service_name, METRICS_PATH, validator_metrics_url) + validator_node_metrics_info = node_metrics.new_node_metrics_info(validator_node_service_name, METRICS_PATH, validator_metrics_url) nodes_metrics_info.append(validator_node_metrics_info) return cl_client_context.new_cl_client_context( diff --git a/src/cl/lodestar/lodestar_launcher.star b/src/cl/lodestar/lodestar_launcher.star index f0d9938d..7bdb4477 100644 --- a/src/cl/lodestar/lodestar_launcher.star +++ b/src/cl/lodestar/lodestar_launcher.star @@ -1,7 +1,7 @@ shared_utils = import_module("github.com/kurtosis-tech/eth-network-package/shared_utils/shared_utils.star") input_parser = import_module("github.com/kurtosis-tech/eth-network-package/package_io/input_parser.star") cl_client_context = import_module("github.com/kurtosis-tech/eth-network-package/src/cl/cl_client_context.star") -cl_node_metrics = import_module("github.com/kurtosis-tech/eth-network-package/src/cl/cl_node_metrics_info.star") +node_metrics = import_module("github.com/kurtosis-tech/eth-network-package/src/node_metrics_info.star") cl_node_ready_conditions = import_module("github.com/kurtosis-tech/eth-network-package/src/cl/cl_node_ready_conditions.star") package_io = import_module("github.com/kurtosis-tech/eth-network-package/package_io/constants.star") @@ -157,7 +157,7 @@ def launch( beacon_metrics_port = beacon_service.ports[METRICS_PORT_ID] beacon_metrics_url = "{0}:{1}".format(beacon_service.ip_address, beacon_metrics_port.number) - beacon_node_metrics_info = cl_node_metrics.new_cl_node_metrics_info(service_name, METRICS_PATH, beacon_metrics_url) + beacon_node_metrics_info = node_metrics.new_node_metrics_info(service_name, METRICS_PATH, beacon_metrics_url) nodes_metrics_info = [beacon_node_metrics_info] return cl_client_context.new_cl_client_context( diff --git a/src/cl/nimbus/nimbus_launcher.star b/src/cl/nimbus/nimbus_launcher.star index d2edf178..fc9412f4 100644 --- a/src/cl/nimbus/nimbus_launcher.star +++ b/src/cl/nimbus/nimbus_launcher.star @@ -1,7 +1,7 @@ shared_utils = import_module("github.com/kurtosis-tech/eth-network-package/shared_utils/shared_utils.star") input_parser = import_module("github.com/kurtosis-tech/eth-network-package/package_io/input_parser.star") cl_client_context = import_module("github.com/kurtosis-tech/eth-network-package/src/cl/cl_client_context.star") -cl_node_metrics = import_module("github.com/kurtosis-tech/eth-network-package/src/cl/cl_node_metrics_info.star") +node_metrics = import_module("github.com/kurtosis-tech/eth-network-package/src/node_metrics_info.star") cl_node_ready_conditions = import_module("github.com/kurtosis-tech/eth-network-package/src/cl/cl_node_ready_conditions.star") package_io = import_module("github.com/kurtosis-tech/eth-network-package/package_io/constants.star") @@ -139,7 +139,7 @@ def launch( metrics_port = nimbus_service.ports[METRICS_PORT_ID] metrics_url = "{0}:{1}".format(nimbus_service.ip_address, metrics_port.number) - nimbus_node_metrics_info = cl_node_metrics.new_cl_node_metrics_info(service_name, METRICS_PATH, metrics_url) + nimbus_node_metrics_info = node_metrics.new_node_metrics_info(service_name, METRICS_PATH, metrics_url) nodes_metrics_info = [nimbus_node_metrics_info] diff --git a/src/cl/prysm/prysm_launcher.star b/src/cl/prysm/prysm_launcher.star index 049413f9..dee74372 100644 --- a/src/cl/prysm/prysm_launcher.star +++ b/src/cl/prysm/prysm_launcher.star @@ -1,7 +1,7 @@ shared_utils = import_module("github.com/kurtosis-tech/eth-network-package/shared_utils/shared_utils.star") input_parser = import_module("github.com/kurtosis-tech/eth-network-package/package_io/input_parser.star") cl_client_context = import_module("github.com/kurtosis-tech/eth-network-package/src/cl/cl_client_context.star") -cl_node_metrics = import_module("github.com/kurtosis-tech/eth-network-package/src/cl/cl_node_metrics_info.star") +node_metrics = import_module("github.com/kurtosis-tech/eth-network-package/src/node_metrics_info.star") cl_node_ready_conditions = import_module("github.com/kurtosis-tech/eth-network-package/src/cl/cl_node_ready_conditions.star") package_io = import_module("github.com/kurtosis-tech/eth-network-package/package_io/constants.star") @@ -184,13 +184,13 @@ def launch( beacon_metrics_port = beacon_service.ports[BEACON_MONITORING_PORT_ID] beacon_metrics_url = "{0}:{1}".format(beacon_service.ip_address, beacon_metrics_port.number) - beacon_node_metrics_info = cl_node_metrics.new_cl_node_metrics_info(beacon_node_service_name, METRICS_PATH, beacon_metrics_url) + beacon_node_metrics_info = node_metrics.new_node_metrics_info(beacon_node_service_name, METRICS_PATH, beacon_metrics_url) nodes_metrics_info = [beacon_node_metrics_info] if validator_service: validator_metrics_port = validator_service.ports[VALIDATOR_MONITORING_PORT_ID] validator_metrics_url = "{0}:{1}".format(validator_service.ip_address, validator_metrics_port.number) - validator_node_metrics_info = cl_node_metrics.new_cl_node_metrics_info(validator_node_service_name, METRICS_PATH, validator_metrics_url) + validator_node_metrics_info = node_metrics.new_node_metrics_info(validator_node_service_name, METRICS_PATH, validator_metrics_url) nodes_metrics_info.append(validator_node_metrics_info) return cl_client_context.new_cl_client_context( diff --git a/src/cl/teku/teku_launcher.star b/src/cl/teku/teku_launcher.star index df60f456..70400b65 100644 --- a/src/cl/teku/teku_launcher.star +++ b/src/cl/teku/teku_launcher.star @@ -1,7 +1,7 @@ shared_utils = import_module("github.com/kurtosis-tech/eth-network-package/shared_utils/shared_utils.star") input_parser = import_module("github.com/kurtosis-tech/eth-network-package/package_io/input_parser.star") cl_client_context = import_module("github.com/kurtosis-tech/eth-network-package/src/cl/cl_client_context.star") -cl_node_metrics = import_module("github.com/kurtosis-tech/eth-network-package/src/cl/cl_node_metrics_info.star") +node_metrics = import_module("github.com/kurtosis-tech/eth-network-package/src/node_metrics_info.star") cl_node_ready_conditions = import_module("github.com/kurtosis-tech/eth-network-package/src/cl/cl_node_ready_conditions.star") package_io = import_module("github.com/kurtosis-tech/eth-network-package/package_io/constants.star") @@ -141,7 +141,7 @@ def launch( teku_metrics_port = teku_service.ports[METRICS_PORT_ID] teku_metrics_url = "{0}:{1}".format(teku_service.ip_address, teku_metrics_port.number) - teku_node_metrics_info = cl_node_metrics.new_cl_node_metrics_info(service_name, METRICS_PATH, teku_metrics_url) + teku_node_metrics_info = node_metrics.new_node_metrics_info(service_name, METRICS_PATH, teku_metrics_url) nodes_metrics_info = [teku_node_metrics_info] return cl_client_context.new_cl_client_context( diff --git a/src/el/besu/besu_launcher.star b/src/el/besu/besu_launcher.star index cd25ac63..d0c0063b 100644 --- a/src/el/besu/besu_launcher.star +++ b/src/el/besu/besu_launcher.star @@ -2,6 +2,7 @@ shared_utils = import_module("github.com/kurtosis-tech/eth-network-package/share input_parser = import_module("github.com/kurtosis-tech/eth-network-package/package_io/input_parser.star") el_client_context = import_module("github.com/kurtosis-tech/eth-network-package/src/el/el_client_context.star") el_admin_node_info = import_module("github.com/kurtosis-tech/eth-network-package/src/el/el_admin_node_info.star") +node_metrics = import_module("github.com/kurtosis-tech/eth-network-package/src/node_metrics_info.star") package_io = import_module("github.com/kurtosis-tech/eth-network-package/package_io/constants.star") # The dirpath of the execution data directory on the client container @@ -10,10 +11,13 @@ KZG_DATA_DIRPATH_ON_CLIENT_CONTAINER = "/opt/besu/genesis/output/trusted_setup.t GENESIS_DATA_DIRPATH_ON_CLIENT_CONTAINER = "/opt/besu/genesis" +METRICS_PATH = "/metrics" + RPC_PORT_NUM = 8545 WS_PORT_NUM = 8546 DISCOVERY_PORT_NUM = 30303 ENGINE_HTTP_RPC_PORT_NUM = 8551 +METRICS_PORT_NUM = 9001 # The min/max CPU/memory that the execution node can use EXECUTION_MIN_CPU = 100 @@ -27,6 +31,7 @@ WS_PORT_ID = "ws" TCP_DISCOVERY_PORT_ID = "tcp-discovery" UDP_DISCOVERY_PORT_ID = "udp-discovery" ENGINE_HTTP_RPC_PORT_ID = "engine-rpc" +METRICS_PORT_ID = "metrics" PRIVATE_IP_ADDRESS_PLACEHOLDER = "KURTOSIS_IP_ADDR_PLACEHOLDER" @@ -36,6 +41,7 @@ USED_PORTS = { TCP_DISCOVERY_PORT_ID: shared_utils.new_port_spec(DISCOVERY_PORT_NUM, shared_utils.TCP_PROTOCOL), UDP_DISCOVERY_PORT_ID: shared_utils.new_port_spec(DISCOVERY_PORT_NUM, shared_utils.UDP_PROTOCOL), ENGINE_HTTP_RPC_PORT_ID: shared_utils.new_port_spec(ENGINE_HTTP_RPC_PORT_NUM, shared_utils.TCP_PROTOCOL), + METRICS_PORT_ID: shared_utils.new_port_spec(METRICS_PORT_NUM, shared_utils.TCP_PROTOCOL) } ENTRYPOINT_ARGS = ["sh", "-c"] @@ -90,6 +96,9 @@ def launch( jwt_secret = shared_utils.read_file_from_service(plan, service_name, jwt_secret_json_filepath_on_client) + metrics_url = "http://{0}:{1}".format(service.ip_address, METRICS_PORT_NUM) + besu_metrics_info = node_metrics.new_node_metrics_info(service_name, METRICS_PATH, metrics_url) + return el_client_context.new_el_client_context( "besu", "", # besu has no ENR @@ -99,7 +108,8 @@ def launch( WS_PORT_NUM, ENGINE_HTTP_RPC_PORT_NUM, jwt_secret, - service_name + service_name, + besu_metrics_info, ) @@ -144,7 +154,10 @@ def get_config( "--engine-rpc-port={0}".format(ENGINE_HTTP_RPC_PORT_NUM), "--sync-mode=FULL", "--data-storage-format=BONSAI", - "--kzg-trusted-setup=" + KZG_DATA_DIRPATH_ON_CLIENT_CONTAINER + "--kzg-trusted-setup=" + KZG_DATA_DIRPATH_ON_CLIENT_CONTAINER, + "--metrics-enabled=true", + "--metrics-host=0.0.0.0", + "--metrics-port={0}".format(METRICS_PORT_NUM), ] if len(existing_el_clients) > 0: diff --git a/src/el/el_client_context.star b/src/el/el_client_context.star index 1d732624..4ee4f82d 100644 --- a/src/el/el_client_context.star +++ b/src/el/el_client_context.star @@ -7,7 +7,8 @@ def new_el_client_context( ws_port_num, engine_rpc_port_num, jwt_secret, - service_name = ""): + service_name = "", + el_metrics_info = None): return struct( service_name = service_name, client_name = client_name, @@ -18,4 +19,5 @@ def new_el_client_context( ws_port_num = ws_port_num, engine_rpc_port_num = engine_rpc_port_num, jwt_secret = jwt_secret, + el_metrics_info = el_metrics_info, ) diff --git a/src/el/erigon/erigon_launcher.star b/src/el/erigon/erigon_launcher.star index 9aeaf3e1..fcdf8f55 100644 --- a/src/el/erigon/erigon_launcher.star +++ b/src/el/erigon/erigon_launcher.star @@ -3,6 +3,7 @@ input_parser = import_module("github.com/kurtosis-tech/eth-network-package/packa el_admin_node_info = import_module("github.com/kurtosis-tech/eth-network-package/src/el/el_admin_node_info.star") el_client_context = import_module("github.com/kurtosis-tech/eth-network-package/src/el/el_client_context.star") +node_metrics = import_module("github.com/kurtosis-tech/eth-network-package/src/node_metrics_info.star") package_io = import_module("github.com/kurtosis-tech/eth-network-package/package_io/constants.star") # The dirpath of the execution data directory on the client container @@ -10,9 +11,12 @@ EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER = "/home/erigon/execution-data" GENESIS_DATA_MOUNT_DIRPATH = "/genesis" +METRICS_PATH = "/metrics" + WS_RPC_PORT_NUM = 8545 DISCOVERY_PORT_NUM = 30303 ENGINE_RPC_PORT_NUM = 8551 +METRICS_PORT_NUM = 9001 # The min/max CPU/memory that the execution node can use EXECUTION_MIN_CPU = 100 @@ -25,6 +29,7 @@ WS_RPC_PORT_ID = "ws-rpc" TCP_DISCOVERY_PORT_ID = "tcp-discovery" UDP_DISCOVERY_PORT_ID = "udp-discovery" ENGINE_RPC_PORT_ID = "engine-rpc" +METRICS_PORT_ID = "metrics" PRIVATE_IP_ADDRESS_PLACEHOLDER = "KURTOSIS_IP_ADDR_PLACEHOLDER" @@ -33,6 +38,8 @@ USED_PORTS = { WS_RPC_PORT_ID: shared_utils.new_port_spec(WS_RPC_PORT_NUM, shared_utils.TCP_PROTOCOL), TCP_DISCOVERY_PORT_ID: shared_utils.new_port_spec(DISCOVERY_PORT_NUM, shared_utils.TCP_PROTOCOL), UDP_DISCOVERY_PORT_ID: shared_utils.new_port_spec(DISCOVERY_PORT_NUM, shared_utils.UDP_PROTOCOL), + ENGINE_RPC_PORT_ID: shared_utils.new_port_spec(ENGINE_RPC_PORT_NUM, shared_utils.TCP_PROTOCOL), + METRICS_PORT_ID: shared_utils.new_port_spec(METRICS_PORT_NUM, shared_utils.TCP_PROTOCOL), } ENTRYPOINT_ARGS = ["sh", "-c"] @@ -87,6 +94,9 @@ def launch( jwt_secret = shared_utils.read_file_from_service(plan, service_name, jwt_secret_json_filepath_on_client) + metrics_url = "http://{0}:{1}".format(service.ip_address, METRICS_PORT_NUM) + erigon_metrics_info = node_metrics.new_node_metrics_info(service_name, METRICS_PATH, metrics_url) + return el_client_context.new_el_client_context( "erigon", enr, @@ -96,7 +106,8 @@ def launch( WS_RPC_PORT_NUM, ENGINE_RPC_PORT_NUM, jwt_secret, - service_name + service_name, + erigon_metrics_info ) @@ -147,6 +158,9 @@ def get_config( "--authrpc.addr=0.0.0.0", "--authrpc.port={0}".format(ENGINE_RPC_PORT_NUM), "--authrpc.vhosts=*", + "--metrics", + "--metrics.addr=0.0.0.0", + "--metrics.port={0}".format(METRICS_PORT_NUM), ] if len(existing_el_clients) > 0: diff --git a/src/el/ethereumjs/ethereumjs_launcher.star b/src/el/ethereumjs/ethereumjs_launcher.star index f34bc410..14a3e261 100644 --- a/src/el/ethereumjs/ethereumjs_launcher.star +++ b/src/el/ethereumjs/ethereumjs_launcher.star @@ -3,6 +3,7 @@ input_parser = import_module("github.com/kurtosis-tech/eth-network-package/packa el_client_context = import_module("github.com/kurtosis-tech/eth-network-package/src/el/el_client_context.star") el_admin_node_info = import_module("github.com/kurtosis-tech/eth-network-package/src/el/el_admin_node_info.star") +node_metrics = import_module("github.com/kurtosis-tech/eth-network-package/src/node_metrics_info.star") package_io = import_module("github.com/kurtosis-tech/eth-network-package/package_io/constants.star") @@ -11,7 +12,7 @@ WS_PORT_NUM = 8546 WS_PORT_ENGINE_NUM = 8547 DISCOVERY_PORT_NUM = 30303 ENGINE_RPC_PORT_NUM = 8551 -#METRICS_PORT_NUM = 9001 +METRICS_PORT_NUM = 9001 # The min/max CPU/memory that the execution node can use EXECUTION_MIN_CPU = 100 @@ -26,12 +27,14 @@ TCP_DISCOVERY_PORT_ID = "tcp-discovery" UDP_DISCOVERY_PORT_ID = "udp-discovery" ENGINE_RPC_PORT_ID = "engine-rpc" WS_PORT_ENGINE_ID = "ws-engine" -#METRICS_PORT_ID = "metrics" +METRICS_PORT_ID = "metrics" GENESIS_DATA_MOUNT_DIRPATH = "/genesis" PREFUNDED_KEYS_MOUNT_DIRPATH = "/prefunded-keys" +METRICS_PATH = "/metrics" + # The dirpath of the execution data directory on the client container EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER = "/execution-data" @@ -44,7 +47,7 @@ USED_PORTS = { TCP_DISCOVERY_PORT_ID: shared_utils.new_port_spec(DISCOVERY_PORT_NUM, shared_utils.TCP_PROTOCOL), UDP_DISCOVERY_PORT_ID: shared_utils.new_port_spec(DISCOVERY_PORT_NUM, shared_utils.UDP_PROTOCOL), ENGINE_RPC_PORT_ID: shared_utils.new_port_spec(ENGINE_RPC_PORT_NUM, shared_utils.TCP_PROTOCOL), -# METRICS_PORT_ID: shared_utils.new_port_spec(METRICS_PORT_NUM, shared_utils.TCP_PROTOCOL) + # METRICS_PORT_ID: shared_utils.new_port_spec(METRICS_PORT_NUM, shared_utils.TCP_PROTOCOL) } ENTRYPOINT_ARGS = [] @@ -102,6 +105,10 @@ def launch( jwt_secret = shared_utils.read_file_from_service(plan, service_name, jwt_secret_json_filepath_on_client) + # TODO: Passing empty string for metrics_url for now https://github.com/kurtosis-tech/eth-network-package/issues/127 + # metrics_url = "http://{0}:{1}".format(service.ip_address, METRICS_PORT_NUM) + ethjs_metrics_info = node_metrics.new_node_metrics_info(service_name, METRICS_PATH, "") + return el_client_context.new_el_client_context( "ethereumjs", "", # ethereumjs has no enr @@ -112,6 +119,7 @@ def launch( ENGINE_RPC_PORT_NUM, jwt_secret, service_name, + ethjs_metrics_info, ) def get_config( diff --git a/src/el/geth/geth_launcher.star b/src/el/geth/geth_launcher.star index 41c019a8..357ecf68 100644 --- a/src/el/geth/geth_launcher.star +++ b/src/el/geth/geth_launcher.star @@ -4,6 +4,7 @@ el_client_context = import_module("github.com/kurtosis-tech/eth-network-package/ el_admin_node_info = import_module("github.com/kurtosis-tech/eth-network-package/src/el/el_admin_node_info.star") genesis_constants = import_module("github.com/kurtosis-tech/eth-network-package/src/prelaunch_data_generator/genesis_constants/genesis_constants.star") +node_metrics = import_module("github.com/kurtosis-tech/eth-network-package/src/node_metrics_info.star") package_io = import_module("github.com/kurtosis-tech/eth-network-package/package_io/constants.star") @@ -11,6 +12,7 @@ RPC_PORT_NUM = 8545 WS_PORT_NUM = 8546 DISCOVERY_PORT_NUM = 30303 ENGINE_RPC_PORT_NUM = 8551 +METRICS_PORT_NUM = 9001 # The min/max CPU/memory that the execution node can use EXECUTION_MIN_CPU = 100 @@ -25,6 +27,7 @@ TCP_DISCOVERY_PORT_ID = "tcp-discovery" UDP_DISCOVERY_PORT_ID = "udp-discovery" ENGINE_RPC_PORT_ID = "engine-rpc" ENGINE_WS_PORT_ID = "engineWs" +METRICS_PORT_ID = "metrics" # TODO(old) Scale this dynamically based on CPUs available and Geth nodes mining NUM_MINING_THREADS = 1 @@ -33,6 +36,8 @@ GENESIS_DATA_MOUNT_DIRPATH = "/genesis" PREFUNDED_KEYS_MOUNT_DIRPATH = "/prefunded-keys" +METRICS_PATH = "/debug/metrics/prometheus" + # The dirpath of the execution data directory on the client container EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER = "/execution-data" KEYSTORE_DIRPATH_ON_CLIENT_CONTAINER = EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER + "/keystore" @@ -47,7 +52,8 @@ USED_PORTS = { WS_PORT_ID: shared_utils.new_port_spec(WS_PORT_NUM, shared_utils.TCP_PROTOCOL), TCP_DISCOVERY_PORT_ID: shared_utils.new_port_spec(DISCOVERY_PORT_NUM, shared_utils.TCP_PROTOCOL), UDP_DISCOVERY_PORT_ID: shared_utils.new_port_spec(DISCOVERY_PORT_NUM, shared_utils.UDP_PROTOCOL), - ENGINE_RPC_PORT_ID: shared_utils.new_port_spec(ENGINE_RPC_PORT_NUM, shared_utils.TCP_PROTOCOL) + ENGINE_RPC_PORT_ID: shared_utils.new_port_spec(ENGINE_RPC_PORT_NUM, shared_utils.TCP_PROTOCOL), + METRICS_PORT_ID: shared_utils.new_port_spec(METRICS_PORT_NUM, shared_utils.TCP_PROTOCOL) } ENTRYPOINT_ARGS = ["sh", "-c"] @@ -108,6 +114,9 @@ def launch( jwt_secret = shared_utils.read_file_from_service(plan, service_name, jwt_secret_json_filepath_on_client) + metrics_url = "http://{0}:{1}".format(service.ip_address, METRICS_PORT_NUM) + geth_metrics_info = node_metrics.new_node_metrics_info(service_name, METRICS_PATH, metrics_url) + return el_client_context.new_el_client_context( "geth", enr, @@ -117,7 +126,8 @@ def launch( WS_PORT_NUM, ENGINE_RPC_PORT_NUM, jwt_secret, - service_name + service_name, + geth_metrics_info, ) def get_config( @@ -196,7 +206,10 @@ def get_config( "--authrpc.vhosts=*", "--authrpc.jwtsecret={0}".format(jwt_secret_json_filepath_on_client), "--syncmode=full", - "--rpc.allow-unprotected-txs" + "--rpc.allow-unprotected-txs", + "--metrics", + "--metrics.addr=0.0.0.0", + "--metrics.port={0}".format(METRICS_PORT_NUM), ] if BUILDER_IMAGE_STR in image: diff --git a/src/el/nethermind/nethermind_launcher.star b/src/el/nethermind/nethermind_launcher.star index 7510ab80..18741d82 100644 --- a/src/el/nethermind/nethermind_launcher.star +++ b/src/el/nethermind/nethermind_launcher.star @@ -3,6 +3,7 @@ input_parser = import_module("github.com/kurtosis-tech/eth-network-package/packa el_client_context = import_module("github.com/kurtosis-tech/eth-network-package/src/el/el_client_context.star") el_admin_node_info = import_module("github.com/kurtosis-tech/eth-network-package/src/el/el_admin_node_info.star") +node_metrics = import_module("github.com/kurtosis-tech/eth-network-package/src/node_metrics_info.star") package_io = import_module("github.com/kurtosis-tech/eth-network-package/package_io/constants.star") # The dirpath of the execution data directory on the client container @@ -10,10 +11,13 @@ EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER = "/execution-data" KZG_DATA_DIRPATH_ON_CLIENT_CONTAINER = "/genesis/output/trusted_setup.txt" GENESIS_DATA_MOUNT_DIRPATH = "/genesis" +METRICS_PATH = "/metrics" + RPC_PORT_NUM = 8545 WS_PORT_NUM = 8546 DISCOVERY_PORT_NUM = 30303 ENGINE_RPC_PORT_NUM = 8551 +METRICS_PORT_NUM = 9001 # The min/max CPU/memory that the execution node can use EXECUTION_MIN_CPU = 100 @@ -27,6 +31,7 @@ WS_PORT_ID = "ws" TCP_DISCOVERY_PORT_ID = "tcp-discovery" UDP_DISCOVERY_PORT_ID = "udp-discovery" ENGINE_RPC_PORT_ID = "engine-rpc" +METRICS_PORT_ID = "metrics" PRIVATE_IP_ADDRESS_PLACEHOLDER = "KURTOSIS_IP_ADDR_PLACEHOLDER" @@ -35,7 +40,8 @@ USED_PORTS = { WS_PORT_ID: shared_utils.new_port_spec(WS_PORT_NUM, shared_utils.TCP_PROTOCOL), TCP_DISCOVERY_PORT_ID: shared_utils.new_port_spec(DISCOVERY_PORT_NUM, shared_utils.TCP_PROTOCOL), UDP_DISCOVERY_PORT_ID: shared_utils.new_port_spec(DISCOVERY_PORT_NUM, shared_utils.UDP_PROTOCOL), - ENGINE_RPC_PORT_ID: shared_utils.new_port_spec(ENGINE_RPC_PORT_NUM, shared_utils.TCP_PROTOCOL) + ENGINE_RPC_PORT_ID: shared_utils.new_port_spec(ENGINE_RPC_PORT_NUM, shared_utils.TCP_PROTOCOL), + METRICS_PORT_ID: shared_utils.new_port_spec(METRICS_PORT_NUM, shared_utils.TCP_PROTOCOL) } NETHERMIND_LOG_LEVELS = { @@ -88,6 +94,9 @@ def launch( jwt_secret = shared_utils.read_file_from_service(plan, service_name, jwt_secret_json_filepath_on_client) + metrics_url = "http://{0}:{1}".format(service.ip_address, METRICS_PORT_NUM) + nethermind_metrics_info = node_metrics.new_node_metrics_info(service_name, METRICS_PATH, metrics_url) + return el_client_context.new_el_client_context( "nethermind", "", # nethermind has no ENR in the eth2-merge-kurtosis-module either @@ -98,7 +107,8 @@ def launch( WS_PORT_NUM, ENGINE_RPC_PORT_NUM, jwt_secret, - service_name + service_name, + nethermind_metrics_info, ) @@ -137,6 +147,8 @@ def get_config( "--Network.P2PPort={0}".format(DISCOVERY_PORT_NUM), "--JsonRpc.JwtSecretFile={0}".format(jwt_secret_json_filepath_on_client), "--Network.OnlyStaticPeers=true", + "--Metrics.Enabled=true", + "--Metrics.ExposePort={0}".format(METRICS_PORT_NUM), ] if len(existing_el_clients) > 0: diff --git a/src/el/reth/reth_launcher.star b/src/el/reth/reth_launcher.star index 87f0f48f..ceb6b98b 100644 --- a/src/el/reth/reth_launcher.star +++ b/src/el/reth/reth_launcher.star @@ -2,7 +2,7 @@ shared_utils = import_module("github.com/kurtosis-tech/eth-network-package/share input_parser = import_module("github.com/kurtosis-tech/eth-network-package/package_io/input_parser.star") el_client_context = import_module("github.com/kurtosis-tech/eth-network-package/src/el/el_client_context.star") el_admin_node_info = import_module("github.com/kurtosis-tech/eth-network-package/src/el/el_admin_node_info.star") - +node_metrics = import_module("github.com/kurtosis-tech/eth-network-package/src/node_metrics_info.star") package_io = import_module("github.com/kurtosis-tech/eth-network-package/package_io/constants.star") @@ -26,8 +26,9 @@ UDP_DISCOVERY_PORT_ID = "udp-discovery" ENGINE_RPC_PORT_ID = "engine-rpc" METRICS_PORT_ID = "metrics" +# Paths +METRICS_PATH = "/metrics" GENESIS_DATA_MOUNT_DIRPATH = "/genesis" - PREFUNDED_KEYS_MOUNT_DIRPATH = "/prefunded-keys" # The dirpath of the execution data directory on the client container @@ -99,6 +100,9 @@ def launch( jwt_secret = shared_utils.read_file_from_service(plan, service_name, jwt_secret_json_filepath_on_client) + metric_url = "http://{0}:{1}".format(service.ip_address, METRICS_PORT_NUM) + reth_metrics_info = node_metrics.new_node_metrics_info(service_name, METRICS_PATH, metric_url) + return el_client_context.new_el_client_context( "reth", "", # reth has no enr @@ -109,6 +113,7 @@ def launch( ENGINE_RPC_PORT_NUM, jwt_secret, service_name, + reth_metrics_info, ) def get_config( diff --git a/src/cl/cl_node_metrics_info.star b/src/node_metrics_info.star similarity index 69% rename from src/cl/cl_node_metrics_info.star rename to src/node_metrics_info.star index cb335dfe..08f1ce91 100644 --- a/src/cl/cl_node_metrics_info.star +++ b/src/node_metrics_info.star @@ -1,7 +1,7 @@ # this is a dictionary as this will get serialzed to JSON -def new_cl_node_metrics_info(name, path, url): +def new_node_metrics_info(name, path, url): return { "name": name, "path": path, "url": url - } + } \ No newline at end of file