---
title: "Bundled Grafana dashboards - Metrics"
url: "https://nsta1.github.io/Orleans.Lattice/docs/lattice/metrics/bundled-grafana-dashboards.html"
source: "https://github.com/NSTA1/Orleans.Lattice/blob/release/9.9/docs/lattice/metrics.md?plain=1#L887-L921"
package: "Orleans.Lattice"
version: "9.9.0"
documents: "Orleans.Lattice 9.9.0 (release line 9.9)"
built: "2026-10-04"
all-pages: "https://nsta1.github.io/Orleans.Lattice/llms.txt"
bundle: "https://nsta1.github.io/Orleans.Lattice/docs/lattice/llms-full.txt"
---
# Bundled Grafana dashboards

Part of [Metrics](../metrics.md).

The companion `Orleans.Lattice.Dashboards` package ships ready-to-import
dashboards keyed by `LatticeDashboardKind`:

| Kind | Title | Focus |
|---|---|---|
| `Overview` | Orleans.Lattice - Overview | Per-tree throughput, leaf-write percentiles, cache hit-rate, tombstone churn, splits, atomic-write outcomes (rate), coordinator completions, tree-lifecycle, event publish/drop, runtime config changes. The dashboard also includes a horizontal row of three atomic-write panels (saga duration p50/p95/p99, batch-size p50/p95/p99, and a dedicated saga-failure-rate panel), and the top-of-stack read-path envelopes: `GetAsync` / `GetManyAsync` per-call latency at p50 / p95 / p99 (`get.duration`, `get_many.duration`), per-stage sub-attribution (`get.stage.duration` tagged `route\|shard`, `get_many.stage.duration` tagged `route\|bucket\|fanout\|merge`), and a low-traffic tile pairing `ExistsAsync` (`exists.duration`) with `GetWithVersionAsync` (`get_with_version.duration`) - the latter bypasses the `LeafCacheGrain` by design, so its envelope runs systematically higher than `GetAsync` on the same key distribution. |
| `CommitPath` | Orleans.Lattice - Commit Path | Per-step commit-pipeline latency (`wal` / `apply` / `observer` / `digest`), storage-provider write duration, compaction duration, activation-time replay duration / entries by recovery outcome, and tombstone churn (reaped / expired / created). Adds top-of-stack `SetAsync` / `SetManyAsync` envelope percentiles and per-stage sub-attribution (`set.stage.duration` tagged `stage`, `set_many.stage.duration` tagged `gate\|route\|bucket\|fanout\|events`), ShardRoot-side per-step (`shard_root.set_many.{local_apply, shadow_forward, leaf_rpc}.duration`), WAL append decomposition (`wal.append.turn_wait` / `provider.duration` / `wal.shard.dispatch.duration`) with batch shape (`batch_entries` / `batch_bytes` / `dispatch_entries`) and back-pressure (`wal.append.in_flight` / `queue_depth`), storage-provider phase-2 panels (`provider.commit.duration` + `provider.phase2.batch_size`, plus a retry-attempts vs retry-exhausted vs idempotent-replays panel), leaf commit-concurrency (`leaf.commit.in_flight` p95), `WarmUpAsync` invocations + duration, and a digest-coalescing efficacy panel (`leaf.digest.publishes` tagged `path`) that surfaces the c2-xxix regression signature directly. Strictly write-side; the read-path envelopes live on the `Overview` dashboard to keep the commit-pipeline focus uncluttered. |
| `Replication` | Orleans.Lattice - Replication | Cross-cluster ship/apply/lag, WAL append vs trim, dead-letter churn, FIFO violations, fall-off-log events, per-peer cursor lag. Sources the `orleans.lattice.replication` meter, plus the core `orleans.lattice` meter for its WAL, WAL-compaction and WAL GC panels. |
| `AtomicWrites` | Orleans.Lattice - Atomic Writes | Dedicated `SetManyAtomicAsync` saga deep-dive: outcome rate (stacked area), saga duration p50/p95/p99 and p95 by outcome, batch size p50/p95/p99 and p95 by outcome, per-tree committed throughput, range-window non-committed saga count, and a separate saga-failure-rate panel with 1% / 5% threshold lines. Adds per-phase saga sub-attribution (`saga.{prepare, terminal_decision, broadcast, checkpoint, reminder}.duration` p95), broadcast deep-dive (`saga.broadcast.{shard, leaf, shard.stage}.duration`), per-key work (`saga.perkey.duration`), and saga fan-out size distribution (`saga.fanout.size` p50/p95/p99). |
| `MaterialisedViews` | Orleans.Lattice - Materialised Views | The `orleans.lattice.view.*` instruments above: apply-lag and drain-backlog-depth percentiles, filter / re-project (`view.applied`) and aggregation (`view.aggregation_applied`) apply throughput, and warning panels for lag-budget evictions, re-key collisions, atomic-staging backstop fall-backs, cross-tree joint-atomicity violations, and source back-pressure self-throttle (`view.source_backpressure`, split by observed source regime). Every panel is keyed by view name (and cluster); because a view's maintainer is a single grain activation that migrates between silos, the dashboard is a cluster-wide concern and deliberately offers no per-silo filter. Sources the core `orleans.lattice` meter only. |
| `Authorization` | Orleans.Lattice - Identity & Authorization | Enforcement-gate decision throughput (by `effect` and by `operation`), decision-latency percentiles, compiled-snapshot rebuild rate and the snapshot epoch / age gauges from the `orleans.lattice.auth` meter, alongside the subject-resolution cache hit-ratio and hit / miss throughput from the `orleans.lattice.membership` meter. Sources the `orleans.lattice.auth` and `orleans.lattice.membership` meters; useful only when the authentication / authorization packages are registered. Coverage of this meter is enforced from the owning packages' tests, not the dashboards package. |
| `Backup` | Orleans.Lattice - Backup & Restore | Capture / restore throughput and duration percentiles, per-backup size / artifact / entry distributions, cumulative processed throughput, retention reclaim and prune rates, incremental lag (entries and age behind the base cut), capture / restore failure rates by reason, scheduler skipped-run and overrun counters, the cross-tree-consistent fence selection / drain counters, and the inventory observable gauges (tracked count, max chain depth, catalog bytes, oldest / newest age, per-scope last-run status and last-success age). Sources the `orleans.lattice.backup` meter; useful only when the backup package is registered. Coverage of this meter is enforced from the backup package's own test, not the dashboards package. |
| `Scaling` | Orleans.Lattice - Autoscaling Signal | The smoothed, scale-in-gated scale-value gauge an autoscaler acts on and the raw instantaneous demand gauge, the three normalised compute-pressure dimensions (activation / host-resource / WAL-dispatch), the recommended silo replica count, and the storage-axis stats (WAL catalogue keys over the advisory threshold, and whether a WAL rebalance is recommended). Sources the `orleans.lattice.scaling` meter; useful only when the scaling package is registered. Coverage of this meter is enforced from the scaling package's own test, not the dashboards package. |
| `ReplicationGrpc` | Orleans.Lattice - Replication Transport (gRPC) | The insecure (plaintext) channel construction counter as a cumulative total and a per-second rate, broken out by peer cluster id and transport (`push` / `saga_control` / `snapshot`), so an accidental production plaintext downgrade under `AllowPlaintextEndpoints` is visible rather than silent. Sources the `orleans.lattice.replication.grpc` meter; useful only when the gRPC replication transport is registered. Coverage of this meter is enforced from that package's own test, not the dashboards package. |
| `Tenancy` | Orleans.Lattice - Per-Tenant Observability | The registered-tenant count (cluster aggregate) and, dimensioned by tenant, the usage series (stored bytes, live keys, resident memory, owned trees), the quota ceilings and burst-headroom percentage, and the durable metered overage series (bytes / keys / memory / trees). A templated `tenant` variable scopes every panel to one tenant or to all tenants. Sources the `orleans.lattice.tenancy` meter; useful only when the tenancy package is registered. Coverage of this meter is enforced from the tenancy package's own test, not the dashboards package. |
| `GrainIndex` | Orleans.Lattice - Grain Index | Each index's backfill lifecycle state and percent complete, its processed-versus-total crawl progress, its live entry count, onboarding throughput split by route (activation versus backfill), projection-latency percentiles, and index-write failure rates by route. A templated `index` variable scopes every panel to one index or to all of them. Sources the core `orleans.lattice` meter - the grain-index package publishes no meter of its own - but the series appear only once that package is registered. |

The `Overview` dashboard's atomic-write row is intentionally a teaser surface
suitable for at-a-glance operator scanning; the dedicated `AtomicWrites`
dashboard is the right home for incident triage and SLO drill-down.

Resolve the dashboard JSON at runtime by calling `LatticeDashboards.GetGrafanaDashboardJson(LatticeDashboardKind.AtomicWrites)` from the companion `Orleans.Lattice.Dashboards` package. This core metrics page is compiled by the core docs fixture, which intentionally does not reference `Orleans.Lattice.Dashboards`, so the package-specific call is named in prose here rather than compiled as a `verify` snippet.

The same dashboards are used by the in-repo benchmark cockpit, which
`benchmark/benchmark.ps1` syncs into the gitignored
`benchmark/grafana/dashboards/` on each run (so the folder is absent from a
fresh checkout), and by the persistent benchmark-history
cockpit (`benchmark/history/grafana/dashboards/`). The history cockpit
additionally ships a `Performance: Atomic Writes` view with headline KPI
tiles (ops/sec, p99 ns, mean ns, alloc/op B), trend timeseries, per-run
barcharts, and a stat + trend pair for the saga failure rate sourced from
the live cluster's Prometheus -> VictoriaMetrics scrape.

Previous: [Instrument catalog: Storage-provider commit pipeline to Grain-call observation (opt-in)](instrument-catalog-7.md). Contents: [Metrics](../metrics.md).
