<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dashboard on materialize-monitoring Documentation</title><link>https://materializeinc.github.io/materialize-monitoring/reference/development/dashboard/</link><description>Recent content in Dashboard on materialize-monitoring Documentation</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://materializeinc.github.io/materialize-monitoring/reference/development/dashboard/index.xml" rel="self" type="application/rss+xml"/><item><title>Overview</title><link>https://materializeinc.github.io/materialize-monitoring/reference/development/dashboard/overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://materializeinc.github.io/materialize-monitoring/reference/development/dashboard/overview/</guid><description>&lt;h1 id="dashboards-as-code"&gt;Dashboards as Code&lt;a class="anchor" href="#dashboards-as-code"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;Instead of more common ClickOps strategies (manually configuring dashboards in the UI), we manage dashboards as reproducible source code.&#10;Sources live under &lt;code&gt;packages/dashboards/&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;The audience for this section is &lt;strong&gt;repo contributors&lt;/strong&gt; — SRE, Field Engineering, CloudOps, Database Engineers — and AI&#10;agents reading the corresponding &lt;code&gt;dashboards-as-code&lt;/code&gt; skill.&#10;The audience for the dashboards themselves (panel descriptions, naming, visual choices) is the Materialize end user; see&#10;&lt;a href="https://materializeinc.github.io/materialize-monitoring/reference/development/dashboard/style-guidelines/"&gt;Style Guidelines&lt;/a&gt; for that voice.&lt;/p&gt;</description></item><item><title>SDKs and Schemas</title><link>https://materializeinc.github.io/materialize-monitoring/reference/development/dashboard/sdks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://materializeinc.github.io/materialize-monitoring/reference/development/dashboard/sdks/</guid><description>&lt;h1 id="sdks-and-schemas"&gt;SDKs and Schemas&lt;a class="anchor" href="#sdks-and-schemas"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;The Grafana ecosystem has been undergoing major transitions in how dashboard configurations are managed circa 2025;&#10;web searches frequently turn up inconsistent or outdated documentation.&#10;This page pins down what we target, what we generate, and which SDKs we use to do it.&lt;/p&gt;&#10;&lt;h2 id="targets"&gt;Targets&lt;a class="anchor" href="#targets"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Currently supported:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Grafana 13&lt;/strong&gt; (Dashboard v2 schema) — latest as of April 2026, primary target&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Grafana 12&lt;/strong&gt; (Dashboard v2beta1 schema)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Planned (stubs are acceptable for now):&lt;/p&gt;</description></item><item><title>Style Guidelines</title><link>https://materializeinc.github.io/materialize-monitoring/reference/development/dashboard/style-guidelines/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://materializeinc.github.io/materialize-monitoring/reference/development/dashboard/style-guidelines/</guid><description>&lt;h1 id="dashboard-style-guidelines"&gt;Dashboard Style Guidelines&lt;a class="anchor" href="#dashboard-style-guidelines"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;Conventions for building visually consistent, operator-friendly dashboards.&#10;The audience for the dashboards themselves is &lt;strong&gt;Materialize end users&lt;/strong&gt;: database-literate operators with basic&#10;graph-reading fluency but minimal cloud / Kubernetes / observability expertise.&#10;SQL is fair game; jargon like &amp;ldquo;differential dataflow&amp;rsquo;s arrangement&amp;rdquo; needs a one-liner explanation when it appears.&lt;/p&gt;&#10;&lt;h2 id="layouts"&gt;Layouts&lt;a class="anchor" href="#layouts"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Prefer &lt;strong&gt;automatic layouts&lt;/strong&gt; over fixed positioning. Dashboard v2 provides more ergonomic options like Tabs and a formal automatic layout system.&lt;/p&gt;</description></item><item><title>Generating and Pushing Dashboards</title><link>https://materializeinc.github.io/materialize-monitoring/reference/development/dashboard/generating/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://materializeinc.github.io/materialize-monitoring/reference/development/dashboard/generating/</guid><description>&lt;h1 id="generating-and-pushing-dashboards"&gt;Generating and Pushing Dashboards&lt;a class="anchor" href="#generating-and-pushing-dashboards"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;How dashboard code is structured, how we keep generation deterministic, and how dashboards flow from source code into a live Grafana instance.&lt;/p&gt;&#10;&lt;h2 id="code-structure"&gt;Code structure&lt;a class="anchor" href="#code-structure"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Dashboards live in &lt;code&gt;packages/dashboards&lt;/code&gt; (the &lt;code&gt;mz-dashboards&lt;/code&gt; crate), one module per backend under &lt;code&gt;src/&lt;/code&gt;.&#10;&lt;code&gt;grafana/&lt;/code&gt; is the only backend today; a Datadog or Google Cloud Monitoring backend belongs beside it rather than inside&#10;it, since little is genuinely shared — the queries differ per engine and each SDK has its own panel and layout model.&lt;/p&gt;</description></item><item><title>Testing</title><link>https://materializeinc.github.io/materialize-monitoring/reference/development/dashboard/testing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://materializeinc.github.io/materialize-monitoring/reference/development/dashboard/testing/</guid><description>&lt;h1 id="testing"&gt;Testing&lt;a class="anchor" href="#testing"&gt;#&lt;/a&gt;&lt;/h1&gt;&#10;&lt;p&gt;Dashboard code is tested with &lt;code&gt;cargo test&lt;/code&gt;.&#10;Unit tests live in a &lt;code&gt;#[cfg(test)] mod tests&lt;/code&gt; at the bottom of the module they cover; the suites that need the whole&#10;dashboard live under &lt;code&gt;packages/dashboards/tests/&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;For broader code-quality tooling see&#10;&lt;a href="https://materializeinc.github.io/materialize-monitoring/reference/development/dashboard/generating/#code-quality"&gt;Generating and Pushing Dashboards &amp;gt; Code quality&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="what-each-suite-is-for"&gt;What each suite is for&lt;a class="anchor" href="#what-each-suite-is-for"&gt;#&lt;/a&gt;&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Suite&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Covers&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;dashboards/tests/env_top_parity.rs&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;the port against the frozen Python render: titles, plugin/unit, queries, transformations, tab/row skeleton, variable set&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;dashboards/tests/registry_contract.rs&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;that every registry id a panel names resolves, and that a bad id or legend mismatch is reported rather than rendered&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;mzmon-lib/tests/grafana_golden.rs&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;that the generated models round-trip a real Dashboard v2 document&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;mzmon-lib/tests/grafana_end_to_end.rs&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;a complete dashboard built through every layer, then deserialized back through the models&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;mzmon-lib/tests/grafana_query_bridge.rs&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;the query bridge against the real registry under &lt;code&gt;packages/queries/&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;charts/materialize-monitoring-dashboards/tests/dashboards_test.yaml&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;that the chart ships what &lt;code&gt;selected&lt;/code&gt; selects — the patterns are globbed against the pre-rendered tree, so a dashboard joins or leaves the release silently otherwise — and that its resource names do not collide with the ones the umbrella chart used to create&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;in-module tests&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;per-tab structure, selector shapes, threshold ladders, panel presets&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;The models carry &lt;code&gt;deny_unknown_fields&lt;/code&gt;, so anything invented along the way fails at deserialization rather than at push&#10;time.&lt;/p&gt;</description></item></channel></rss>