Hyperspace Operations & Transport
The observability pipeline is broken and HotROD's canary can't validate. Wire an OpenTelemetry Collector with spanmetrics to convert distributed traces into Prometheus metrics, then write PromQL queries that catch idle canaries, high error rates, and latency spikes.
Mission Objective
- Automated rollout progression to HotROD version 1.76.0 driven by observability signals
- OpenTelemetry Collector configured with an OTLP receiver for HotROD traces, a Spanmetrics connector converting traces to metrics, trace export to Jaeger, and metrics export to Prometheus
- Canary analysis with three PromQL queries: traffic detection (at least 0.05 req/s to prevent idle canaries), error rate below 5%, and 95th-percentile latency below 1000ms
Key Learnings
- Configure OpenTelemetry Collector pipelines
- Spanmetrics connector (traces to metrics)
- Detect idle canaries with traffic validation
- Distributed tracing with Jaeger
The Story
After fixing the Zephyrian communications, word of your progressive release mastery spread across the galaxy. The Bytari, a highly advanced species from the Andromeda sector, were impressed.
They want to apply progressive delivery to their mission-critical service: HotROD (Hyperspace Operations & Transport, Rapid Orbital Dispatch), an interstellar ride-sharing service handling dispatch requests across thousands of star systems. Every millisecond of latency matters, and any error could strand travelers between dimensions.
A previous engineer started instrumenting HotROD with OpenTelemetry and configured Argo Rollouts for automated validation, but left the setup incomplete. The observability pipeline is broken. The Bytari don't use staging/production environments; they believe in single-environment progressive delivery validated purely by trace-derived metrics and automated health checks.
Your mission: fix the observability pipeline and canary validation. Make HotROD deployment-ready with proper distributed tracing.
Ready to start?
Launch in a preconfigured devcontainer
Free GitHub account required
Walkthrough
Open in GitHub Codespaces. The devcontainer is pre-configured and starts automatically. When you push from Codespaces, GitHub forks the repository to your account automatically.
Prefer working locally? Clone the repo and open it in any editor that supports the Dev Containers specification (VS Code, JetBrains IDEs, and others). The devcontainer config will be detected automatically.
Wait ~5-10 minutes for infrastructure to deploy. Port forwarding starts automatically after infrastructure is ready, keeping a terminal busy. Open a new terminal to run commands.
Open the Ports tab and navigate to each service:
- Port 30100: Argo CD (readonly / a-super-secure-password). Shows sync status. Use to refresh applications after pushing commits.
- Port 30101: Argo Rollouts. Shows canary deployment progress and analysis status.
- Port 30102: Prometheus. Explore available metrics and test PromQL queries. CLI tools work equally well if you prefer the terminal.
- Port 30103: Jaeger. Shows distributed traces from HotROD to verify that tracing is working end-to-end.
Fix the manifests in
adventures/01-echoes-lost-in-orbit/expert/manifests/. Use the Argo Rollouts dashboard, Prometheus UI, and Jaeger UI to debug and validate your changes.Commit and push to trigger the deployment:
git add adventures/01-echoes-lost-in-orbit/expert/manifests/ git commit -m "Fix configuration" git pushIf pushing to a branch other than main, also update the ApplicationSet in
appset.yamlto point to your branch.Refresh Argo CD apps:
argocd app get hotrod --refresh argocd app get otel --refreshIf you changed HotROD, retry the rollout:
kubectl argo rollouts retry rollout hotrod -n hotrodIf you changed the OTel Collector config, restart it:
kubectl rollout restart daemonset/collector -n otelWatch rollout progress. The rollout should progress automatically based on analysis metrics:
kubectl argo rollouts get rollout hotrod -n hotrod --watchRun the smoke test to verify your solution:
adventures/01-echoes-lost-in-orbit/expert/smoke-test.sh
Complete Your Challenge
- When you push from Codespaces, GitHub forks the repository to your account automatically. If you are working locally, fork the repository on GitHub before pushing.
- Verify your solution:
If it passes, it generates a Certificate of Completion you can paste into the discussion.adventures/01-echoes-lost-in-orbit/expert/smoke-test.sh - Share your solutions in the challenge thread (opens in new tab) on community.offon.dev.
Completed the challenge? Share your achievement on LinkedIn (opens in new tab)
Toolbox
- kubectl (opens in new tab) - Kubernetes CLI for interacting with the cluster
- kubens (opens in new tab) - fast way to switch between Kubernetes namespaces
- k9s (opens in new tab) - terminal UI for managing and inspecting your cluster
- Argo CD CLI (opens in new tab) - manage Argo CD applications from the command line
- Argo Rollouts kubectl plugin (opens in new tab) - extended kubectl commands for managing rollouts