Commit 55405874 authored by Barnabas Busa's avatar Barnabas Busa Committed by GitHub

feat: add beacon-metrics-gazer + beacon-metrics-gazer grafana dashboard (#114)

Changelog picked up from commits here:

feat: add beacon-metrics-gazer

---------
Co-authored-by: default avatarGyanendra Mishra <anomaly.the@gmail.com>
parent 14dc9577
......@@ -7,6 +7,7 @@ eth_network_module = import_module("github.com/kurtosis-tech/eth-network-package
transaction_spammer = import_module("github.com/kurtosis-tech/eth2-package/src/transaction_spammer/transaction_spammer.star")
cl_forkmon = import_module("github.com/kurtosis-tech/eth2-package/src/cl_forkmon/cl_forkmon_launcher.star")
el_forkmon = import_module("github.com/kurtosis-tech/eth2-package/src/el_forkmon/el_forkmon_launcher.star")
beacon_metrics_gazer = import_module("github.com/kurtosis-tech/eth2-package/src/beacon_metrics_gazer/beacon_metrics_gazer_launcher.star")
prometheus = import_module("github.com/kurtosis-tech/eth2-package/src/prometheus/prometheus_launcher.star")
grafana =import_module("github.com/kurtosis-tech/eth2-package/src/grafana/grafana_launcher.star")
testnet_verifier = import_module("github.com/kurtosis-tech/eth2-package/src/testnet_verifier/testnet_verifier.star")
......@@ -87,6 +88,11 @@ def run(plan, args):
el_forkmon.launch_el_forkmon(plan, el_forkmon_config_template, all_el_client_contexts)
plan.print("Succesfully launched execution layer forkmon")
plan.print("Launching beacon metrics gazer")
beacon_metrics_gazer_config_template = read_file(static_files.BEACON_METRICS_GAZER_CONFIG_TEMPLATE_FILEPATH)
beacon_metrics_gazer.launch_beacon_metrics_gazer(plan, beacon_metrics_gazer_config_template, all_cl_client_contexts,network_params)
plan.print("Succesfully launched beacon metrics gazer")
plan.print("Launching prometheus...")
prometheus_private_url = prometheus.launch_prometheus(
plan,
......
shared_utils = import_module("github.com/kurtosis-tech/eth2-package/src/shared_utils/shared_utils.star")
SERVICE_NAME = "beacon-metrics-gazer"
IMAGE_NAME = "dapplion/beacon-metrics-gazer:latest"
HTTP_PORT_ID = "http"
HTTP_PORT_NUMBER = 8080
BEACON_METRICS_GAZER_CONFIG_FILENAME = "beacon-metrics-gazer-ranges.yaml"
BEACON_METRICS_GAZER_CONFIG_MOUNT_DIRPATH_ON_SERVICE = "/config"
USED_PORTS = {
HTTP_PORT_ID:shared_utils.new_port_spec(HTTP_PORT_NUMBER, shared_utils.TCP_PROTOCOL, shared_utils.HTTP_APPLICATION_PROTOCOL)
}
def launch_beacon_metrics_gazer(
plan,
config_template,
cl_client_contexts,
network_params
):
data = []
for index, client in enumerate(cl_client_contexts):
start_index = index*network_params.num_validator_keys_per_node
end_index = ((index+1)*network_params.num_validator_keys_per_node)-1
service_name = client.beacon_service_name
data.append({"ClientName": service_name, "Range": "{0}-{1}".format(start_index, end_index)})
template_data = {"Data": data}
template_and_data_by_rel_dest_filepath = {}
template_and_data_by_rel_dest_filepath[BEACON_METRICS_GAZER_CONFIG_FILENAME] = shared_utils.new_template_and_data(config_template, template_data)
config_files_artifact_name = plan.render_templates(template_and_data_by_rel_dest_filepath, "beacon-metrics-gazer-config")
config = get_config(
config_files_artifact_name,
cl_client_contexts[0].ip_addr,
cl_client_contexts[0].http_port_num)
plan.add_service(SERVICE_NAME, config)
def get_config(
config_files_artifact_name,
ip_addr,
http_port_num):
config_file_path = shared_utils.path_join(BEACON_METRICS_GAZER_CONFIG_MOUNT_DIRPATH_ON_SERVICE, BEACON_METRICS_GAZER_CONFIG_FILENAME)
return ServiceConfig(
image = IMAGE_NAME,
ports = USED_PORTS,
files = {
BEACON_METRICS_GAZER_CONFIG_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,
},
cmd = [
"http://{0}:{1}".format(ip_addr, http_port_num),
"--ranges-file",
"/config/{0}".format(BEACON_METRICS_GAZER_CONFIG_FILENAME),
"--port",
"{0}".format(HTTP_PORT_NUMBER),
"--address",
"0.0.0.0",
"-v"
]
)
......@@ -17,7 +17,7 @@ CONFIG_DIRPATH_ENV_VAR = "GF_PATHS_PROVISIONING"
GRAFANA_CONFIG_DIRPATH_ON_SERVICE = "/config"
GRAFANA_DASHBOARDS_DIRPATH_ON_SERVICE = "/dashboards"
GRAFANA_DASHBOARDS_FILEPATH_ON_SERVICE = GRAFANA_DASHBOARDS_DIRPATH_ON_SERVICE + "/dashboard.json"
GRAFANA_DASHBOARDS_FILEPATH_ON_SERVICE = GRAFANA_DASHBOARDS_DIRPATH_ON_SERVICE
USED_PORTS = {
......
......@@ -13,6 +13,10 @@ EL_FORKMON_CONFIG_TEMPLATE_FILEPATH = STATIC_FILES_DIRPATH + \
PROMETHEUS_CONFIG_TEMPLATE_FILEPATH = STATIC_FILES_DIRPATH + \
"/prometheus-config/prometheus.yml.tmpl"
# Beacon Metrics Gazer config
BEACON_METRICS_GAZER_CONFIG_TEMPLATE_FILEPATH = STATIC_FILES_DIRPATH + \
"/beacon-metrics-gazer-config/config.yaml.tmpl"
# Grafana config
GRAFANA_CONFIG_DIRPATH = "/grafana-config"
GRAFANA_DATASOURCE_CONFIG_TEMPLATE_FILEPATH = STATIC_FILES_DIRPATH + \
......@@ -20,4 +24,4 @@ GRAFANA_DATASOURCE_CONFIG_TEMPLATE_FILEPATH = STATIC_FILES_DIRPATH + \
GRAFANA_DASHBOARD_PROVIDERS_CONFIG_TEMPLATE_FILEPATH = STATIC_FILES_DIRPATH + \
GRAFANA_CONFIG_DIRPATH + "/templates/dashboard-providers.yml.tmpl"
GRAFANA_DASHBOARDS_CONFIG_DIRPATH = STATIC_FILES_DIRPATH + \
GRAFANA_CONFIG_DIRPATH + "/dashboards/dashboard.json"
GRAFANA_CONFIG_DIRPATH + "/dashboards"
{{ range $data := .Data }}
{{ $data.Range }}: {{ $data.ClientName }}
{{ end }}
\ No newline at end of file
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": {
"type": "grafana",
"uid": "-- Grafana --"
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"target": {
"limit": 100,
"matchAny": false,
"tags": [],
"type": "dashboard"
},
"type": "dashboard"
}
]
},
"description": "",
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
"id": 3,
"links": [],
"liveNow": false,
"panels": [
{
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
"fieldConfig": {
"defaults": {
"custom": {
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"scaleDistribution": {
"type": "linear"
}
}
},
"overrides": []
},
"gridPos": {
"h": 18,
"w": 12,
"x": 0,
"y": 0
},
"id": 6,
"options": {
"calculate": false,
"cellGap": 1,
"color": {
"exponent": 0.5,
"fill": "dark-orange",
"max": 1,
"min": 0,
"mode": "scheme",
"reverse": true,
"scale": "exponential",
"scheme": "RdYlGn",
"steps": 20
},
"exemplars": {
"color": "rgba(255,0,255,0.7)"
},
"filterValues": {
"le": 1e-9
},
"legend": {
"show": true
},
"rowsFrame": {
"layout": "auto"
},
"tooltip": {
"show": true,
"yHistogram": false
},
"yAxis": {
"axisPlacement": "left",
"reverse": true
}
},
"pluginVersion": "9.2.3",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "UhcO3vy7z"
},
"editorMode": "code",
"expr": "beacon_network_target_participation",
"legendFormat": "{{range}}",
"range": true,
"refId": "A"
}
],
"title": "Target Participations Rates",
"type": "heatmap"
},
{
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
"fieldConfig": {
"defaults": {
"custom": {
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"scaleDistribution": {
"type": "linear"
}
}
},
"overrides": []
},
"gridPos": {
"h": 18,
"w": 12,
"x": 12,
"y": 0
},
"id": 5,
"options": {
"calculate": false,
"cellGap": 1,
"color": {
"exponent": 0.5,
"fill": "dark-orange",
"max": 1,
"min": 0,
"mode": "scheme",
"reverse": true,
"scale": "exponential",
"scheme": "RdYlGn",
"steps": 20
},
"exemplars": {
"color": "rgba(255,0,255,0.7)"
},
"filterValues": {
"le": 1e-9
},
"legend": {
"show": true
},
"rowsFrame": {
"layout": "auto"
},
"tooltip": {
"show": true,
"yHistogram": false
},
"yAxis": {
"axisPlacement": "left",
"reverse": true
}
},
"pluginVersion": "9.2.3",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "UhcO3vy7z"
},
"editorMode": "code",
"expr": "beacon_network_source_participation",
"legendFormat": "{{range}}",
"range": true,
"refId": "A"
}
],
"title": "Source Participations Rates",
"type": "heatmap"
},
{
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
"fieldConfig": {
"defaults": {
"custom": {
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"scaleDistribution": {
"type": "linear"
}
}
},
"overrides": []
},
"gridPos": {
"h": 15,
"w": 12,
"x": 0,
"y": 18
},
"id": 3,
"options": {
"calculate": false,
"cellGap": 1,
"color": {
"exponent": 0.5,
"fill": "dark-orange",
"max": 1,
"min": 0,
"mode": "scheme",
"reverse": true,
"scale": "exponential",
"scheme": "RdYlGn",
"steps": 20
},
"exemplars": {
"color": "yellow"
},
"filterValues": {
"le": 1e-9
},
"legend": {
"show": true
},
"rowsFrame": {
"layout": "auto"
},
"tooltip": {
"show": true,
"yHistogram": false
},
"yAxis": {
"axisPlacement": "left",
"reverse": true
}
},
"pluginVersion": "9.2.3",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "UhcO3vy7z"
},
"editorMode": "code",
"expr": "beacon_network_head_participation",
"legendFormat": "{{range}}",
"range": true,
"refId": "A"
}
],
"title": "Head Participations Rates",
"type": "heatmap"
},
{
"datasource": {
"type": "prometheus",
"uid": "PBFA97CFB590B2093"
},
"fieldConfig": {
"defaults": {
"custom": {
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"scaleDistribution": {
"type": "linear"
}
}
},
"overrides": []
},
"gridPos": {
"h": 15,
"w": 12,
"x": 12,
"y": 18
},
"id": 4,
"options": {
"calculate": false,
"cellGap": 1,
"color": {
"exponent": 0.5,
"fill": "dark-orange",
"mode": "scheme",
"reverse": true,
"scale": "exponential",
"scheme": "RdYlGn",
"steps": 20
},
"exemplars": {
"color": "rgba(255,0,255,0.7)"
},
"filterValues": {
"le": 1e-9
},
"legend": {
"show": true
},
"rowsFrame": {
"layout": "auto"
},
"tooltip": {
"show": true,
"yHistogram": false
},
"yAxis": {
"axisPlacement": "left",
"reverse": true
}
},
"pluginVersion": "9.2.3",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "UhcO3vy7z"
},
"editorMode": "code",
"expr": "beacon_network_inactivity_scores",
"legendFormat": "{{range}}",
"range": true,
"refId": "A"
}
],
"title": "Inactivity Scores",
"type": "heatmap"
}
],
"refresh": "",
"revision": 1,
"schemaVersion": 37,
"style": "dark",
"tags": [],
"templating": {
"list": []
},
"time": {
"from": "now-6h",
"to": "now"
},
"timepicker": {},
"timezone": "",
"title": "Validator Participation Rates Dashboardssss",
"uid": "participation_rates_dashboards",
"version": 1,
"weekStart": ""
}
......@@ -10,3 +10,7 @@ scrape_configs:
static_configs:
- targets: ['{{ $clNode.url }}']
{{ end }}
- job_name: 'beacon-metrics-gazer'
metrics_path: '/metrics'
static_configs:
- targets: ['beacon-metrics-gazer:8080']
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment