plantpulse-cep (Complex Event Processing)
Rolle
Dies ist die Complex Event Processing Schicht. Sie erkennt zeitliche und logische Muster mehrerer Ereignisse in Echtzeit, um Alarme, Flow-Trigger und Automatisierungen auszulösen. Regeln werden in EQL(PlantPulse CEP SQL) geschrieben.
| Punkt | Wert |
|---|---|
| Modulname | plantpulse-cep |
| Installationspfad | /opt/kopens/plantpulse-platform/plantpulse-cep/ |
| Port | 7400 (HTTP) · 7401 (TLS) |
| Ausführungsengine | Eine beim Booten — Aster CEP(cep.backend=aster, identisch auch ohne Konfiguration) |
pd Dienst | cep — Nur MASTER |
| API-Authentifizierung | X-API-Key: <PP_CEP_API_KEY> |
| Konsolen-Login | PP_CEP_WEB_USER / PP_CEP_WEB_PASSWORD — Wenn leer, wird nur die Konsole geschlossen |
Diese Seite behandelt Module und Dateien. Informationen zur Syntax und Ausführung finden Sie im CEP-Abschnitt.
Anwendungsbeispiel
"Wenn ein Alarm ausgelöst wurde, aber innerhalb von 30 Minuten keine Aufhebung erfolgt, wird dies als nicht aufgehoben gemeldet"
SELECT a.machineId AS machine
FROM pattern [every a=AlarmEvent -> not ClearEvent for 30 min]
Konfiguration
API, Konsole und Engine befinden sich im selben Prozess. Es läuft nur die eine Engine, die beim Booten ausgewählt wurde.
Verzeichnisstruktur
plantpulse-cep/
├── config/plantpulse-cep.properties # 생성물 ← plantpulse-datalake-cli 의 템플릿
├── bin/start.sh
├── logs/
└── server/ # 내장 Tomcat — webapps/ROOT.war · logs/catalina.<date>.log
Hauptkonfiguration
# 백엔드 — 부팅 시 하나. 미설정이면 이전 것을 그대로 유지한다
cep.backend=aster
#cep.mode=native # native | portable
# 이벤트 입력 (Valkey 스트림)
cache.host=${PP_REDIS_HOST}
cache.port=${PP_REDIS_PORT}
cache.password=${PP_REDIS_PASSWORD}
cache.ssl.enabled=false
cep.stream.shard_count=16
cep.consumer.thread_count=16
# 룰 · 이벤트 타입 레지스트리 (PostgreSQL datalake DB — CEP 가 표를 스스로 만든다)
jdbc.datalake.url=jdbc:postgresql://${PP_POSTGRES_HOST}:${PP_POSTGRES_PORT}/datalake
jdbc.datalake.username=${PP_DATALAKE_DB_USER}
jdbc.datalake.password=${PP_DATALAKE_DB_PASSWORD}
# 운영 지표 (Cassandra)
storage.host=${PP_CASSANDRA_HOST}
storage.keyspace=${PP_KEYSPACE}
cep.storage.ttl_seconds=864000 # 10일
# 인증
cep.api.key=${PP_CEP_API_KEY}
cep.web.user=${PP_CEP_WEB_USER}
cep.web.password=${PP_CEP_WEB_PASSWORD}
cep.api.max_eql_text_length=100000
cep.flink.* ist nur beim Booten mit Flink relevantIn derselben Datei bleiben cep.flink.reconciler.enabled und cep.flink.router.enabled vorhanden. Wenn mit einem anderen Backend gebootet wird, werden diese ignoriert und der Name einmal im Log ausgegeben.
Es gab Fälle, in denen bei aktiviertem Schalter mit einem anderen Backend gestartet wurde und dasselbe Statement in zwei Engines lief, wodurch Ergebnisse doppelt veröffentlicht wurden → Backend
Das Verfahren zur Änderung von Werten finden Sie unter Konfigurationsänderung, die Rotation von API-Keys unter Passwörter und API-Keys ändern.
Haupt-APIs
| Pfad | Funktion |
|---|---|
POST /api/v1/eql/deploy | Statement-Registrierung |
POST /api/v1/eql/validate | Nur Entscheidung — SUPPORTED / UNSUPPORTED / UNPARSEABLE |
DELETE /api/v1/eql/undeploy/{id} | De-Registrierung |
GET /api/v1/eql/registration | Registrierungstabelle (ACTIVE / REJECTED) |
GET /api/v1/eql/portability | Portabilität |
GET /api/v1/eql/metrics/snapshot · /metrics/engine | Match-Rate und Output-Rate pro Statement, Engine-Kennzahlen |
GET·POST·PUT·DELETE /api/v1/event-types | Ereignistyp-Registrierung |
GET·POST·DELETE /api/v1/keys | API-Key |
GET /api/health | Anonymer Readiness-Check — Engine · Cache · Schema |
Betriebsbefehle
docker exec plantpulse-datalake pd status cep
docker exec plantpulse-datalake pd restart cep
docker exec plantpulse-datalake pd logs --lines 200 cep
# 어느 백엔드로 떴나 — 판정 지표는 로그 한 줄이다
docker exec plantpulse-datalake sh -c 'grep "CEP input path" ... | tail -1'
curl -fsS http://127.0.0.1:7400/api/health
Häufig auftretende Probleme
| Symptom | Ursache | Maßnahme |
|---|---|---|
Registrierung bleibt bei REJECTED | Das gebootete Backend unterstützt diese Konfiguration nicht | Suchen Sie die entsprechende Zeile im Reject-Token |
| Registrierung mit 400 abgelehnt | Nicht registrierter Ereignistyp | Ereignistyp-Registrierung |
| CEP startet gar nicht | Tippfehler in cep.backend oder fehlende Runtime im WAR | Das Log nennt die Ursache. Es gibt keinen Fallback |
| Ergebnisse kommen nirgendwo an | Keine Subscriber (0) | Log-Eintrag no subscriber |
| Ergebnisse kommen doppelt an | Booten mit anderem Backend, während cep.flink.*-Schalter aktiv ist | Backend |
Health ist DEGRADED, Tabellenname im Grund | CEP-Tabellen fehlen | Prüfen Sie die DB-Verbindung(jdbc.datalake.*) und starten Sie neu — Tabellen werden beim Start selbst erstellt |
| API 401 | API-Key stimmt nicht überein | passwd.sh PP_CEP_API_KEY |
| Konsolen-Login abgelehnt | PP_CEP_WEB_PASSWORD ist leer | Web-Login-Konto |
Verwandte Dokumente
- CEP-Abschnitt — Übersicht · EQL · Backend · Ereignistyp · Betrieb · Einschränkungen
- Datenlake-Übersicht
- CEP-Konsole (7401)
- CEP-Client