| Version | Datum | Autor | Beschreibung |
|---|---|---|---|
| 1.0 | 2026-02-10 | Marcus Pauli | Erstversion: HEC, S2S, Persistent Queue, Failover |
Im IceDataEmphasise-PoC werden zwei Ziel-Typen (Destinations) konfiguriert, um Daten von Cribl Stream an die Splunk-Infrastruktur der Bank zu liefern:
Beide Ziele verfuegen ueber Persistent Queues (PQ) als Puffer bei voruebergehender Nichterreichbarkeit des Splunk-Indexers, was den regulatorischen Anforderungen an Datenverlustfreiheit (MaRisk AT 7.2) entspricht.
configs/stream/destinations/ im Projekt-Repository. Sensible Werte (Tokens, Hostnamen)
werden ueber Umgebungsvariablen aus der .env-Datei injiziert.
Die HEC-Destination ist in configs/stream/destinations/splunk-hec.json definiert:
{
"id": "splunk_hec",
"type": "splunk_hec",
"url": "http://${SPLUNK_HOST}:${SPLUNK_HEC_PORT}/services/collector",
"token": "${SPLUNK_HEC_TOKEN}",
"nestedFields": "none",
"concurrency": 5,
"maxPayloadSizeKB": 4096,
"compress": true,
"rejectUnauthorized": false,
"onBackpressure": "block",
"description": "Splunk HEC - HTTP Event Collector"
}
https:// verwendet obwohl Splunk HEC nur HTTP akzeptiert, erscheint der Fehler:
ssl3_get_record:wrong version number. Pruefen Sie vor der Konfiguration:
# HTTP testen
curl -s "http://${SPLUNK_HOST}:8088/services/collector/health"
# HTTPS testen
curl -sk "https://${SPLUNK_HOST}:8088/services/collector/health"
| Parameter | Wert | Beschreibung |
|---|---|---|
id | splunk_hec | Eindeutiger Bezeichner der Destination |
type | splunk_hec | Destination-Typ: HTTP Event Collector |
host | ${SPLUNK_HOST} | Hostname/IP des Splunk-Indexers (aus .env) |
port | 8088 | Standard-HEC-Port |
token | ${SPLUNK_HEC_TOKEN} | HEC-Authentifizierungstoken (aus .env) |
tls.disabled | false | TLS ist aktiviert (Pflicht im Bankumfeld) |
compress | true | gzip-Kompression fuer geringere Bandbreite |
pqEnabled | true | Persistent Queue aktiviert |
pqMaxSize | 1GB | Maximale Groesse der Warteschlange |
pqMaxFiles | 100 | Maximale Anzahl PQ-Dateien |
Das HEC-Token wird niemals im Klartext in der Konfiguration oder im Git-Repository gespeichert. Die Verwaltung erfolgt ueber folgendes Konzept:
.env-Datei auf dem Cribl-Server hinterlegt:
SPLUNK_HEC_TOKEN=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
.env-Datei ist in .gitignore eingetragen und wird nicht versioniert.${SPLUNK_HEC_TOKEN}..env-Datei aktualisiert werden.
Eine Rotation sollte mindestens quartalsweise erfolgen (vgl. BAIT II.4).
TLS ist fuer die HEC-Verbindung aktiviert ("tls": { "disabled": false }). Die Konfiguration
nutzt die Standard-TLS-Einstellungen von Cribl Stream:
$CRIBL_HOME/certs/ hinterlegenFuer die erweiterte TLS-Konfiguration (Client-Zertifikate, Cipher Suites) siehe Kapitel 10 - Sicherheitshandbuch.
Die gzip-Kompression ("compress": true) reduziert das uebertragene Datenvolumen typischerweise
um 70-85%. Dies ist besonders relevant, wenn die Daten ueber ein WAN oder VPN-Tunnel (Tailscale) uebertragen werden.
| Aspekt | Ohne Kompression | Mit gzip-Kompression |
|---|---|---|
| Typische Reduktion | 0% | 70-85% |
| CPU-Overhead (Sender) | Keiner | Gering (ca. 2-5% CPU) |
| Empfehlung | Nur lokales Netzwerk | Standard fuer alle Umgebungen |
Die S2S-Destination ist in configs/stream/destinations/splunk-s2s.json definiert:
{
"id": "splunk_s2s",
"type": "splunk",
"host": "${SPLUNK_HOST}",
"port": ${SPLUNK_S2S_PORT},
"nestedFields": "none",
"onBackpressure": "block",
"description": "Splunk S2S - Natives Splunk-Protokoll"
}
"splunk"
(nicht "splunk_s2s"). Bei PATCH-Aufrufen muss das type-Feld immer mitgesendet werden.
| Parameter | Wert | Beschreibung |
|---|---|---|
id | splunk_s2s | Eindeutiger Bezeichner der Destination |
type | splunk_s2s | Destination-Typ: Splunk-to-Splunk (natives Protokoll) |
host | ${SPLUNK_HOST} | Hostname/IP des Splunk-Indexers (aus .env) |
port | 9997 | Standard-S2S-Receiving-Port |
tls.disabled | true | TLS deaktiviert (PoC-Phase, Netzwerk via Tailscale abgesichert) |
nestedFields | none | Keine verschachtelten Felder (Splunk-Kompatibilitaet) |
pqEnabled | true | Persistent Queue aktiviert |
pqMaxSize | 1GB | Maximale Groesse der Warteschlange |
pqMaxFiles | 100 | Maximale Anzahl PQ-Dateien |
Das S2S-Protokoll (auch als "Splunk Forwarder Protocol" bekannt) ist das native, binaere Uebertragungsprotokoll zwischen Splunk-Komponenten. Vorteile:
Der Parameter "nestedFields": "none" stellt sicher, dass Cribl keine verschachtelten
JSON-Felder in das S2S-Paket einbettet, was zu Parsing-Problemen in Splunk fuehren koennte.
Die Persistent Queue (PQ) ist ein festplattenbasierter Puffer, der zwischen der Cribl-Verarbeitungs-Engine und der Destination liegt. Wenn die Destination nicht erreichbar ist (Netzwerkausfall, Splunk-Wartung, Ueberlast), werden Events in der PQ zwischengespeichert und bei Wiederherstellung der Verbindung automatisch nachgeliefert.
Funktionsweise:
Beide Destinations sind mit einer PQ von maximal 1 GB konfiguriert. Die folgende Tabelle zeigt die Berechnung der Pufferkapazitaet:
| Parameter | HEC-Destination | S2S-Destination |
|---|---|---|
| PQ-Groesse | 1 GB | 1 GB |
| Max. PQ-Dateien | 100 | 100 |
| Durchschnittliche Event-Groesse | ~500 Bytes | ~500 Bytes |
| Geschaetzte Kapazitaet | ~2 Mio. Events | ~2 Mio. Events |
| Gesamt-Ingest (PoC) | ~50 GB/Tag | ~30 GB/Tag |
| Pufferzeit bei Totalausfall | ~30 Minuten | ~48 Minuten |
Wenn die PQ voll ist, tritt der Backpressure-Mechanismus in Kraft. Cribl Stream reagiert wie folgt:
| Zustand | Verhalten | Auswirkung |
|---|---|---|
| PQ < 80% | Normalbetrieb | Events werden gepuffert und zugestellt |
| PQ 80-95% | Warnung im Cribl-UI und in Metriken | Alarm sollte ausgeloest werden |
| PQ 95-100% | Backpressure an Quellen propagiert | Quellen verlangsamen den Empfang |
| PQ = 100% | Events werden verworfen (Drop) | Datenverlust – Eskalation erforderlich |
Im Falle eines Backpressure-Events wird empfohlen:
pqMaxSize erhoehen (erfordert Neustart)| Kriterium | HEC (HTTP Event Collector) | S2S (Splunk-to-Splunk) |
|---|---|---|
| Protokoll | HTTPS (REST API) | Proprietaeres TCP-Binaerprotokoll |
| Standard-Port | 8088 | 9997 |
| Authentifizierung | Token-basiert | Zertifikat- oder IP-basiert |
| Verschluesselung | TLS (nativ) | TLS (optional, empfohlen) |
| Kompression | gzip (in Cribl konfigurierbar) | Protokoll-interne Kompression |
| Firewall-Freundlichkeit | Hoch (HTTPS-Standard) | Mittel (proprietaerer Port) |
| Load Balancing | Via HTTP-Loadbalancer moeglich | Nativ via Indexer Discovery |
| Overhead | Hoeher (HTTP-Header, JSON-Encoding) | Geringer (binaer, optimiert) |
| Eignung | Web-Daten, IoT, externe Quellen | Interne Infrastruktur, Security-Daten |
| Index-Steuerung | Via Token oder Event-Metadaten | Via Metadaten im Paket |
| Einsatz im PoC | Apache, Docker, Default-Route | SSH/Auth, Systemd Journal, Samba |
Die Failover-Strategie im IceDataEmphasise-PoC basiert auf mehreren Schichten:
Beide Destinations verwenden PQ als erste Verteidigungslinie gegen kurzzeitige Ausfaelle. Events werden lokal gepuffert und bei Wiederherstellung automatisch nachgeliefert.
Cribl Stream versucht automatisch, fehlgeschlagene Zustellungen erneut durchzufuehren:
| Parameter | Wert | Beschreibung |
|---|---|---|
| Retry-Intervall | 5 Sekunden (initial) | Exponentielles Backoff bis max. 300s |
| Max. Retries | Unbegrenzt (solange PQ-Kapazitaet) | Retries stoppen erst bei PQ-Ueberlauf |
| Connection Timeout | 30 Sekunden | Zeitlimit fuer den Verbindungsaufbau |
Bei PQ-Fuellstand ueber 80% wird ein Alert ausgeloest (Konfiguration im Monitoring, siehe Kapitel 09 - Betriebshandbuch). Der Alert informiert das Betriebsteam per E-Mail und/oder Splunk-Alert.
Wenn die automatischen Mechanismen nicht ausreichen (PQ > 95%), erfolgt eine manuelle Eskalation gemaess der Kontaktliste im Betriebshandbuch. Massnahmen:
Nach der Konfiguration der Destinations muessen folgende Pruefungen durchgefuehrt werden:
# Manueller HEC-Test vom Cribl-Server
curl -k https://${SPLUNK_HOST}:8088/services/collector/event \
-H "Authorization: Splunk ${SPLUNK_HEC_TOKEN}" \
-d '{"event":"HEC test from Cribl","sourcetype":"cribl:test","index":"main"}'
# Erwartete Antwort:
# {"text":"Success","code":0}
# Port-Erreichbarkeit pruefen
nc -zv ${SPLUNK_HOST} 9997
# In Cribl Stream UI:
# Settings → Destinations → splunk_s2s → Test Connection
# Cribl Stream API: PQ-Status abfragen
curl -s http://localhost:9000/api/v1/system/metrics \
| jq '.pq'
# Oder im Cribl UI:
# Monitoring → Destinations → PQ-Status