Dieses Repository dient als öffentliches Code-Repository für meine Bachelorarbeit: "Vergleich von Open-Source Observability Stacks in Kubernetes".
Die Repository-Struktur umfasst Helm Charts und Konfigurationsdateien zur Installation und zum Testen von drei verschiedenen Observability-Stacks sowie eine vorkonfigurierte OpenTelemetry Demo-Instanz für jeden Stack.
.
├── bootstrap/ # TalosOS Cluster Bootstrap mit Cilium CNI
├── monitoring/ # kube-prometheus-stack für Meta-Monitoring
├── lgtm-stack/ # LGTM Stack (Loki, Grafana, Tempo, Prometheus)
├── opensearch-stack/ # OpenSearch Stack mit Jaeger und Prometheus
├── victoriametrics-stack/ # VictoriaMetrics Stack (VM, VictoriaLogs, VictoriaTraces)
├── otel-demo/ # OpenTelemetry Demo Anwendung (Astronomy Shop)
├── k6/ # K6 Load Testing Skripte für Query-Benchmarks
├── storage/ # Longhorn Storage Class Konfiguration
└── results/ # Test-Ergebnisse und Benchmark-Daten
Die folgenden drei Open-Source Observability Stacks werden verglichen:
-
LGTM Stack (Grafana Stack)
- Loki (Logs)
- Grafana (Visualisierung)
- Tempo (Traces)
- Prometheus (Metriken)
-
OpenSearch Stack
- OpenSearch (Logs, Traces Storage)
- Jaeger (Distributed Tracing)
- Prometheus (Metriken)
- Grafana (Visualisierung)
-
VictoriaMetrics Stack
- VictoriaMetrics (Metriken)
- VictoriaLogs (Logs)
- VictoriaTraces (Traces)
- Grafana (Visualisierung)
Folgende Tools werden für die Installation benötigt:
- kubectl - Kubernetes CLI
- helm (Version 3+) - Kubernetes Package Manager
- talosctl - TalosOS CLI (für Cluster Bootstrap)
Optional:
- cilium CLI - Für CNI Installation und Troubleshooting
- k6 - Für Query Performance Benchmarks
Zuerst muss ein High-Availability Kubernetes Cluster mit TalosOS und Cilium CNI erstellt werden.
cd bootstrap/Detaillierte Anleitung: bootstrap/README.md
Zusammenfassung:
- 3 Control-Plane Nodes mit TalosOS
- Cilium als CNI (ersetzt Talos-Standard CNI und kube-proxy)
- Kubernetes Version 1.33.5
Der kube-prometheus-stack überwacht alle Observability-Stacks während der Tests und läuft kontinuierlich im Hintergrund.
cd monitoring/
# Namespace erstellen
kubectl create namespace monitoring
# Stack installieren
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install kube-prom prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--values values.yaml \
--waitDetaillierte Anleitung: monitoring/README.md
Komponenten:
- Prometheus (7 Tage Retention)
- Grafana (Login: admin / prom-operator)
- Node Exporter (DaemonSet)
- kube-state-metrics
Zugriff auf Grafana:
kubectl port-forward -n monitoring svc/kube-prom-grafana 3000:80
# http://localhost:3000Wähle einen der drei Stacks zur Installation aus:
cd lgtm-stack/
# Namespace erstellen
kubectl create namespace observability-lgtm
# Helm Repos hinzufügen
helm repo add grafana https://grafana.github.io/helm-charts
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
# Komponenten installieren
helm install loki grafana/loki --namespace observability-lgtm --values loki-values.yaml --wait
helm install tempo grafana/tempo --namespace observability-lgtm --values tempo-values.yaml --wait
helm install prometheus prometheus-community/prometheus --namespace observability-lgtm --values prometheus-values.yaml --wait
helm install grafana grafana/grafana --namespace observability-lgtm --values grafana-values.yaml --waitDetaillierte Anleitung: lgtm-stack/README.md
cd opensearch-stack/
# Namespace erstellen
kubectl create namespace observability-opensearch
# OpenSearch Cluster und Komponenten installieren
# (siehe detaillierte Anleitung im Unterordner)Detaillierte Anleitung: opensearch-stack/README.md
cd victoriametrics-stack/
# Namespace erstellen
kubectl create namespace observability-vm
# VictoriaMetrics Komponenten installieren
# (siehe Konfigurationsdateien im Unterordner)Konfigurationsdateien verfügbar im Unterordner.
Nach der Installation eines Observability-Stacks wird die OpenTelemetry Demo (Astronomy Shop) installiert.
cd otel-demo/
# Helm Repo hinzufügen
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm repo update
# Demo installieren (Beispiel für LGTM Stack)
kubectl create namespace otel-demo-lgtm
helm install otel-demo open-telemetry/opentelemetry-demo \
--namespace otel-demo-lgtm \
--values values-lgtm.yaml \
--wait --timeout 10mVerfügbare Values-Dateien:
values-lgtm.yaml- Für LGTM Stackvalues-opensearch.yaml- Für OpenSearch Stackvalues-victoriametrics.yaml- Für VictoriaMetrics Stack
Detaillierte Anleitung: otel-demo/README.md
Zugriff auf Demo-Anwendung:
kubectl port-forward -n otel-demo-lgtm svc/frontend-proxy 8080:8080
# http://localhost:8080Die Tests bestehen aus 3 Phasen mit unterschiedlichen Lastprofilen:
| Phase | Dauer | Benutzer | Zweck |
|---|---|---|---|
| Baseline | 30 Min | 0 | Ressourcenverbrauch im Leerlauf |
| Moderate Last | 60 Min | 50 | Normale Produktionslast |
| Spitzenlast | 30 Min | 200 | Extremlast-Verhalten |
Gesamtdauer pro Stack: 120 Minuten (2 Stunden)
Die Last wird durch Anpassung der LOCUST_USERS Umgebungsvariable im Load Generator gesteuert.
Beispiel:
# Phase 1: Baseline (0 User)
kubectl set env deployment/otel-demo-loadgenerator -n otel-demo-lgtm LOCUST_USERS=0
# Phase 2: Moderate Last (50 User)
kubectl set env deployment/otel-demo-loadgenerator -n otel-demo-lgtm LOCUST_USERS=50
# Phase 3: Spitzenlast (200 User)
kubectl set env deployment/otel-demo-loadgenerator -n otel-demo-lgtm LOCUST_USERS=200Detaillierte Test-Anleitung: otel-demo/README.md
Zusätzlich zu den Ressourcen-Tests wurden Query-Performance-Benchmarks mit k6 durchgeführt.
cd k6/
# Beispiel: Query Benchmark für Loki
kubectl apply -f k6-query-job.yamlVerfügbare Benchmarks:
k6-query-job.yaml- Loki Query Performancek6-query-opensearch-job.yaml- OpenSearch Query Performancek6-query-victoriametrics-job.yaml- VictoriaLogs Query Performance
Im Ordner results/ befinden sich die Ergebnisse meiner Testläufe, unterteilt nach Stack und Testphase:
results/
├── lgtm/
│ ├── baseline/
│ ├── normal-load/
│ └── max-load/
├── opensearch/
│ ├── baseline/
│ ├── normal-load/
│ └── max-load/
└── victoriametrics/
├── baseline/
├── normal-load/
└── max-load/
Die Ergebnisse enthalten CSV-Exporte aus Grafana mit folgenden Metriken:
- CPU-Verbrauch (Cores)
- RAM-Verbrauch (GiB)
- Netzwerk-Traffic (Rx/Tx in MB/s)
- Disk I/O (Read/Write in MB/s)
- k6 Performance-Test-Ergebnisse (JSON)
Zusätzlich sind Kompressions-Analyse-Ergebnisse für Log-Speicherung enthalten.
Nach Abschluss der Tests sollten die Ressourcen aufgeräumt werden:
# Demo deinstallieren
helm uninstall otel-demo -n otel-demo-lgtm
kubectl delete namespace otel-demo-lgtm
# Observability Stack deinstallieren (Beispiel LGTM)
helm uninstall loki -n observability-lgtm
helm uninstall tempo -n observability-lgtm
helm uninstall prometheus -n observability-lgtm
helm uninstall grafana -n observability-lgtm
kubectl delete namespace observability-lgtm
# Meta-Monitoring Stack deinstallieren
helm uninstall kube-prom -n monitoring
kubectl delete namespace monitoringWichtig: Zwischen Tests 30 Minuten warten, damit alle Ressourcen vollständig freigegeben werden.
Detaillierte Anleitungen und Konfigurationen befinden sich in den jeweiligen Unterordner-READMEs:
- bootstrap/README.md - TalosOS Cluster Setup
- monitoring/README.md - kube-prometheus-stack
- lgtm-stack/README.md - LGTM Stack Installation
- opensearch-stack/README.md - OpenSearch Stack Installation
- otel-demo/README.md - OpenTelemetry Demo Test-Durchführung
- k6/README.md - Query Performance Benchmarks
Alle verwendeten Komponenten sind Open Source. Die spezifischen Lizenzen der einzelnen Projekte sind zu beachten:
- TalosOS: Mozilla Public License 2.0
- Cilium: Apache License 2.0
- Grafana Stack (Loki, Tempo, Grafana): AGPLv3
- Prometheus: Apache License 2.0
- OpenSearch: Apache License 2.0
- Jaeger: Apache License 2.0
- VictoriaMetrics: Apache License 2.0
- OpenTelemetry Demo: Apache License 2.0