This page is a convenience cache of where things live in the repo. The repository is under active development, so this layout goes stale easily. If it disagrees with what is actually in the tree, trust the repo and update this page.
The repo is a polyglot monorepo: a Rust workspace, a uv-managed Python workspace, and a Go-tooled Hugo docsite all share the root.
materialize-monitoring/Cargo.toml/Cargo.lock: top-level Rust workspace (members underpackages/)pyproject.toml/uv.lock/.python-version: Python workspace, managed byuvgo.mod/go.sum: Go module that pinshugoandhelm-docsvia tool directivesMakefile: top-level entrypoint (make all,charts,dashboards,helm-docs,serve-docs)CHANGELOG.md: source of truth for released changes, maintained by the release tooling (see Releasing)CONTRIBUTING.md/README.md/LICENSErenovate.json: automated dependency bumps.terraform-docs.yml/.terraform-docs.docsite.yml: Terraform doc generation — the first injects into module READMEs, the second writes the docsite variable reference.pre-commit-config.yaml: contributor-experience hooks (see Internal Development).gitattributes: Git LFS for the subchart tarballs, pluslinguist-generatedon the docsite’s duplicate artifacts (see Two copies, one review)bin/: bash dev/CI entrypoints (flat; no subdirectories)check-lfs.sh: verify/repair Git LFS stateextract-crd-schemas.sh: pull CRD schemas out of upstream chartsfetch-grafana-schemas.sh: vendor the cog-generated Grafana JSON Schema documents from grafana-foundation-sdkgen-grafana-models.sh: generate the Rust Grafana models from those vendored schemas (typify)extract-grafana-operator-crds.sh: deflate the Grafana Operator CRDs into the CRDs chart (make grafana-operator-crds)helm-deps.sh: vendor each chart’s locked subchart tarballs intocharts/*/charts/(make helm-deps)mz-monitoring-build/mz-monitoring-check: thin wrappers over the Rust binaries
packages/: hand-authored, contributor-facing inputscomponents.yaml: the component manifest driving per-component versioning, changelog attribution, and release artifacts (see Versioning)dashboards/: dashboards-as-code in Rust (mz-dashboards) — one module per backend undersrc/, currentlygrafana/; each dashboard owns atheme.rs(per-tab colours) and aselector.rs(PromQL fragments that name dashboard variables), withgrafana/transform.rsshared between them;grafana/render.rsserializes deterministically,grafana/mod.rsis the dashboard registry, andgrafana/queries.rsis the handle through which every panel takes its expression and its description from the query registry — panels write no PromQL and no prose; all driven bymz-monitoring-build gen-dashboardsqueries/: query-registry YAML inputs (materialize-*.yamlfor the deployment,infra-*.yamlfor the platform,node-*.yamlfor node-exporter) — the metric/log/alert query definitions, validated againstmzmon-lib/schemas/query/mzmon-query.schema.yamlalloy-pipelines/: Alloy pipeline YAML inputs (agent.yaml,gateway.yaml,gateway-metrics.yaml,gateway-dest-stub.yaml)prometheus-scrapers/: hand-authored scrape sources (podmonitor-*.yaml,scrapeconfig-cadvisor.yaml) that thescrapetranspiler renders into the per-flavor outputs underpre-rendered/scrapers/alloy/: build context for the distroless Alloy image (Dockerfile,example-config.alloy)mzmon-lib/: Rust library — typed Alloy model, thescrapetranspiler, and thequeryregistry (model + rendering + metric extraction); embedded JSONSchemas underschemas/{alloy,scrape,query}/; vendored upstream Grafana JSON Schema documents plus thepackages.jsonplugin-id manifest underschemas/grafana/, and the Rust models generated from them undersrc/grafana/generated/;tests/fixtures/env-top.python-baseline.yamlis the frozen final Python render, shared by the model round-trip and dashboard parity suites; not consumed by customersmz-monitoring-build/: Rust CLI for artifact generation (gen_pipelines.rs,gen_scrape_configs.rs,extract_metrics.rs,main.rs) and for the release machinery (versioning.rs,propose.rs,publish.rs,release_notes.rs,github.rs)mz-monitoring-check/: Rust schema/consistency checksmz-monitoring-e2e/: Rust assertion suite for a running stack — one binary for every kind and cloud tier, reading the release’s coalesced Helm values to decide what applies (make e2e-verify). Asserts only; installs nothing
charts/materialize-monitoring/: umbrella chartChart.yaml/Chart.lock: chart metadata; lock pins subchart versionsvalues.yaml/README.md/README.md.gotmpl: profile-driven defaults; README generated from the template viahelm-docscharts/: vendored subchart tarballs (LFS) —alloy,loki,thanos,alertmanager,grafana,grafana-operator,kube-state-metrics,prometheus-node-exporter,metrics-serverpre-rendered/: generated artifacts loaded via{{ .Files.Get }}; never hand-editeddashboards/:grafana/anddatadog/pipelines/: rendered Alloy (agent.alloy,gateway.alloy,gateway-metrics.alloy,gateway-dest-stub.alloy)scrapers/:classic/(raw scrape config),prometheus-operator/(PodMonitors + ScrapeConfig),gmp/(GCPPodMonitoring)rules/:prometheus/,loki/,thanos/metrics/:metric-tiers.yaml
templates/: provided resources —alerts/,dashboards/,pipelines/,scrapers/, plusgrafana-grafana.yaml(theGrafanainstance),grafana-datasources.yaml(the Thanos / LokiGrafanaDatasources),validate.yamlandNOTES.txt(the render-time validation surface), and the_*.tplhelper files (_helpers.tpl,_grafana_helpers.tpl,_loki_helpers.tpl,_thanos_helpers.tpl,_alloy_helpers.tpl)profiles/: composable values overlays — sizing (loki-small,loki-large,loki-test), cloud examples (aws-example,gcp-example,azure-example,aws-amp-fanout), and shape overlays (existing-grafana,grafana-postgres,grafana-pvc,grafana-ingress,split-namespace,otel-metrics-fanout,otlp-metrics-honeycomb). The chart defaults target a medium install, so sizing profiles are deltas in either directionregistry/: hardened-image and private-registry overlays —pull-secret(the pull secret alone, composed first)mirror(same images, private host — anchors per upstream registry), and one per hardened-image vendor (chainguard,docker-hardened-images). Split that way because the pull secret is the half they all share, and because no singleglobalkey reaches every subchart. Only vendors that keep the upstream entrypoint and layout get a profile — Bitnami rebuilds around its own charts, so it is a port rather than a retag
tests/:helm-unittestsuites plus__snapshot__/(make helm-tests)
materialize-monitoring-crds/: CRDs chart (Chart.yaml,Chart.lock,values.yaml,README.md,README.md.gotmpl,tests/)charts/: the vendoredprometheus-operator-crdstarball, plusgrafana-operator-crds/deflated from the upstream operator chart, which publishes no CRDs chart of its own — generated bybin/extract-grafana-operator-crds.sh(make grafana-operator-crds)
terraform/(see Terraform Modules): the cloud-agnostic module that installs the released charts. Versioned as part of thematerialize-monitoringcomponent rather than on a stream of its own; per-cloud wrappers live inmaterialize-terraform-self-managedmodules/materialize-monitoring/: the module. Concern per file —values.tf(composition order),scheduling.tfandstorage_class.tf(subchart fan-outs),destinations.tf(extra metric destinations),config_hash.tf(the pod-template hash that rolls Alloy)examples/{aws,gcp}/: not deployable roots — plan targets for the tier-0 render check. Both clouds, because the chart’s storage defaults are S3-shaped and an AWS-only example agrees with every default it fails to set
test/generic-cloud/: the tier-2 substrate — rustfs standing in for S3, CNPG for a managed Postgres. Provisions storage and credentials and stops there; it does not call the module
test/e2e/: kind cluster config and the failure-diagnostics collector (make e2e-*). The assertions themselves live inpackages/mz-monitoring-e2edocs/: Hugo docsite (the source of this page)hugo.toml: site config;go.mod/go.sumpin the themecontent/: authored Markdown_index.mdfiles carry frontmatter only — no prose. A section’s landing content lives in a regular page inside it atweight: 1(e.g.logs-and-events/architecture.md,reference/internal/contributing.md), so every directory in the sidebar is a container and every clickable title is a real page. The site homecontent/_index.mdis the one exception- top-level sections:
getting-started/,metrics/(incl.collecting/),logs-and-events/,dashboards/(incl.grafana/),alerting/,operating/, plusarchitecture.mdando11y-glossary.md reference/:helm/,terraform/(generated variable reference),stable-metrics/,crds.md,changelog.md, andinternal/(this section —dashboard/,pipelines/,design-docs/, plusrepo-layout.md,roadmap.md,releasing.md,versioning.md,skills.md,helm.md)
layouts/,static/,assets/,data/,i18n/,archetypes/,themes/: Hugo machinerypublic/,resources/: generated output (not checked in)
legacy/: preserved field-engineering assets —sql_exporter/,prometheus/,grafana/,datadog/,tests/,docker-compose.yml,scrape_config.yamltools/: ancillary ecosystems kept out ofbin/chartlib/: helm-docs templatesshlib/: shared bash helpers
.claude/skills/: authoring conventions consumed by both contributors and AI agents.github/: GitHub Actions workflows —test.yaml(cargo, helm-unittest, terraform),e2e.yaml(the kind tiers),lint.yaml,pipelines.yaml,docs.yaml,auto-format.yaml,propose-bumps.yaml,publish-*.yaml,design-doc-notify.yaml(Slack notification for new design docs); alsopull_request_template.md, whose### Release Notessection is harvested intoCHANGELOG.md. Each workflow that path-filters does so in achangesjob rather than on the trigger, so its*-gaterollup still reports on unrelated PRs — a required check skipped at the trigger level stays pending forever.design-doc-notify.yamlis the exception, filtering on the trigger because it reports no status anyone gates on