Writing

Notes from the platform.

Mostly observability and infrastructure — what we built, what it cost, and what I would do differently.

Series · 10 parts · 40 min

The Observability Migration

We replaced a commercial APM and an AWS CloudWatch log bill with a self-hosted OpenTelemetry and Grafana stack. This is the whole account, in order: the architecture, each signal in turn, the migration, the bill, and the parts that went wrong.

  1. OpenTelemetry Changed the GameWhy vendor-neutral instrumentation turned the monitoring backend from a marriage into a decision we can revisit.2 min
  2. The ArchitectureWhy we ran the LGTM stack on EC2 with dedicated node pools per signal, and how we designed out the single points of failure.6 min
  3. Logs: From AWS CloudWatch to LokiMoving logs off CloudWatch onto Loki: label design, chunk storage on S3, and what queries cost once you own them.5 min
  4. Traces and Span FilteringGetting trace volume under control with tail sampling and span filtering, without losing the traces worth keeping.5 min
  5. Metrics: Mimir Over PrometheusPrometheus scrapes well but stores poorly. Why Mimir's S3 block storage replaced a fleet of unreplicated Prometheus instances.5 min
  6. OTel InstrumentationWiring the OpenTelemetry SDK into real services: resource attributes, batch processors, and the settings that actually matter.4 min
  7. GitOps Deployment ModelTerraform modules, configuration in Git, automated sync - running an observability stack you can rebuild from scratch.4 min
  8. Migrating MonitorsPorting hundreds of alerts into a new query language, and the remote-write we forgot to move.3 min
  9. The Cost BreakdownWhat the self-hosted stack costs per month, line by line, against the bill it replaced.2 min
  10. Lessons LearnedTen sessions in: what I would do the same, what I would do differently, and whether it was worth it.4 min

Subscribe by RSS →