We have deployed our infrastructure using Terraform, but now we have no idea if it is actually healthy. Is there a way to automatically create Cloud Monitoring dashboards for our infrastructure via code?
I want our infrastructure-as-code deployment to also set up the alerting policies and dashboards so we aren't flying blind after a deployment.
Infrastructure observability is best maintained by codifying monitoring dashboards and alerting policies as native Terraform resources to ensure parity between infrastructure state and visibility configuration.
6 answers
You should absolutely define your Cloud Monitoring dashboards as Terraform resources, specifically using the google_monitoring_dashboard resource type. This approach ensures your observability stack evolves in lockstep with your infrastructure, preventing the common drift between deployed resources and the visibility tools intended to monitor them.
Years ago, I inherited a massive stack where the developers had deployed everything via code, but the monitoring was manual. We suffered a production outage, and I spent hours clicking through the console to find the relevant metrics while the site stayed down.
After that nightmare, I mandated that no service could be promoted to production without its corresponding alert policies and custom dashboards included in the repository. It saved us during every single deployment thereafter because the feedback loop was baked into the PR process.
Implementing monitoring via code is the only way to ensure governance compliance in enterprise environments.
- Define your dashboard JSON configurations in separate Terraform modules.
- Use variables to pass resource IDs into your alerting policy definitions.
- Reference your resource outputs to link health checks directly to specific instances.
- Commit your monitoring modules to your primary CI pipeline to automate updates.
Managing observability as code is functionally similar to managing infrastructure as code, though the trade-offs differ slightly depending on your platform. Using native providers like the Terraform Google or AWS providers is generally superior because they allow you to treat monitoring components as idempotent resources that update automatically during apply cycles.
Conversely, relying on external third-party observability platforms might offer more powerful visualization features, but often introduces complexity in state management and requires managing separate API keys or provider configurations that can complicate your Terraform lifecycle. If your priority is long-term stability and auditability, keeping your dashboards within the provider's native ecosystem is far more resilient than relying on external dashboards that may break when your provider versions change or when underlying API schemas are modified during cloud provider updates.
Stop treating monitoring like an afterthought. If you have the bandwidth to write infrastructure code, you have the bandwidth to write the dashboard code. Just push the JSON definitions through Terraform and stop waiting for someone to manually click buttons in the cloud console. It is not rocket science, it is just basic hygiene for any production-ready environment.
You should use the Terraform provider for your cloud to provision monitoring resources alongside your compute. This ensures that every deployment includes the necessary alerting policies and dashboards as part of the state file. It keeps your visibility consistent with your infrastructure footprint.

