Bundled Grafana dashboards
This page is part of the documentation for Orleans.Lattice 9.9.0 (release line 9.9), built 2026-10-04. It is also published as markdown, with every table and list, at bundled-grafana-dashboards.md, and llms.txt lists every page.Part of Metrics.
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.