June 9, 2025
Objective: Measure performance of Ethereum node(s) under load by simulating JSON-RPC API traffic using OctoPerf and track system metrics via Grafana and InfluxDB.
We'll use Geth for this example:
docker run -d --name geth-node \
-p 8545:8545 \
-v $HOME/.ethereum:/root/.ethereum \
ethereum/client-go \
--http --http.addr "0.0.0.0" --http.api "eth,net,web3" --http.corsdomain "*" --syncmode "fast"
💡 Use multiple nodes and expose JSON-RPC interfaces if testing cluster performance.
docker run -d --name=influxdb \
-p 8086:8086 \
-v influxdb:/var/lib/influxdb \
influxdb:1.8
Create a database for metrics:
docker exec -it influxdb influx
> CREATE DATABASE eth_metrics;
> exit
docker run -d --name=grafana \
-p 3000:3000 \
--link influxdb \
grafana/grafana
http://localhost:3000
(default login: admin/admin)http://influxdb:8086
, Database: eth_metrics
)Install Telegraf or Docker Stats Exporter to collect metrics and push to InfluxDB:
docker run -d --name=telegraf \
--net=host \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /etc:/host/etc:ro \
-e HOST_PROC=/host/proc \
-e HOST_SYS=/host/sys \
-e HOST_ETC=/host/etc \
telegraf \
--config-directory /etc/telegraf/telegraf.d
Configure telegraf.conf
to send to InfluxDB:
toml
[[outputs.influxdb]]
urls = ["http://localhost:8086"]
database = "eth_metrics"
http://<host>:8545
Content-Type: application/json
"result"
or valid block number.Example InfluxDB query (for Grafana panel):
sql
SELECT mean("usage_cpu") FROM "cpu" WHERE $timeFilter GROUP BY time($__interval), "host"
SymptomCauseFix500 Errors in OctoPerfRate-limited RPC callsIncrease node resources or rate-limit trafficGrafana shows no dataTelegraf misconfiguredCheck output section of telegraf.confLow throughputNode not syncedEnsure Geth/Besu is fully syncedTest fails quicklyDocker bridge issuesCheck Docker network mode and firewall rules
Connect with a Webflow Expert to create a website using this template.Learn More