How iam-veeramalla/observability-zero-to-hero works
1. This repository is a 7-part observability tutorial, not a single product. Each day-* folder is a mostly self-contained lab that adds one layer of the observability stack on top of Kubernetes.
2. The architectural center of the repo is Kubernetes. Almost every day introduces manifests or Helm values that deploy components into a cluster, so the diagram should show Kubernetes as the hosting boundary for the apps and observability services.
3. Days 1–3 focus on metrics. The stack is Prometheus for collection/storage, Grafana for visualization, and kube-prometheus-stack-style installation/configuration for cluster-level monitoring. Day 3 adds PromQL as the query layer over Prometheus data.
4. Day 4 adds application instrumentation. There are two Node.js services, service-a and service-b, each containerized with a Dockerfile and deployed via Kubernetes manifests. They export custom metrics via prom-client, and the services are the primary telemetry sources in this stage.
5. The Day 4 application flow is service-to-service: service-a and service-b are deployed separately and exposed with their own Kubernetes Services. This is also where the repo introduces Alertmanager, so the metrics flow becomes: app metrics → Prometheus → alert rules → Alertmanager → email notification config.
6. Day 5 introduces logging. The repo contains a log pipeline built around Fluent Bit, with Kubernetes configuration for collecting container logs from the cluster and forwarding them to a log backend. The folder naming and README imply an EFK-style pattern, while the included manifests suggest an OpenSearch/Fluent Bit deployment variant.
7. Day 6 introduces distributed tracing with Jaeger. The architecture adds trace generation from instrumented services and sends traces to Jaeger, which becomes the trace storage and UI layer. This is a separate telemetry plane from metrics and logs, but still deployed in Kubernetes via Helm values.
8. Day 7 is the most integrated setup. It contains two Go microservices, microservice-a and microservice-b, plus OpenTelemetry Collector configuration, Prometheus config, and Jaeger values. This is the unified observability stage where one app emits metrics and traces through OpenTelemetry-enabled pipelines.
9. The Day 7 data flow is the key architecture pattern for the repo: Go services → OpenTelemetry instrumentation/Collector → backends such as Prometheus for metrics and Jaeger for traces. The repo also includes Kubernetes manifests for the services, showing the separation between workload deployment and telemetry pipeline deployment.
10. The opensearch-stack directory is a standalone logging subsystem. It contains a Fluent Bit DaemonSet, Fluent Bit config, and a log generator, so it should be shown as an independent log-ingestion path that can run alongside the other observability components.
11. Cross-cutting infrastructure includes Docker for packaging the sample services, Helm values for installing observability operators/components, and Kustomize-style manifests for assembling Kubernetes resources. The repo’s structure is therefore “lab modules + runtime manifests,” not a monolithic application codebase.
12. If you draw one overall diagram, the main boundaries are: sample workloads on one side, Kubernetes as the orchestration layer in the middle, and observability backends on the other side. The telemetry streams split into three paths: metrics to Prometheus/Grafana/Alertmanager, logs to Fluent Bit plus a log store/UI, and traces to Jaeger or an OpenTelemetry-backed trace pipeline.
Main entry points: custom_kube_prometheus_stack.yml Prometheus · service-a/index.js Service A · service-b/index.js Service B · kustomization.yml Day 4
Components 22
Lab modules
Tutorial days and standalone stack modules
- Repo · Seven-part observability tutorial organized as self-contained lab days
- Day 1 · First metrics lab introducing the basic observability setup
day-1/readme.md - Day 2 · Cluster monitoring installation and configuration using kube-prometheus-stack style values
day-2/custom_kube_prometheus_stack.yml - Day 3 · Adds PromQL querying and cluster ingress based monitoring configuration
day-3/ingress_kube_prom_stack.yaml - Day 4 · Instrumented Node.js services plus alerting pipeline and Kubernetes manifests
day-4/kubernetes-manifest/kustomization.yml - Day 5 · Fluent Bit based logging stack for collecting and forwarding cluster logs
day-5/fluentbit-values.yaml - Day 6 · Tracing lab centered on Jaeger deployment values
day-6/jaeger-values.yaml - Day 7 · Integrated OpenTelemetry setup for metrics and traces with Go services
day-7/README.md
Sample workloads
Application services used to generate telemetry
- Service A · Day 4 Node.js service exporting custom metrics and traces
day-4/application/service-a/index.js - Service B · Day 4 Node.js service exporting custom metrics and traces
day-4/application/service-b/index.js - Micro A · Day 7 Go microservice instrumented for metrics and traces
day-7/microservice-a/main.go - Micro B · Day 7 Go microservice instrumented for metrics and traces
day-7/microservice-b/main.go
Kubernetes platform
Cluster-level deployment and orchestration boundary
- Kubernetes · Primary hosting boundary for workloads and observability components
Metrics plane
Metrics collection, storage, querying, visualization, and alerts
- Prometheus · Metrics scrape and storage backend
day-2/custom_kube_prometheus_stack.yml - Grafana · Dashboard and visualization layer for metrics
day-2/custom_kube_prometheus_stack.yml - PromQL · Query layer used to analyze Prometheus data
day-3/readme.md - Alertmanager · Routes alert rules to notification channels
day-4/alerts-alertmanager-servicemonitor-manifest/alertmangerconfig.yml - Email config · Email secrets and delivery settings for alerts
day-4/alerts-alertmanager-servicemonitor-manifest/email-secrets.yml
Logs and traces
Logging and tracing backends and pipelines
- OpenSearch stack · Standalone Fluent Bit and log generator stack for log ingestion and storage
opensearch-stack/fluent-bit-daemonset.yaml - Fluent Bit · DaemonSet-based log collection and forwarding agent
day-5/fluentbit-values.yaml - Jaeger · Trace storage and UI layer
day-6/jaeger-values.yaml - OpenTelemetry · Collector and instrumentation pipeline used in the integrated setup
day-7/otel-collector-values.yaml
Connections 42
- Repo → Day 1: contains · Tutorial modules are organized by day
- Repo → Day 2: contains · Tutorial modules are organized by day
- Repo → Day 3: contains · Tutorial modules are organized by day
- Repo → Day 4: contains · Tutorial modules are organized by day
- Repo → Day 5: contains · Tutorial modules are organized by day
- Repo → Day 6: contains · Tutorial modules are organized by day
- Repo → Day 7: contains · Tutorial modules are organized by day
- Day 1 → Prometheus: introduces · Metrics collection and storage
- Day 1 → Grafana: introduces · Metrics visualization
- Day 2 → Prometheus: configures · kube-prometheus-stack style setup
- Day 2 → Grafana: configures · Dashboard stack values
- Day 3 → PromQL: adds · Query layer for Prometheus data
- Day 3 → Kubernetes: deploys to · Ingress and monitoring stack run in cluster
- Day 4 → Service A: contains · Containerized Node.js workload
- Day 4 → Service B: contains · Containerized Node.js workload
- Day 4 → Alertmanager: adds · Alerting pipeline
- Day 4 → Email config: configures · Alert delivery settings
- Service A → Kubernetes: deployed in · Workload manifests place service A in the cluster
- Service B → Kubernetes: deployed in · Workload manifests place service B in the cluster
- Service A → Service B: calls · Service-to-service flow
- Service B → Service A: calls · Service-to-service flow
- Service A → Prometheus: emits metrics · Custom metrics are scraped from the app
- Service B → Prometheus: emits metrics · Custom metrics are scraped from the app
- Prometheus → Alertmanager: sends alerts · Alert rules route firing alerts onward
- Day 5 → Fluent Bit: introduces · Cluster log collection pipeline
- Fluent Bit → OpenSearch stack: forwards logs · Logs are shipped to a log backend
- Day 6 → Jaeger: introduces · Tracing backend and UI
- Service A → Jaeger: exports traces · Instrumented service sends traces
- Service B → Jaeger: exports traces · Instrumented service sends traces
- Day 7 → OpenTelemetry: introduces · Collector and instrumentation pipeline
- Day 7 → Prometheus: configures · Metrics backend values for unified setup
- Day 7 → Jaeger: configures · Trace backend values for unified setup
- Micro A → Kubernetes: deployed in · Go service manifests run in cluster
- Micro B → Kubernetes: deployed in · Go service manifests run in cluster
- Micro A → Micro B: calls · Microservice interaction path
- Micro B → Micro A: calls · Microservice interaction path
- Micro A → OpenTelemetry: exports telemetry · Unified metrics and traces path
- Micro B → OpenTelemetry: exports telemetry · Unified metrics and traces path
- OpenTelemetry → Prometheus: feeds metrics · Collector routes metrics to Prometheus
- OpenTelemetry → Jaeger: feeds traces · Collector routes traces to Jaeger
- OpenSearch stack → Kubernetes: runs on · Standalone logging subsystem can coexist in cluster
- Fluent Bit → Kubernetes: runs on · DaemonSet collects container logs from cluster nodes