Zum Hauptinhalt springen

CEP (Complex Event Processing)

Inhaltsverzeichnis


Ü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 URLZweck
EQL-Query/query/indexAd-hoc-Queries in EQL (Event Query Language) gegen den Echtzeitstrom absetzen und Ergebnisse sofort ansehen
Statement/statement/indexDomä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

AnsichtHauptnutzerKurzbeschreibung
QueryBetriebsanalystEine EQL-Zeile sofort ausführen und Ergebnisse aus dem Echtzeitstrom ansehen
StatementBedienerStatus 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ächeFunktion
Diese Query speichernsaveQueryHistory() — die aktuelle EQL als Favorit speichern
Letzte QueryloadLastQuery() — zuletzt ausgeführte Query laden
Verlaufs-DropdownloadQueryHistory() — 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.

SymbolFunktion
▶ (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:

ElementAnzeige
Links⚪ „Query-Ergebnis" + (bei gespeicherter Query) [배치시간=..., EQL ID=...]
RechtsStart / ⏸ 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)

SpalteBeschreibung
#Zeilennummer
AusgabezeitZeitpunkt, zu dem die EQL das Ergebnis emittiert hat
ZeilenAnzahl Zeilen pro Emit
DatenErgebnisinhalt 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.

SpalteBreiteBeschreibung
Auswahl50pxCheckbox für Sammel-Deployment/-Rücknahme
Status80pxBadge deployt/zurückgenommen
Trigger-ID110pxVom System vergebene ID
Triggername | BeschreibungautoVom Bediener vergebene Metadaten
MQ-Streaming70pxMQ-Publizierung aktiv (Y/N)
Storage-Speicherung70pxAblage der Ergebnisse im Storage aktiv (Y/N)
Ausführungen gesamt70pxKumulierte Trefferzahl
Letzte Ausführung110pxZeitpunkt des letzten Treffers
Fehler70pxKumulierter Fehlerzähler
Registriert am110pxRegistrierungszeitpunkt
Zuletzt geändert110pxZeitpunkt der letzten Änderung
Aktion80pxSchaltflä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

EingabepathBreiteAnmerkung
Trigger-IDtrigger_id200pxSchreibgeschützt — vom System vergeben
Triggernametrigger_name450pxFür Menschen gut erkennbarer Name
Beschreibungtrigger_desc600 × 100px (textarea)Zweck des Triggers

2) Fieldset EQL

EingabepathBeschreibung
EQLeplTextarea 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):

SpalteBeschreibung
AusgabezeitZeitpunkt, zu dem die EQL das Ergebnis emittiert hat
DatenErgebnisinhalt

3) Fieldset Streaming

EingabepathBeschreibung
MQ-Ausgabeuse_mq (Checkbox)Ob die Ergebnisdaten an einen externen Nachrichtenkanal publiziert werden
Protokollmq_protocol (Auswahl)MQTT oder KAFKA
Destinationmq_destination (450px)Ziel-Topic/-Kanal — Trennzeichen: KAFKA -, MQTT /. Beispiel: device-machine-topic-1 oder device/machine/topic_1

4) Fieldset Storage-Speicherung

EingabepathBeschreibung
Storage-Speicherunguse_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ächeFunktion
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ächePositionFunktion
Alle neu deployenrechts in der Kopfzeile des Listenbereichs (🔁)Alle registrierten Trigger gesammelt neu deployen. Nach Neustart der Regel-Engine oder nach einer System-Inspektion zu verwenden

Betriebsablauf

  1. Trigger hinzufügen → EQL-, Streaming- und Storage-Optionen eingeben → Speichern
  2. In der Liste den Trigger markieren → Ausgewählte Trigger deployen klicken → Status wechselt auf „deployt"
  3. Zum kurzzeitigen Anhalten im Betrieb Zurücknehmen klicken → Status wechselt auf „zurückgenommen"
  4. 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

√ 스테이트먼트 [유형 ▼] [검색 ...] [조회] [↻]
SteuerelementOptionenBeschreibung
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

CodeBezeichnungBedeutung
CONTEXTZustandAktueller Zustand des Assets (Betrieb/Stillstand/Störung), per EQL definiert
AGGREGATIONAggregationAggregation wie Mittel- oder Maximalwert über ein Zeitfenster
EVENTEreignisPublizieren eines Domänenereignisses bei Auftreten eines Musters (z. B. Grenzwertüberschreitung)
COMMANDBefehlBei Regeltreffer einen Befehl (flow_on_asset_command) an das Asset absetzen

Listentabelle

SpalteBreiteBeschreibung
Status80pxBadge aktiv/inaktiv
Zugeordnete Asset-ID150pxKennung des Assets, dem die Regel zugewiesen ist
Typ80pxEiner der 4 Typen (siehe Tabelle oben)
StatementnameautoName der Regel
Beschreibung300pxNotiz zur Regel
Ausführungen gesamt80pxKumulierte Anzahl der Regeltreffer
Letzte Ausführung120pxZeitpunkt des letzten Treffers
Fehler60pxKumulierter Fehlerzähler
Registriert am120pxRegistrierungszeitpunkt der Regel
Details50pxÖ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ächeFunktion
Liste (←)Zurück zu /statement/index
AktualisierenAnsicht neu laden

Panel 1 — Statement-Informationen (Tabelle mit 5 Spalten)

SpalteBreiteBeschreibung
Status250pxAktiv/inaktiv + Zeitpunkt der letzten Ausführung
StatementnameautoName der Regel
Zugeordnetes Asset200pxBadge der Asset-Domäne — führt per Klick zum Asset-Baum
Typ200pxZustand (CONTEXT), Aggregation (AGGREGATION), Ereignis (EVENT), Befehl (COMMAND)
Registriert am160pxRegistrierungszeitpunkt 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

BereichAnzeige
EingangsserienListe der Tags und Ereignistypen, die als Eingabe der Regel dienen
AusgangsserienVon der Regel publizierte Domänenereignistypen
Fehlerzähler zurücksetzenSetzt nur den kumulierten Fehlerzähler auf 0 (resetErrorCount(asset_id, statement_name))

Panel 2 — Verlauf der Ausführungsergebnisse (Tabelle mit 4 Spalten)

SpalteBreiteBeschreibung
Ausführungszeit160pxZeitpunkt der Regelausführung
Ergebnis60pxErfolg (grün) / Fehler (rot)
Ergebniswert / FehlermeldungautoBei Erfolg der Ergebnisinhalt, bei Fehler die Fehlermeldung
Kopieren50px📋 — Ergebniswert/Fehlermeldung in die Zwischenablage kopieren

Panel 3 — Diagramm Ausführungstrend

ElementBeschreibung
Kopfzeile📊 „Ausführungstrend"
SchaltflächenUmschalter Heute (switchTrendDay(0)) / Gestern (switchTrendDay(-1))
DiagrammGestapelte Balken je Stunde über 24 Stunden für Erfolg/Fehler (Serien: Erfolg, Fehler)

Panel 4 — Ausführungsaggregation

ElementBeschreibung
Kopfzeile📊 „Ausführungsaggregation"
SchaltflächenUmschalter Heute (switchAggDay(0)) / Gestern (switchAggDay(-1))
fieldset 1Aggregation je Minute (Anzahl je Zeitraum, mittlerer Durchsatz usw.)
fieldset 2Priorität oder Ergebnisverteilung

Panel 5 — Trend der Analyse-Performance

ElementBeschreibung
Kopfzeile🖥 „Trend der Analyse-Performance"
SchaltflächenUmschalter Heute (switchCpuDay(0)) / Gestern (switchCpuDay(-1))
DiagrammZeitreihe von CPU-Last/Verarbeitungszeit der Regelauswertung — zur Identifikation aufwendiger Regeln

Panel 6 — Tabelle Statusverlauf

SpalteBeschreibung
ÄnderungszeitZeitpunkt der Statusänderung der Regel (aktiviert, zurückgenommen, neu deployt usw.)
StatusGeänderter Status

Dient der Nachverfolgung des Regel-Lebenszyklus (wann aktiviert, zurückgenommen oder geändert).

Anwendungsmuster

AnalyseablaufAnsichtsfolge
Fehlerhafte Regel diagnostizierenVerlauf der Ausführungsergebnisse → Fehlermeldung → Kopieren → EQL-Text prüfen → Testlauf in der Query-Ansicht
Aufwendige Regeln identifizierenTrend der Analyse-Performance → Zeiträume mit hoher CPU-Last → EQL-Text vereinfachen
Trefferverteilung analysierenAusführungstrend + Aggregation → Treffermuster nach Tageszeit
Betriebsregeln pflegenStatusverlauf → Zeitpunkte von Aktivierung/Rücknahme nachvollziehen

Anwendungsszenarien

SzenarioAnsichtVorgehen
Aktuellen Betriebszustand einer Linie sofort prüfenQuerySELECT * FROM AssetData.win:time(1 sec) WHERE asset_id='LINE-A' in das EQL-Eingabefeld → ▶
Neue Alarmregel testen und ausrollenTriggerHinzufügen → EQL erstellen → ▶ Testlauf → Ergebnis prüfen → Speichern → Deployen
Asset-Ereignisse an externes SCADA weiterleitenTriggerEQL-Treffermeldungen an das MQTT-Topic scada/line-a/events publizieren
Regeln je Asset prüfenStatementTyp = EVENT + Suche nach Asset-ID → Liste aktiver Regeln + Ausführungszahlen
Verdacht auf Regel-FlutStatementRegeln mit hoher Gesamtausführungszahl zuerst prüfen → in den Details EQL/Eingaben untersuchen
Regelergebnisse per Automatisierung empfangenFlowErgebnisse 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