CPRA ist ein Hochleistungs-Infrastrukturüberwachungssystem, das für Plattformteams entwickelt wurde, die groß angelegte Microservice-Architekturen verwalten. Basierend auf Entity-Component-System (ECS)-Architektur und Warteschlangentheorie-Prinzipien bewältigt CPRA über 1.000.000 gleichzeitige Health Checks mit automatischer Worker-Pool-Skalierung, um SLO-Ziele zu erreichen.
Überwachen Sie Millionen von Diensten gleichzeitig mit automatisierter Behebung und dynamischer Worker-Skalierung.
CPRA ist ein leistungsstarkes Infrastruktur-Überwachungssystem für Plattform-Teams, die große Microservice-Architekturen verwalten. Basierend auf einer Entity-Component-System (ECS)-Architektur und Prinzipien der Warteschlangentheorie bewältigt CPRA über 1.000.000 gleichzeitige Health Checks bei automatischer Worker-Pool-Skalierung, um SLO-Ziele zu erreichen.
Verwenden Sie CPRA, wenn Sie:
| Metrik | Wert |
|---|---|
| Max. gleichzeitige Monitore | 1.000.000+ |
| Durchsatz | 10.000+ Checks/s/Pipeline |
| Latenz (P95) | < 100 ms (über SLO konfigurierbar) |
| Speicher pro Monitor | ~100 Bytes |
| Gesamtspeicher (1 M Monitore) | ~100 MB + Worker-Pool-Overhead |
| Worker-Skalierung | Dynamisch (M/M/c-basiert) |
Siehe Architekturübersicht für detaillierte Benchmarks und Analysen.
CPRA verwendet eine Drei-Pipeline-Architektur basierend auf Entity-Component-System-Prinzipien:


Jede Pipeline arbeitet unabhängig mit eigener Warteschlange und dynamisch skaliertem Worker-Pool, was Folgendes ermöglicht:

Warteschlangen-Implementierungen:
Dynamische Worker-Pools:
Eine umfassende Architekturerklärung finden Sie in der Architekturübersicht.
# Voraussetzungen: Go 1.25 oder höher
go version # Sollte go1.25 oder höher anzeigen
# Aus dem Quellcode bauen
git clone https://github.com/ziad/cpra.git
cd cpra
go build .
# Mit Beispielkonfiguration ausführen
./cpra --yaml mock-servers/test_10k.yaml
Erwartete Ausgabe:
Starting CPRA Optimized Controller for 1M Monitors
Profiling server listening at http://localhost:6060/debug/pprof/
Loading monitors from mock-servers/test_10k.yaml...
Monitor loading completed in 1.2s
[INFO] Controller started successfully
[INFO] Pulse pipeline processing 10,000 monitors
[INFO] Worker pool scaled to 143 workers (target SLO: 100ms)
Repository klonen:
git clone https://github.com/ziad/cpra.git
cd cpra
Abhängigkeiten herunterladen:
go mod download
Anwendung bauen:
go build .
Installation überprüfen:
./cpra --help
Docker-Image bauen:
docker build -f docker/Dockerfile -t cpra:latest .
Container ausführen:
docker run -it --rm \
-v $(pwd)/my-monitors.yaml:/app/monitors.yaml \
cpra:latest \
./cpra --yaml monitors.yaml
Erstellen Sie eine monitors.yaml-Datei zur Definition von Health Checks:
monitors:
- name: "my-service-health-check"
pulse_check:
type: http
interval: 30s
timeout: 5s
max_failures: 3
config:
method: GET
url: http://my-service.example.com/health
retries: 2
intervention:
action: docker
config:
container: my-service-container
action: restart
codes:
red:
dispatch: true
notify: pagerduty
config:
url: https://events.pagerduty.com/v2/enqueue
yellow:
dispatch: true
notify: log
config:
file: /var/log/cpra-alerts.log
Testkonfigurationen generieren:
Verwenden Sie mock-servers/generate_monitors.py, um Testkonfigurationen mit beliebig vielen Monitoren zu generieren.
Konfigurieren Sie das CPRA-Verhalten programmatisch:
package main
import (
"cpra/internal/controller"
)
func main() {
config := controller.DefaultConfig()
// Debug-Modus
config.Debug = true
// Worker-Pool-Einstellungen (gilt für alle drei Pipelines)
config.WorkerConfig.MinWorkers = 10
config.WorkerConfig.MaxWorkers = 500
// Warteschlangen-Einstellungen
config.QueueCapacity = 131072 // Muss eine Zweierpotenz sein
// Leistungs-Tuning
config.BatchSize = 2000
config.SizingServiceTime = 20 * time.Millisecond // Durchschnittliche Job-Dauer
config.SizingSLO = 100 * time.Millisecond // Ziellatenz
config.SizingHeadroomPct = 0.15 // 15% Sicherheitspuffer
ctrl := controller.NewController(config)
// ... Rest der Initialisierung
}
Die vollständigen Konfigurationsoptionen finden Sie in der API-Referenz.
./cpra [OPTIONEN]
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
--yaml | string | internal/loader/replicated_test.yaml | Pfad zur Monitor-YAML-Datei |
--config | string | - | Pfad zur Konfigurationsdatei (optional) |
--debug | bool | false | Debug-Level-Logging aktivieren |
--pprof | bool | true | Pprof-Profiling-Server aktivieren |
--pprof.addr | string | localhost:6060 | Pprof-Server-Listenadresse |
Beispiele:
# Mit Debug-Logging ausführen
./cpra --yaml monitors.yaml --debug
# Mit benutzerdefiniertem pprof-Port ausführen
./cpra --yaml monitors.yaml --pprof.addr localhost:8080
# Profiling deaktivieren
./cpra --yaml monitors.yaml --pprof=false
Problem: YAML-Datei nicht gefunden
Warning: YAML file monitors.yaml not found, starting without loading monitors
Lösung: Überprüfen Sie den Dateipfad. Verwenden Sie absolute Pfade oder Pfade relativ zum Ausführungsort der Binärdatei:
./cpra --yaml $(pwd)/monitors.yaml
Problem: Build fehlgeschlagen mit Go-Versionsfehler
go.mod requires go >= 1.25
Lösung: Aktualisieren Sie Go auf Version 1.25 oder höher:
go version # Aktuelle Version prüfen
# Go 1.25+ von https://go.dev/dl/ herunterladen
Problem: Hohe Speichernutzung
Lösung: Überprüfen Sie die Speichernutzung mit pprof:
# Während CPRA läuft, auf pprof zugreifen
go tool pprof http://localhost:6060/debug/pprof/heap
# Top-Speicherverbraucher anzeigen
(pprof) top
Speichergrenzen in der Konfiguration anpassen:
config.WorkerConfig.MaxWorkers = 200 // Maximale Worker reduzieren
config.QueueCapacity = 65536 // Warteschlangengröße reduzieren
Problem: Worker-Pool skaliert nicht
Lösung: Aktivieren Sie Debug-Logging, um Skalierungsentscheidungen zu sehen:
./cpra --yaml monitors.yaml --debug
Warteschlangentheorie-Parameter überprüfen:
config.SizingServiceTime = 50 * time.Millisecond // Erhöhen, wenn Jobs länger dauern
config.SizingSLO = 200 * time.Millisecond // SLO lockern, falls nötig
Problem: Monitore werden nicht ausgeführt
Lösung: Überprüfen Sie das Format der Monitor-Konfiguration und die Logs:
./cpra --yaml monitors.yaml --debug 2>&1 | grep ERROR
YAML-Syntax validieren:
# YAML-Validator verwenden
python -m yaml monitors.yaml
--debug-Flag)Wir begrüßen Beiträge aus der Community! CPRA ist ein Open-Source-Projekt und wir schätzen:
Erste Schritte:
good first issueEntwicklungsressourcen:
Dieses Projekt ist unter der MIT-Lizenz lizenziert – siehe LICENSE-Datei für Details.
CPRA basiert auf hervorragenden Open-Source-Bibliotheken:
Dokumentation • Architektur • Issues
Mit ❤️ gebaut für Plattform-Teams, die große Infrastruktur verwalten