CEP 概要
CEP(Complex Event Processing) は、流れてくるイベントから「今起きていること」を即座に判定する階層です。保存した後に問い合わせるのではなく、入力される間に判定します。
「深刻度3以上のアラームが発生し、10秒以内に同じ設備で深刻度4以上が再度発生すれば昇格」 — 「アラームが発生したが、30分間解除されない場合は未解除として上げる」
ルールは EQL(PlantPulse CEP SQL) で記述します。
言語が先であり、エンジンはそれを実行するだけです
EQL 문장
│
▼
의미 분석 ─────────► 판정 셋: SUPPORTED · UNSUPPORTED · UNPARSEABLE
│
▼
공통 IR (엔진 독립)
│
┌─────┴─────┐
▼ ▼
Aster CEP Flink
(기본) (오라클 — 운영에 쓰지 않습니다)
| 言語 | EQL 1.0 — SQL-92 コア + ストリーミング拡張 |
| 基本バックエンド | Aster CEP — KOPENS 自社エンジン (動的ルール配備) |
| Flink | オラクルです — 同じ構文を Aster CEP と共に投入し、回答を照合するために使用します。運用環境では動作しません |
ランタイムで動作するエンジンは「常に一つ」です
ブート時に一つを選択し、構文ごとのルーティングやフォールバックはありません。
二つを同時に動作させると「どちらのエンジンがこの結果を出したか」が不明になり、同じ入力が二回発行されます — これは実際に発生した欠陥です。差異実行は CI で行うものであり、運用環境で二つが同時に動作することはありません。
フォールバックがないということは「行く先がない」という意味です
ブートしたバックエンドが読み込めない構文は、登録自体が拒否されます。保存はされますが REJECTED と表示され、他のエンジンに静かに引き継がれることはありません。
拒否される際は常に名称を明示します — どの構成が遮断されたかをトークンで伝えます。静かに無視すれば、構文が計画され、配備され、もっともらしい回答を出してしまいます。
EQL は何であり、何ではないか
- 他製品の互換プロジェクトではありません。 他の CEP 製品の言語をすべて実装するわけではありません。ただし、今日動作している構文は引き続き動作し続ける必要があります。
- Flink SQL の別名ではありません。 基礎は SQL-92 であり、ストリーミングに必要な部分のみを拡張します。
- バックエンドが言語を決定しません。 言語が先にあり、バックエンドはそれを実行します。
PlantPulse CEP SQL (EQL)
│
├── SQL-92 SELECT · FROM · WHERE · JOIN · GROUP BY
│ (+ HAVING · ORDER BY · LIMIT · DISTINCT · CASE · CAST)
│
└── CEP 확장 WINDOW · OUTPUT … EVERY · INSERT INTO · 스트림 필터
MATCH_RECOGNIZE · pattern[...] · 부재 패턴
拡張は標準にないものだけを維持します。 標準で表現できるものを新しいキーワードとして作り直しません。
データが流れる経路
- 入力は Valkey ストリーム、基本プレフィックス
PP:CEP-IN-STREAM、16 シャードです。 - 出力は構文ごとに一つである Valkey トピックです。
- ルールとイベントタイプの正本は PostgreSQL (
cep_statement·cep_event_type) です。
最初の10分
# 1. 어느 백엔드로 떴나 — 판정 지표는 «로그 한 줄» 입니다
docker exec plantpulse-datalake sh -c 'grep "CEP input path" /opt/kopens/.../system.log | tail -1'
# CEP input path: aster.
# 2. 서버가 살아 있나 (익명 readiness)
curl -fsS http://127.0.0.1:7400/api/health
# 3. 문장이 몇 개 등록됐고 몇 개가 거부됐나
curl -fsS -H "X-API-Key: ${PP_CEP_API_KEY}" http://127.0.0.1:7400/api/v1/eql/registration
# 4. 이 문장들이 다른 백엔드에서도 도나
curl -fsS -H "X-API-Key: ${PP_CEP_API_KEY}" http://127.0.0.1:7400/api/v1/eql/portability
ingest.rate_1m は根拠になりませんどのエンジンで動作していても流入量は増加します。どのバックエンドが動作しているかはブートログの一行が正解です。
イベントタイプを先に登録してください
登録されていないタイプに対する構文はコンパイルされ、配備され、動作しますが、永久にマッチしません。 そのため、配備時点で拒否します → イベントタイプ登録
このセクションの構成
| ページ | いつ見るか |
|---|---|
| EQL 言語 | 構文を書くとき — 節 · ウィンドウ · 集計 · パターンと動作例 |
| バックエンド | どのエンジンで起動するか、cep.mode で移植性をどう扱うか |
| イベントタイプ登録 | 新しいイベントを CEP に初めて入れるとき |
| 運用 | オン/オフ · 登録結果の読み取り · 入出力契約 |
| 限界と拒否トークン | 登録が拒否されたとき、その一行をここで探します |
関連文書
plantpulse-cepコンポーネント — モジュール · パス · 設定ファイル- CEP コンソール (7401) — ブラウザで EQL を記述
- CEP クライアント — Java SDK