Codified Observability — Key Takeaways
This is the final part of a series based on my DevOpsCon San Diego 2026 talk. The earlier posts walked each layer with the devopscon-2026 lab. This post is the map folded back up: one strategy, what it removes, and how to start without doing everything at once.
Four Layers as a Unified Strategy
| Layer | Outcome |
|---|---|
| Images | Agent and config strategy baked in — observable at first boot |
| Platforms | Observability stack managed as code — repeatable and auditable |
| Provisioning | Dashboards and alerts co-deployed with services |
| Orchestration | Runtime observability — no manual steps for day-2 agent changes |
None of these is a silver bullet alone. Images without a managed platform still leave you rebuilding Grafana by hand. A beautiful LGTM deploy without co-provisioned dashboards still leaves services dark until someone clicks around. Orchestration without an image that already has the binary still starts from “install the agent.” The value compounds.
In the lab that looks like a straight pipeline:
./run-all.sh
# 0 Multipass + Nomad + Docker + Alloy present
# 1 Packer base image with Alloy installed
# 2 Traefik + LGTM + Alloy system job
# 3 Terraform dashboards + logger job
In production it is the same idea with GitLab review gates and Vault at each hop.
What This Approach Eliminates
- Manual agent installation
- Post-incident monitoring as the default path
- Environment inconsistency for agents and configs
- Manual drift between “what we think is deployed” and reality
- Hardcoded secrets on hosts
- Unreviewed alert thresholds
- Dark production deploys
- Config that only lives in someone’s memory or a Grafana UI
- Toil on every new service
- On-call surprises from components that were never watched
You will not delete every item on day one. Crossing each one off is a useful definition of progress.
You Do Not Have to Do All Four at Once
Start where the friction is lowest and the value is highest for your team.
- Start with images — low friction, high value. Baking Alloy (or your agent of choice) into the base image removes an entire class of dark launches.
- Leverage modules for scalability and repeatability — Packer templates, Nomad jobspecs, Terraform modules for Grafana resources.
- Move dashboards into Terraform as you ship — do not require a big-bang migration of every existing panel. New services take the new path; old ones migrate when they change.
- Each layer compounds the last — once images are solid, platform-as-code is easier to trust; once the platform is code, co-deploying dashboards is natural; once dashboards are code, dynamic agents stop being a science project.
Small teams especially should resist boiling the ocean. The talk was titled for non-enterprise audiences on purpose: no license gate, no mandatory SaaS signup, runnable on your own hardware.
Key Takeaways
- Observability should be a property of your automation, not a task after it. If monitoring is a checklist item after go-live, it will be optional until it is painful.
- Each layer removes a whole class of human error. Images kill dark boots. Platforms kill snowflake stacks. Provisioning kills unreviewed dashboards. Orchestration kills fleet-wide toil.
- Simple, non-enterprise solutions work for small teams. Packer, Nomad, Terraform, Grafana LGTM, Alloy, and Vault (when you are ready) are enough to prove the pattern — and often enough to run it.
Series Index
- Codified Observability: Making Monitoring Unavoidable — the problem, the four-layer map, the lab
- Layer 1 — Images — Packer, Alloy in the base image, image factory
- Layer 2 — Platforms — Traefik + LGTM on Nomad
- Layer 3 — Provisioning — Grafana resources and services in one apply
- Layer 4 — Orchestration — Alloy as a Nomad system job
- Key Takeaways (this post)
Lab and Talk
- Lab: https://gitlab.com/lykins/devopscon-2026
- Talk: DevOpsCon San Diego 2026 — Simplifying and Scaling Observability for Non-Enterprise Teams (codified observability)
If you try the lab or adapt a layer into your own environment, I would like to hear what broke first — that is usually the most useful signal.