Project 3: Add Monitoring, Tracing & GitOps
The operational layer that turns a running app into a production-grade system.
Your app is containerised, provisioned with Terraform, and running on Kubernetes. It works β but can you see it, and how do you deploy changes safely? Project 3 adds the operational layer: monitoring (Prometheus + Grafana), tracing (Zipkin), and GitOps delivery (Argo CD). This is what makes it truly production-grade β and completes your portfolio.
π― Learning Objectives
- Expose app metrics and monitor them with Prometheus + Grafana
- Add distributed tracing with Zipkin
- Deliver the app via Argo CD GitOps
- Tie the full system together into one coherent project
Step 1 β Monitoring
First, expose a /metrics endpoint in the app (using a Prometheus client library), then tell Prometheus to scrape it. On Kubernetes this is usually annotation-based or via a ServiceMonitor:
# add scrape annotations to the app's pods/service
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "3000"
prometheus.io/path: "/metrics"Then build a RED dashboard in Grafana (Rate, Errors, Duration) β the same pattern from the monitoring track:
# Request rate
sum(rate(http_requests_total{app="myapp"}[5m]))
# Error ratio
sum(rate(http_requests_total{app="myapp",status=~"5.."}[5m]))
/
sum(rate(http_requests_total{app="myapp"}[5m]))
# p95 latency
histogram_quantile(0.95,
sum(rate(http_request_duration_seconds_bucket{app="myapp"}[5m])) by (le))Add an alert (via Alertmanager) for a sustained high error rate, and youβll know about problems before users complain.
Step 2 β Tracing
Instrument the app with OpenTelemetry exporting to Zipkin (as in the tracing track), so requests across services produce a waterfall you can inspect:
traceExporter: new ZipkinExporter({
url: "http://zipkin.observability:9411/api/v2/spans",
})Now when the RED dashboard shows a latency spike, you donβt guess β you open Zipkin, find the slow trace, and see exactly which span (a slow DB query, a retrying downstream call) is responsible. Metrics detect; traces localize.
π‘ Observability before you need it
Add monitoring and tracing while things are calm, not during an incident. The whole point is that when something breaks at 3am, the dashboards and traces are already there waiting for you.
Step 3 β GitOps Delivery with Argo CD
Now replace any manual kubectl apply with GitOps. Commit all your Kubernetes manifests to a repo and let Argo CD keep the cluster in sync:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/you/myapp-config.git
targetRevision: main
path: k8s
destination:
server: https://kubernetes.default.svc
namespace: myapp
syncPolicy:
automated: { prune: true, selfHeal: true }The delivery loop is now fully automated and safe:
CI builds image β bumps image tag (SHA) in myapp-config repo
β
Argo CD detects the commit
β
syncs cluster to match Git β new version liveDeploys become pull requests; rollbacks become git revert; drift is auto-corrected. Every one of the earlier tracks now clicks into place.
β Close the loop end-to-end
For your portfolio, make sure the whole chain works without manual steps: push code β CI builds & publishes a SHA-tagged image β the config repo is updated β Argo CD deploys it β the dashboard shows the new version healthy. That end-to-end demo is what impresses interviewers.
The Complete System
Step back and look at what youβve built β a genuine production-grade system that exercises the entire roadmap:
Code βββΆ CI/CD (build, test, SHA-tag image) [Docker, GitHub Actions]
β
Config repo (Git) [GitOps source of truth]
β
Argo CD sync [Argo CD]
βΌ
Kubernetes cluster (provisioned by Terraform) [Terraform, Kubernetes]
β
ββββββββββββββΌββββββββββββββ
Prometheus Zipkin Grafana [Monitoring, Tracing]
(metrics) (traces) (dashboards+alerts)That single diagram is your elevator pitch: βI built and operate a containerised app, provisioned with IaC, deployed to Kubernetes via GitOps, with full monitoring and tracing.β Thatβs a DevOps engineer.
π§ͺ Hands-on Lab
Tell the End-to-End Story
Write the sequence of what happens, across all your tooling, from the moment you push a one-line code change to the moment the new version is confirmed healthy in production.
π§ Knowledge Check
In the finished system, how does a code change reach production?
How do monitoring and tracing complement each other during an incident?
πΌ Interview Preparation
Describe an end-to-end production-grade system you'd be proud to show.
π Track Complete
Congratulations β youβve built a complete, production-grade DevOps system and, with it, a portfolio that ties together every skill on the roadmap: Linux and Git foundations, containers, Kubernetes, Terraform, CI/CD, monitoring, tracing, GitOps, and even AI-assisted operations with MCP.
You now have the vocabulary, the hands-on patterns, the interview answers, and a real project to point to. The best next step is to build your own variation β pick a different app, a different cloud, add a feature β and make the story yours.