Skip to content

chore(grafana): rebase Morph dashboard on upstream reth and add proofs-history panels #168

Description

@panos-xyz

Background

etc/grafana/dashboards/morph-reth.json is a Morph fork of upstream reth's overview dashboard, plus Morph-specific Engine API / payload-builder rows. The last dashboard change in this repo was PR #110 (2026-05-20, "Improve Grafana dashboard signal quality"). Since then we have stayed on reth v2.4.0 while upstream's etc/grafana/dashboards/overview.json continued to grow (state-root task, proof workers, engine-API message mix, blob/getBlobs latency, cargo-features, etc.). The Morph JSON was never rebased onto that tree.

Separately, bounded historical proofs (PR #142 / proofs-history ExEx) already emit Prometheus metrics that have no dashboard coverage:

  • morph.proofs: per-block duration (total / execution / state-root / write), trie/leaf write counters, earliest_block / latest_block window gauges, prune and unwind error counters.
  • morph.rpc.proofs: eth_getProof request / success / failure counters and latency.

Operators therefore cannot see whether the 7-day proofs window is healthy, lagging, pruning, or serving RPC, from the provisioned Grafana stack (etc/docker-compose.yml).

Problem

  1. Drift from upstream. Broken or stale PromQL against current reth metric names; missing panels that operators already expect from a v2.4 reth node.
  2. No proofs-history observability. After enabling --morph.proofs-history, there is no row for window bounds, catch-up cost, prune/unwind failures, or historical-proof RPC rate/latency.

Proposed work

  1. Rebase etc/grafana/dashboards/morph-reth.json onto the upstream reth overview dashboard that matches our pinned tag (paradigmxyz/reth v2.4.0), then re-apply Morph-only rows (custom L2 Engine API, payload builder, head timegap, Morph filters chain / role / service). Do not blindly copy later-than-v2.4 panels whose metric names we do not emit yet.
  2. Keep the Morph-specific Engine API and payload-builder sections; they are not in upstream.
  3. Add a Proof History row covering at least:
    • Window: reth_morph_proofs_earliest_block / reth_morph_proofs_latest_block (and the gap vs canonical height).
    • Ingest cost: block_total_duration_seconds, block_execution_duration_seconds, block_state_root_duration_seconds, block_write_duration_seconds.
    • Write volume: account/storage trie updates and hashed leaves.
    • Errors: prune_errors_total, unwind_errors_total.
    • RPC: reth_morph_rpc_proofs_requests_total, success/failure rates, latency_seconds.
  4. Follow the export flow in etc/README.md (Grafana UI export for sharing externally) so the JSON stays importable by etc/docker-compose.yml provisioning. Preserve ${datasource} / Prometheus placeholder replacement.
  5. Short note in etc/README.md that proofs-history panels require the node to be run with proofs history enabled.

Out of scope

  • Changing metric names in morph-proofs / morph-rpc (adapt the dashboard to what we already emit).
  • Alerting rules / Grafana Cloud.
  • Implementing eth_getMultiProof (separate issue). If that RPC lands first, add a method label or a second RPC series in the same Proof History row.

Acceptance

  • Dashboard still provisions from etc/grafana and the Morph Engine / payload rows still work.
  • New Proof History panels render against a node that has proofs history on (empty/zero is fine when it is off).
  • PromQL uses metrics that exist on the v2.4.0 + Morph binary; no panels pointed at names we do not scrape.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions