CEP (Complex Event Processing)
Inhaltsverzeichnis
- Überblick
- Bildschirmaufbau — EQL-Ansichten der Gruppe Automation
- Query-Ansicht (
/query/index) - Statement-Ansicht (
/statement/index) - Hinweise zur Trigger-Ansicht
- Anwendungsszenarien
- Häufige Fragen
- Verwandte Ansichten
Überblick
Die Funktion CEP (Complex Event Processing) ist eine Regel-Engine, die in Echtzeit-Ereignisströmen aussagekräftige Muster erkennt und daraufhin unmittelbar Aktionen (Speichern, Publizieren, Alarm) auslöst. Im linken Menü erscheint sie derzeit als EQL-Query und Statement in der Gruppe Automation.
| Untermenü | Interne URL | Zweck |
|---|---|---|
| EQL-Query | /query/index | Ad-hoc-Queries in EQL (Event Query Language) gegen den Echtzeitstrom absetzen und Ergebnisse sofort ansehen |
| Statement | /statement/index | Domänenregeln je Asset (Zustand/Aggregation/Ereignis/Befehl) einsehen |
Die Ergebnisse von CEP-Regeln werden auch automatisch an die Asset-Trigger (z. B. flow_on_asset_event) im Flow weitergereicht.
Bildschirmaufbau — EQL-Ansichten der Gruppe Automation
| Ansicht | Hauptnutzer | Kurzbeschreibung |
|---|---|---|
| Query | Betriebsanalyst | Eine EQL-Zeile sofort ausführen und Ergebnisse aus dem Echtzeitstrom ansehen |
| Statement | Bediener | Status und Ausführungsstatistiken der einem Asset zugeordneten Domänenregeln einsehen |
Query-Ansicht (/query/index)
Ansicht zum Erstellen von EQL-Ad-hoc-Queries, die per ▶-Schaltfläche sofort ausgeführt werden und Ergebnisse aus dem Echtzeitstrom liefern.
Kopfbereich — Query speichern und Verlauf
🔍 쿼리 [💾 이 쿼리를 저장] [↩ 마지막 쿼리] [▼ 이력 ▼]
| Schaltfläche | Funktion |
|---|---|
| Diese Query speichern | saveQueryHistory() — die aktuelle EQL als Favorit speichern |
| Letzte Query | loadLastQuery() — zuletzt ausgeführte Query laden |
| Verlaufs-Dropdown | loadQueryHistory() — gespeicherten Query-Verlauf als Dropdown anzeigen (Scrollbereich max. 400px) |
Queries, die im Kopfbereich oder im EQL-Eingabefeld des linken Menüs erstellt wurden, werden automatisch an diese Ansicht übergeben und können dort ausgeführt werden.
EQL-Eingabebereich
Großes Eingabefeld mit schwarzem Rahmen (textarea[name=epl], Höhe 8 Zeilen) + zwei Symbole oben rechts.
| Symbol | Funktion |
|---|---|
| ▶ (Play, weiß) | runQuery() — EQL ausführen |
| ⚙ (Zahnrad, grau) | resultConfig() — Dialog für Anzeigeoptionen der Ergebnisse (display_count, expire_time, result_format, Diagrammoptionen usw.) |
Ergebnisbereich
Die Kopfzeile des Ergebnisbereichs zeigt Folgendes an:
| Element | Anzeige |
|---|---|
| Links | ⚪ „Query-Ergebnis" + (bei gespeicherter Query) [배치시간=..., EQL ID=...] |
| Rechts | ▶ Start / ⏸ Stopp (Empfang der Echtzeitergebnisse pausieren) |
Ergebnisdiagramm (query_result_chart, 160px)
- Oben rechts werden die Eingangsanzahl (
input_count_cur) und die Eingänge pro Minute (input_count_min) angezeigt - Sobald Ergebnisdaten eintreffen, füllt sich das Diagramm. Darstellung als Echtzeit-Liniendiagramm
- Vor dem Eintreffen von Daten: „Warte auf Diagrammdaten ..." (rotierendes Symbol)
Ergebnistabelle (query_result_table)
| Spalte | Beschreibung |
|---|---|
| # | Zeilennummer |
| Ausgabezeit | Zeitpunkt, zu dem die EQL das Ergebnis emittiert hat |
| Zeilen | Anzahl Zeilen pro Emit |
| Daten | Ergebnisinhalt als JSON oder Tabelle |
Wird die Ausführung nicht gestoppt, wächst die Ergebnistabelle fortlaufend an. Durch Stopp oder das Ausführen einer neuen Query endet die Akkumulation.
Hinweise zur Trigger-Ansicht
Ein eigenes Menü Trigger ist in der integrierten Seitenleiste derzeit deaktiviert. In Installationen, die noch die bisherige /trigger/index-Ansicht oder interne APIs betreiben, dient der folgende Abschnitt nur als Legacy-Referenz. Für neue Automatisierungen sind vorrangig die Trigger-Nodes im Flow sowie der Ablauf Automation > EQL-Query / Statement zu verwenden.
Hier werden benutzerdefinierte Trigger verwaltet, die EQL-Treffer an externe Nachrichtenkanäle publizieren oder im Storage ablegen.
Werkzeuge im Kopfbereich
⚡ 트리거 [➕ 트리거 추가] [↻]
Listentabelle
Rechts in der Kopfzeile des Listenbereichs stehen die drei Schaltflächen Ausgewählte Trigger deployen / Zurücknehmen / Alle neu deployen.
| Spalte | Breite | Beschreibung |
|---|---|---|
| Auswahl | 50px | Checkbox für Sammel-Deployment/-Rücknahme |
| Status | 80px | Badge deployt/zurückgenommen |
| Trigger-ID | 110px | Vom System vergebene ID |
| Triggername | Beschreibung | auto | Vom Bediener vergebene Metadaten |
| MQ-Streaming | 70px | MQ-Publizierung aktiv (Y/N) |
| Storage-Speicherung | 70px | Ablage der Ergebnisse im Storage aktiv (Y/N) |
| Ausführungen gesamt | 70px | Kumulierte Trefferzahl |
| Letzte Ausführung | 110px | Zeitpunkt des letzten Treffers |
| Fehler | 70px | Kumulierter Fehlerzähler |
| Registriert am | 110px | Registrierungszeitpunkt |
| Zuletzt geändert | 110px | Zeitpunkt der letzten Änderung |
| Aktion | 80px | Schaltflächen Bearbeiten/Löschen |
Am Seitenende wird ein Hinweisfeld angezeigt.
Verwendung benutzerdefinierter Trigger Sie können benutzerdefinierte Trigger anlegen, die bei Erfüllung bestimmter Bedingungen eine Aktion ausführen. Zusätzlich lassen sich die Ergebnisse über MQ streamen oder im Storage speichern.
Formular zum Anlegen/Bearbeiten von Triggern
Über die Schaltfläche Trigger hinzufügen im Kopfbereich gelangen Sie zur Formularansicht (/trigger/form).
1) Fieldset Basisinformationen
| Eingabe | path | Breite | Anmerkung |
|---|---|---|---|
| Trigger-ID | trigger_id | 200px | Schreibgeschützt — vom System vergeben |
| Triggername | trigger_name | 450px | Für Menschen gut erkennbarer Name |
| Beschreibung | trigger_desc | 600 × 100px (textarea) | Zweck des Triggers |
2) Fieldset EQL
| Eingabe | path | Beschreibung |
|---|---|---|
| EQL | epl | Textarea mit 8 Zeilen — EQL-Query erstellen (SELECT ... FROM ... WHERE ...) |
| ▶ Testlauf | (Symbol) | runQuery() — die erstellte EQL sofort testweise ausführen. Das Ergebnis erscheint in der Tabelle Query-Ergebnis (graph_query_result) darunter |
Tabelle Query-Ergebnis (Vorschau des Testlaufs):
| Spalte | Beschreibung |
|---|---|
| Ausgabezeit | Zeitpunkt, zu dem die EQL das Ergebnis emittiert hat |
| Daten | Ergebnisinhalt |
3) Fieldset Streaming
| Eingabe | path | Beschreibung |
|---|---|---|
| MQ-Ausgabe | use_mq (Checkbox) | Ob die Ergebnisdaten an einen externen Nachrichtenkanal publiziert werden |
| Protokoll | mq_protocol (Auswahl) | MQTT oder KAFKA |
| Destination | mq_destination (450px) | Ziel-Topic/-Kanal — Trennzeichen: KAFKA -, MQTT /. Beispiel: device-machine-topic-1 oder device/machine/topic_1 |
4) Fieldset Storage-Speicherung
| Eingabe | path | Beschreibung |
|---|---|---|
| Storage-Speicherung | use_storage (Checkbox) | Ob die Ergebnisdaten im Storage abgelegt werden |
Der Bereich für Storage-Tabellenname und Spaltendefinition ist derzeit deaktiviert, da die Zieltabelle für Triggerergebnisse fest vorgegeben ist.
Formular absenden
| Schaltfläche | Funktion |
|---|---|
| Liste (☰) | Zurück zur Trigger-Liste |
| Speichern (blau) | Nach Eingabeprüfung speichern. Durch das Speichern allein erfolgt noch kein Deployment; erst mit Ausgewählte Trigger deployen in der Listenansicht beginnt der Betrieb |
Alle neu deployen
| Schaltfläche | Position | Funktion |
|---|---|---|
| Alle neu deployen | rechts in der Kopfzeile des Listenbereichs (🔁) | Alle registrierten Trigger gesammelt neu deployen. Nach Neustart der Regel-Engine oder nach einer System-Inspektion zu verwenden |
Betriebsablauf
- Trigger hinzufügen → EQL-, Streaming- und Storage-Optionen eingeben → Speichern
- In der Liste den Trigger markieren → Ausgewählte Trigger deployen klicken → Status wechselt auf „deployt"
- Zum kurzzeitigen Anhalten im Betrieb Zurücknehmen klicken → Status wechselt auf „zurückgenommen"
- Nach der Inspektion mit Alle neu deployen gesammelt wieder in Betrieb nehmen
Statement-Ansicht (/statement/index)
Ansicht zum Einsehen von Status und Ausführungsstatistiken der je Asset registrierten Domänenregeln (Zustand/Aggregation/Ereignis/Befehl).
Suche und Filter im Kopfbereich
√ 스테이트먼트 [유형 ▼] [검색 ...] [조회] [↻]
| Steuerelement | Optionen | Beschreibung |
|---|---|---|
Typauswahl (search_type) | (alle), Zustand (CONTEXT), Aggregation (AGGREGATION), Ereignis (EVENT), Befehl (COMMAND) | Filter für die 4 Regeltypen |
Sucheingabe (txt) | (250px) | placeholder: „Suchen ..." — Regelname / Asset-ID / Stichwort aus der Beschreibung |
| Abfragen | (rot + 🔍) | search() — Liste anhand der Kriterien aktualisieren |
| Aktualisieren | (rot + ↻) | refresh() — Ansicht neu laden |
Die 4 Regeltypen
| Code | Bezeichnung | Bedeutung |
|---|---|---|
CONTEXT | Zustand | Aktueller Zustand des Assets (Betrieb/Stillstand/Störung), per EQL definiert |
AGGREGATION | Aggregation | Aggregation wie Mittel- oder Maximalwert über ein Zeitfenster |
EVENT | Ereignis | Publizieren eines Domänenereignisses bei Auftreten eines Musters (z. B. Grenzwertüberschreitung) |
COMMAND | Befehl | Bei Regeltreffer einen Befehl (flow_on_asset_command) an das Asset absetzen |
Listentabelle
| Spalte | Breite | Beschreibung |
|---|---|---|
| Status | 80px | Badge aktiv/inaktiv |
| Zugeordnete Asset-ID | 150px | Kennung des Assets, dem die Regel zugewiesen ist |
| Typ | 80px | Einer der 4 Typen (siehe Tabelle oben) |
| Statementname | auto | Name der Regel |
| Beschreibung | 300px | Notiz zur Regel |
| Ausführungen gesamt | 80px | Kumulierte Anzahl der Regeltreffer |
| Letzte Ausführung | 120px | Zeitpunkt des letzten Treffers |
| Fehler | 60px | Kumulierter Fehlerzähler |
| Registriert am | 120px | Registrierungszeitpunkt der Regel |
| Details | 50px | Öffnet die Detailansicht der Regel (/statement/view) |
Detailansicht
Ein Klick auf Details in der Liste führt zu einer eigenen Ansicht (/statement/view/{asset_id}/{statement_name}) mit folgenden Inhalten (siehe Statement-Detailansicht unten).
- EQL-Text der Regel
- Verlauf der Ausführungsergebnisse
- Ausführungstrend/-aggregation
- Trend der Analyse-Performance
- Statusverlauf
Statement-Detailansicht
Die über die Detail-Schaltfläche erreichbare Analyseansicht (statement/view.jsp, 715 Zeilen). Sie fasst alle Betriebsinformationen einer Regel auf einem Bildschirm zusammen.
Kopfbereich — Identifikationskopf
√ 스테이트먼트 | {statement_name} [ {asset_id} ] [← 목록] [↻]
| Schaltfläche | Funktion |
|---|---|
| Liste (←) | Zurück zu /statement/index |
| Aktualisieren | Ansicht neu laden |
Panel 1 — Statement-Informationen (Tabelle mit 5 Spalten)
| Spalte | Breite | Beschreibung |
|---|---|---|
| Status | 250px | Aktiv/inaktiv + Zeitpunkt der letzten Ausführung |
| Statementname | auto | Name der Regel |
| Zugeordnetes Asset | 200px | Badge der Asset-Domäne — führt per Klick zum Asset-Baum |
| Typ | 200px | Zustand (CONTEXT), Aggregation (AGGREGATION), Ereignis (EVENT), Befehl (COMMAND) |
| Registriert am | 160px | Registrierungszeitpunkt der Regel |
Fieldset EQL-Text
Der EQL-Query-Text der Regel wird unverändert angezeigt. Aus dem Textbereich lässt er sich kopieren und in der Query-Ansicht testweise ausführen.
Fieldset Ein- und Ausgaben
| Bereich | Anzeige |
|---|---|
| Eingangsserien | Liste der Tags und Ereignistypen, die als Eingabe der Regel dienen |
| Ausgangsserien | Von der Regel publizierte Domänenereignistypen |
| Fehlerzähler zurücksetzen | Setzt nur den kumulierten Fehlerzähler auf 0 (resetErrorCount(asset_id, statement_name)) |
Panel 2 — Verlauf der Ausführungsergebnisse (Tabelle mit 4 Spalten)
| Spalte | Breite | Beschreibung |
|---|---|---|
| Ausführungszeit | 160px | Zeitpunkt der Regelausführung |
| Ergebnis | 60px | Erfolg (grün) / Fehler (rot) |
| Ergebniswert / Fehlermeldung | auto | Bei Erfolg der Ergebnisinhalt, bei Fehler die Fehlermeldung |
| Kopieren | 50px | 📋 — Ergebniswert/Fehlermeldung in die Zwischenablage kopieren |
Panel 3 — Diagramm Ausführungstrend
| Element | Beschreibung |
|---|---|
| Kopfzeile | 📊 „Ausführungstrend" |
| Schaltflächen | Umschalter Heute (switchTrendDay(0)) / Gestern (switchTrendDay(-1)) |
| Diagramm | Gestapelte Balken je Stunde über 24 Stunden für Erfolg/Fehler (Serien: Erfolg, Fehler) |
Panel 4 — Ausführungsaggregation
| Element | Beschreibung |
|---|---|
| Kopfzeile | 📊 „Ausführungsaggregation" |
| Schaltflächen | Umschalter Heute (switchAggDay(0)) / Gestern (switchAggDay(-1)) |
| fieldset 1 | Aggregation je Minute (Anzahl je Zeitraum, mittlerer Durchsatz usw.) |
| fieldset 2 | Priorität oder Ergebnisverteilung |
Panel 5 — Trend der Analyse-Performance
| Element | Beschreibung |
|---|---|
| Kopfzeile | 🖥 „Trend der Analyse-Performance" |
| Schaltflächen | Umschalter Heute (switchCpuDay(0)) / Gestern (switchCpuDay(-1)) |
| Diagramm | Zeitreihe von CPU-Last/Verarbeitungszeit der Regelauswertung — zur Identifikation aufwendiger Regeln |
Panel 6 — Tabelle Statusverlauf
| Spalte | Beschreibung |
|---|---|
| Änderungszeit | Zeitpunkt der Statusänderung der Regel (aktiviert, zurückgenommen, neu deployt usw.) |
| Status | Geänderter Status |
Dient der Nachverfolgung des Regel-Lebenszyklus (wann aktiviert, zurückgenommen oder geändert).
Anwendungsmuster
| Analyseablauf | Ansichtsfolge |
|---|---|
| Fehlerhafte Regel diagnostizieren | Verlauf der Ausführungsergebnisse → Fehlermeldung → Kopieren → EQL-Text prüfen → Testlauf in der Query-Ansicht |
| Aufwendige Regeln identifizieren | Trend der Analyse-Performance → Zeiträume mit hoher CPU-Last → EQL-Text vereinfachen |
| Trefferverteilung analysieren | Ausführungstrend + Aggregation → Treffermuster nach Tageszeit |
| Betriebsregeln pflegen | Statusverlauf → Zeitpunkte von Aktivierung/Rücknahme nachvollziehen |
Anwendungsszenarien
| Szenario | Ansicht | Vorgehen |
|---|---|---|
| Aktuellen Betriebszustand einer Linie sofort prüfen | Query | SELECT * FROM AssetData.win:time(1 sec) WHERE asset_id='LINE-A' in das EQL-Eingabefeld → ▶ |
| Neue Alarmregel testen und ausrollen | Trigger | Hinzufügen → EQL erstellen → ▶ Testlauf → Ergebnis prüfen → Speichern → Deployen |
| Asset-Ereignisse an externes SCADA weiterleiten | Trigger | EQL-Treffermeldungen an das MQTT-Topic scada/line-a/events publizieren |
| Regeln je Asset prüfen | Statement | Typ = EVENT + Suche nach Asset-ID → Liste aktiver Regeln + Ausführungszahlen |
| Verdacht auf Regel-Flut | Statement | Regeln mit hoher Gesamtausführungszahl zuerst prüfen → in den Details EQL/Eingaben untersuchen |
| Regelergebnisse per Automatisierung empfangen | Flow | Ergebnisse der Domänenregeln direkt über den Trigger flow_on_asset_event empfangen |
Häufige Fragen
F. Ist EQL dasselbe wie SQL?
A. Die Syntax ist ähnlich, EQL ist jedoch eine Ereignisverarbeitungssprache mit den zusätzlichen Konzepten Zeitfenster und Stream. Beispiel: Point.win:time(5 sec) verarbeitet nur die Daten der letzten 5 Sekunden, Point.win:length(100) nur die letzten 100 Datensätze.
F. Werden in der Query-Ansicht ausgeführte Queries gespeichert? A. Ein Ausführen mit ▶ ist nur temporär; erst mit Diese Query speichern wird sie in den Favoriten abgelegt. Für einmalige Analysen ist ein Speichern nicht nötig.
F. Ich habe einen Trigger nur gespeichert, er arbeitet aber nicht. A. Durch das Speichern ist lediglich die Definition registriert. Sie müssen den Trigger in der Liste markieren und Ausgewählte Trigger deployen klicken; erst dann wird er in der Regel-Engine registriert und die Auswertung beginnt.
F. Wie lege ich die Destination eines Triggers fest? A. Das Trennzeichen richtet sich nach dem Protokoll.
- KAFKA: Trennung per Bindestrich (
-) — Beispiel:device-machine-topic-1 - MQTT: Trennung per Schrägstrich (
/) — Beispiel:device/machine/topic_1
F. Die Suche in der Statement-Ansicht liefert keine Ergebnisse. A. Prüfen Sie, ob in der Typauswahl „Typ" (alle) ausgewählt ist. Zudem genügt die Eingabe eines Teils der Asset-ID, da eine Teilübereinstimmung gesucht wird.
F. Die Gesamtzahl der Ausführungen ist ungewöhnlich hoch.
A. Sehr wahrscheinlich ist das Eingabefenster der Regel zu eng gefasst oder die Trefferbedingung zu weit. Prüfen Sie die EQL über die Schaltfläche Details oder filtern Sie die Nachrichten vorab über das Trigger-Muster (*_pattern) im Flow.
F. Der EQL-Testlauf eines Triggers liefert ein leeres Ergebnis.
A. Möglicherweise kamen zum Testzeitpunkt keine Daten herein, oder das EQL-Fenster ist so lang, dass der erste Treffer spät erfolgt. Lassen Sie den Test etwa eine Minute laufen und sehen Sie erneut nach, oder verkürzen Sie das Fenster (win:time(1 sec)) für den Test.
F. Wie halte ich einen Trigger vorübergehend an? A. Markieren Sie ihn in der Liste und klicken Sie Zurücknehmen. Zum Wiederanlauf Ausgewählte Trigger deployen.
F. Werden Assets automatisch Regeln zugewiesen? A. Je nach Konfiguration der Betriebsumgebung werden bei der Registrierung eines Assets teilweise Standard-Domänenregeln automatisch zugewiesen. Die aktuell zugewiesenen Regeln sehen Sie in der Statement-Ansicht; Ergänzungen oder Entfernungen nehmen der Systemadministrator oder die assetspezifische Konfigurationsansicht vor.
F. Ich möchte EQL-Ergebnisse automatisch weiterverarbeiten.
A. Über die Asset-Trigger im Flow (z. B. flow_on_asset_event/flow_on_asset_alarm) lassen sich die Ergebnisse der Domänenregeln automatisch empfangen und mit Folgeaktionen (Arbeitsauftrag erstellen, E-Mail, Aufruf externer APIs) verknüpfen.
Verwandte Ansichten
- Datenpunkte — Zeitreihen-Tagdaten als Eingabe der EQL
- Alarm — Betriebsansicht der von Triggern ausgelösten Alarme
- Flow — Regelergebnisse über Asset-Trigger automatisch verarbeiten
- Werksverwaltung — Regelzuweisung im Asset-Baum
- Definition der Statuscodes — von Regeln ausgewertete Statuscodes (NORMAL/WARN/ERROR)
- Diagnose — Fehlerprotokolle während der Regelverarbeitung