Notes / Projects / Platform Shipsolid / 05 Platform Configuration / Grafana Tf

Grafana Terraform Provider — Capability Audit

Audit of [grafana/grafana](https://registry.

Updated May 1, 2026 · §202604280014-8 ·

Grafana Terraform Provider — Capability Audit

Audit of grafana/grafana provider capabilities against what is implemented in this repository.


Fully Implemented

DomainWhat’s done
Cloud Stack & Access PoliciesStack provisioning, Terraform admin SA, Alloy writer policies (per environment), Mimir/Loki LBAC reader tokens, Faro sourcemap upload policy
SSO / AuthenticationAzure AD OAuth with JMESPath role mapping, PKCE enabled, allowed_domains / allowed_groups parameterised
Teams & RBACSRE + product teams with Azure AD group mappings, 3 custom roles (admin/editor/viewer), explicit folder-level permissions per team
Data SourcesMimir (with exemplar linking), Loki (TraceID extraction via regex), Tempo (full cross-linking: logs↔traces↔metrics), Azure Monitor, explicit data source permissions, LBAC rules via grafana_data_source_config_lbac_rules
Folders & DashboardsHierarchical folder structure (root → platform → leaf), product folders auto-derived from products.yml, JSON dashboard provisioning with per-product flavours
AlertingContact points (Teams / webhook / email) driven by contact_points.yml + products.yml, ShipSolid standard message template, notification policy with per-team OnCall routes (continue=true), mute timings, alert rule groups (hardcoded SRE infra rules + JSON-driven product rules with token substitution)
OnCall / IRMAlertmanager integrations per product/team, escalation chains (5-step notify→wait→notify), weekly rotation schedules with per-member shifts, configurable timezone and wait times per team
SLOsAPI Gateway availability (99.9%), latency p99 (< 500 ms), error rate (< 0.1%) — all with fastburn/slowburn alerts linked to Mimir
Frontend Observability (Faro)Sourcemap upload access policy + token written to Key Vault; app_id, collection_url, api_endpoint stored in products.yml (app registration is manual — no provider resource exists to automate it)

Partially Implemented

DomainWhat’s doneWhat’s missing
Synthetic MonitoringModule written, product-level checks defined in products.yml, active in shipsolid (prod)Commented out in shipsoliddev — requires a valid sm_access_token from the Grafana Cloud UI before it can be activated

Not Implemented

DomainProvider resources availableNotes
Recording Rulesgrafana_recording_ruleNot defined — would pre-compute expensive PromQL into new metrics, reducing dashboard/alert query load
Annotationsgrafana_annotationNot used
Incident Managementgrafana_incident_*OnCall only; no incident declaration, timeline, or retrospective automation
Fleet Managementgrafana_fleet_management_*Marked PLANNED in codebase but not implemented
Machine Learninggrafana_ml_job, grafana_ml_alertNo anomaly detection or forecast-based alerting
Library Panelsgrafana_library_panelDashboards use standalone JSON; no shared panel components
Playlistgrafana_playlistNot used
Reportgrafana_reportNo scheduled PDF / email dashboard reports
Stack-level Service Accountsgrafana_service_account, grafana_service_account_tokenOnly the cloud-level Terraform admin SA is managed; no stack-level SAs

Known Constraints

  • LBAC on Terraform-managed data sources — see LBAC architecture: grafana_data_source_config_lbac_rules only works on manually-created basic-auth data sources. Terraform-managed sources return 403 from the Grafana Cloud API when LBAC rules are applied.
  • SLO data source — The SLO plugin uses the built-in Mimir data source only; custom data source UIDs are not supported.
  • Faro app registration — No grafana_frontend_observability_app resource exists in the provider (as of v4.69). Apps must be registered manually in the Grafana Cloud UI.

Local graph

Full graph →