Kodelinesoftware engineering
Platform Engineering · CI/CD

Entwicklung einer Observability-Schicht, die CI/CD-Pipelines als auswertbares System behandelt und Job-Ergebnisse über Repositories, Services, Umgebungen, Runs, Runner und Commits hinweg in einer Diagnoseoberfläche zusammenführt.

Referenzen
Technischer Scope

Open-Source Observability-Dashboard für CI/CD-Jobs und Pipeline-Diagnose

Plattformunabhängige Task-Instrumentierung für Build-, Test-, Deploy-, Scan- und Release-Jobs, CI-Metadaten-Normalisierung für GitHub Actions und GitLab CI, OpenTelemetry Collector Gateway, Grafana-Dashboards, optionale JUnit-Testspans, Logs, Traces, Runner-Metriken und commitbasierte Regressionserkennung.

Vorher

Fehlgeschlagene Build-, Test-, Deploy-, Scan- und Release-Jobs lagen verteilt in einzelnen CI-Runs, Logs, Artefakten und providerspezifischen Oberflächen.

Nachher

Eine Grafana-Observability-Oberfläche verbindet Task Results, Loki Logs, Tempo Traces, Prometheus-Metriken, Runner-Ressourcensignale und Commit-Metadaten über Runs und Repositories hinweg.

Systemkontext

Produktionsplattform statt Reporting-Demo.

Das System instrumentiert CI/CD-Tasks mit einem plattformunabhängigen Python Wrapper, ergänzt Execution Telemetry um normalisierte CI-Metadaten und routet Logs, Traces und Metriken über OpenTelemetry Collectors in Grafana, Loki, Tempo und Prometheus. Das Dashboard gibt Teams eine Diagnoseoberfläche für fehlgeschlagene Builds, Tests, Deployments, Scans, Migrationen, Release-Jobs und Custom Automation Tasks.

System-Screens

Screenshots im Projektkontext

Ausgewählte Ansichten erscheinen dort, wo sie Architektur, Workflow oder Reporting konkret belegen.

Engineering Challenge

CI/CD-Fehler erzeugen Evidenz, aber diese Evidenz ist fragmentiert.

Moderne Delivery Pipelines enthalten Builds, Tests, Security Scans, Infrastrukturprüfungen, Deployments, Datenbankmigrationen, Releases und Custom Scripts. Native CI-Oberflächen funktionieren gut für einen einzelnen Run, werden aber schwach, sobald eine Analyse Jobs, Repositories, Services, Umgebungen, Runner, Commits und Zeiträume überspannt.

  • Wiederholte Fehler erfordern manuelle Navigation durch separate CI-Runs und Job-Seiten
  • Logs, Artefakte, Runner-Kontext, Laufzeitdaten und Commit-Historie sind auf Oberflächen verteilt
  • Regressionsdiagnose braucht Task Status, Commit-Metadaten, Logs, Traces und Ressourcensignale in einer Ansicht
  • Cross-Run-Analyse ist besonders teuer in Microservice- und Multi-Repository-Delivery-Umgebungen
  • Die Observability-Schicht musste ohne Rewrite von Application Code, Skripten oder Testframeworks funktionieren
Architektur

CI Runner -> OpenTelemetry Collector Gateway -> Grafana Observability Stack.

Ein Python Command Wrapper läuft im CI-Job und führt den ursprünglichen Build-, Test-, Deploy-, Scan-, Migration- oder Release-Befehl als Subprozess aus. Er erfasst stdout und stderr, erzeugt Task Spans und Status Records, parst optional JUnit XML in Test-Case-Spans und exportiert Telemetrie per OTLP.

  • Sprachunabhängiges Task Wrapping für Befehle wie dotnet test, npm test, pytest, Terraform, Docker und Kubernetes Checks
  • Lokale CI-Erfassung mit remote OpenTelemetry Collector Gateway Routing
  • Logs nach Loki, Traces nach Tempo und Metriken nach Prometheus
  • Traefik-basiertes Gateway Deployment für TLS-Terminierung und Authentifizierung
  • Grafana Dashboard als zentrale Diagnoseoberfläche über Telemetriesignale hinweg
Trace- und Metadatenmodell

Kurzlebige CI-Prozesse brauchen deterministische Korrelation.

CI-Tasks laufen als unabhängige kurzlebige Prozesse, daher kann Trace-Korrelation nicht auf geteilten In-Memory-Zustand setzen. Die Implementierung leitet Trace- und Span-IDs aus CI-Metadaten ab und normalisiert GitHub-Actions- und GitLab-CI-Variablen in einen gemeinsamen Kontext.

  • Deterministische Trace- und Span-IDs aus Run ID, Run Attempt, Job Name, Runner Identity und Task Name
  • Normalisierter CI-Kontext für Provider, Repository, Pipeline, Job, Namespace, Service, Task, Branch, Commit, Runner, Run URL und Commit URL
  • Providerunabhängige Dashboard-Filter für Namespace, Service Name, Job Target und Task Target
  • Commit-aware Task Rows verbinden Ergebnis, Branch, SHA, Logs, Trace, Runner und CI Links
  • Optionale Test-Case-Spans aus JUnit-XML-Reports
Diagnoseworkflow

Task Status, Logs, Traces, Metriken und Commits in einer CI/CD-Ansicht

Das System macht Build-, Test-, Deploy-, Scan-, Migration- und Release-Jobs zu beobachtbaren Tasks, die über Provider, Repositories, Runs und Commits hinweg auswertbar sind.

Grafana CI/CD Dashboard

Das Dashboard bietet kaskadierende Selektoren für Namespace, Service Name, Job Target, Task Target und Zeitraum. Es kann von einer gesamten Delivery-Landschaft bis zu einem einzelnen Task eingrenzen und hält die wichtigsten Diagnosepanels sichtbar.

  • Task-Results-Tabelle mit Status, Duration, Commit SHA, Branch, Runner und CI Links
  • Task Pass/Fail Aggregation und einzelne Test-Case Results
  • Task Duration over Time für Trend- und Regressionsdiagnose
  • Host-CPU- und Memory-Panels gruppiert nach Runner
  • Direkte Navigation von fehlgeschlagenen Task Rows zu Loki Logs und Tempo Traces

Logs, Traces und Test Spans

Fehlgeschlagene Tasks können über raw Loki Logs und Tempo Traces untersucht werden, ohne den Diagnoseworkflow zu verlassen. Wenn JUnit XML verfügbar ist, enthält der Trace Test-Case-Spans, sodass fehlgeschlagene Testevidenz mit dem Parent Task korreliert ist.

  • stdout- und stderr-Export nach Loki
  • Task-Level-Spans mit Status, Duration, Labels und CI-Metadaten
  • Per-Test-Case-Spans aus JUnit-XML-Reports
  • Trace Waterfall für fehlgeschlagene Task-Ausführung
  • Schnelle Übergabe von aggregierter Dashboard Row zu roher Execution Evidence

Evaluation und Overhead

Der Prototyp wurde mit Microsoft eShop auf GitHub Actions und Google Online Boutique auf GitLab CI evaluiert, um providerübergreifende und servicebasierte Workflows zu prüfen.

  • Aggregation von Task-Level-Fehlern über aktuelle Zeiträume
  • Navigation von fehlgeschlagenem Task zu Raw Logs und Execution Trace
  • Commit-aware Tracing von Task-Level-Regressionen
  • Keystroke-Level-Model-Vergleich gegen native CI-Navigation
  • Gemessener Instrumentierungs-Overhead von ungefähr 12 bis 17 Sekunden pro Run
Engineering

Technischer Beitrag

  • Plattformunabhängiger Python Command Wrapper für CI-Task-Instrumentierung
  • OpenTelemetry Log-, Trace- und Metric-Export aus Pipeline Tasks
  • Optionale JUnit-XML-Auswertung für Per-Test-Case-Spans
  • Deterministische Trace- und Span-ID-Ableitung für kurzlebige CI-Prozesse
  • CI-Metadaten-Normalisierung über GitHub Actions und GitLab CI
  • Lokale OpenTelemetry-Collector-Agent-Konfiguration für CI Runner
  • Remote OpenTelemetry Collector Gateway für Telemetry Routing
  • Loki-, Tempo-, Prometheus- und Grafana-Backend-Deployment
  • Grafana Dashboard mit Namespace-, Service-, Job-, Task- und Time-Filtern
  • Direktlinks von Task-Result-Rows zu raw Loki Logs und Tempo Traces
  • Commit-aware Job- und Task-Sicht über Repositories, Services, Umgebungen und Runs hinweg
  • Evaluation von Interaction Effort und Runtime Overhead
Impact:

Business Impact

Das System macht aus CI/CD keine Sammlung isolierter Pipeline-Seiten, sondern eine auswertbare Diagnoseoberfläche. Der Business Value liegt in schnellerer Fehleranalyse, klarerer Regressionsverantwortung und weniger manueller Navigation durch CI-Runs, Logs, Artefakte und providerspezifische Screens.

  • Schnellere Untersuchung wiederholter Fehler über Build-, Test-, Deploy-, Scan-, Migration- und Release-Jobs hinweg
  • Klarere Sicht darauf, welcher Commit eine Regression eingeführt hat
  • Weniger manuelle Navigation durch CI-Runs, Logs und Artefakte
  • Bessere Evidenz zur Trennung von Code-Fehlern, flaky Tests, Deployment-Problemen, Runner-Druck oder externen Abhängigkeiten
  • Open-Source-Observability-Stack statt vendor-locked CI Analytics
  • Wiederverwendbare Architektur für GitHub Actions, GitLab CI und zukünftige CI Provider
  • Stärkere Release-Sicherheit für Projekte mit nicht-trivialen CI/CD-Workflows
Screenshot-Galerie

Weitere Systemansichten

Die Galerie sammelt weitere anonymisierte Screenshots, ohne die technische Fallstudie in einen Bilder-Slider zu verstecken.