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/keys | API キー |
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 401 | API キー不一致 | passwd.sh PP_CEP_API_KEY |
| コンソールログイン拒否 | PP_CEP_WEB_PASSWORD が空 | ウェブ画面ログインアカウント |
関連文書
- CEP セクション — 概要 · EQL · バックエンド · イベントタイプ · 運用 · 制限
- データレイク概要
- CEP コンソール (7401)
- CEP クライアント