メインコンテンツまでスキップ

plantpulse-cep (複合イベント処理)

役割​

Complex Event Processing 階層です。複数のイベントの時間的・論理的パターンをリアルタイムで検知し、アラーム・Flowトリガー・自動化を実行します。ルールは EQL(PlantPulse CEP SQL) で記述します。

項目値
モジュール名plantpulse-cep
設置パス/opt/kopens/plantpulse-platform/plantpulse-cep/
ポート7400 (HTTP) · 7401 (TLS)
実行エンジン起動時に1つ選択 — Aster CEP(cep.backend=aster, 設定しなくても同一)
pd サービスcep — MASTER のみ
API 認証X-API-Key: <PP_CEP_API_KEY>
コンソールログインPP_CEP_WEB_USER / PP_CEP_WEB_PASSWORD — 空の場合、コンソールのみ閉じられます
言語・バックエンド・運用・制限は専用セクションにあります

このページは モジュールとファイル を扱います。文の書き方と実行方法については CEP セクション を参照してください。

使用例​

「アラームが発生したが、30分間 解除されない場合は未解除として報告する」

SELECT a.machineId AS machine
FROM pattern [every a=AlarmEvent -> not ClearEvent for 30 min]

構成​

API・コンソール・エンジンが同一プロセス内にあります。動作するエンジンは起動時に選択した 1つ だけです。

ディレクトリ構造​

plantpulse-cep/
├── config/plantpulse-cep.properties # 생성물 ← plantpulse-datalake-cli 의 템플릿
├── bin/start.sh
├── logs/
└── server/ # 내장 Tomcat — webapps/ROOT.war · logs/catalina.<date>.log

主要設定​

# 백엔드 — 부팅 시 하나. 미설정이면 이전 것을 그대로 유지한다
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.* は Flink で起動した場合のみ意味を持ちます

同じファイルに cep.flink.reconciler.enabled · cep.flink.router.enabled が残っています。別のバックエンドで起動した場合は無視され、ログに名前が一度だけ出力されます。

有効にしたまま別のバックエンドを起動し、同一の文が2つのエンジンで動作して結果が二重に発行された事例があります → バックエンド

値を変更する手順は 設定変更方法、APIキーの更新は パスワード · APIキー変更 を参照してください。

主要 API​

パス役割
POST /api/v1/eql/deploy文の登録
POST /api/v1/eql/validate判定のみ — SUPPORTED / UNSUPPORTED / UNPARSEABLE
DELETE /api/v1/eql/undeploy/{id}登録解除
GET /api/v1/eql/registration登録結果表 (ACTIVE / REJECTED)
GET /api/v1/eql/portability移植性
GET /api/v1/eql/metrics/snapshot · /metrics/engine文ごとの一致率 · 出力率、エンジン指標
GET·POST·PUT·DELETE /api/v1/event-typesイベントタイプ登録
GET·POST·DELETE /api/v1/keysAPI キー
GET /api/health匿名 readiness — エンジン · キャッシュ · スキーマ

運用コマンド​

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

よく発生する問題​

症状原因対応
登録が REJECTED のままになる起動したバックエンドがその構成をサポートしていない拒否トークン から該当行を探します
登録が 400 で拒否される未登録のイベントタイプイベントタイプ登録
CEP が起動しないcep.backend のタイポ、または該当ランタイムがない WARログに名前が出力されます。フォールバックはありません
結果がどこにも届かないサブスクライバーが 0ログの no subscriber
同一の結果が2回届くcep.flink.* スイッチがオンのまま別のバックエンドで起動バックエンド
ヘルスチェックが DEGRADED、理由にテーブル名があるCEP 所有のテーブルが存在しないDB 接続(jdbc.datalake.*)を確認して再起動 — 起動時に自動作成されます
API 401API キー不一致passwd.sh PP_CEP_API_KEY
コンソールログイン拒否PP_CEP_WEB_PASSWORD が空ウェブ画面ログインアカウント

関連文書​