CEP (複合イベント処理)
目次
- 概要
- 画面構成 — 自動化グループのEQL画面
- クエリ画面 (
/query/index) - ステートメント画面 (
/statement/index) - トリガー画面 参照
- 活用シナリオ
- よくある質問
- 関連画面
概要
CEP(Complex Event Processing)機能は、リアルタイムイベントストリームから意味のあるパターンを検出し、即座にアクション(保存・発行・アラーム)を実行するルールエンジンです。現在、左側メニューでは 自動化 グループの EQLクエリ と ステートメント として表示されます。
| サブメニュー | 内部URL | 用途 |
|---|---|---|
| EQLクエリ | /query/index | EQL(Event Query Language)の臨時クエリをリアルタイムストリームに適用し、結果を即時に確認 |
| ステートメント | /statement/index | 資産単位のドメインルール(状態/集計/イベント/命令)の照会 |
CEPルールの結果は、フロー の資産トリガー(flow_on_asset_event など)へも自動的に接続されます。
画面構成 — 自動化グループのEQL画面
| 画面 | 主なユーザー | 概要 |
|---|---|---|
| クエリ | 運用分析担当者 | EQLを1行記述して即座に実行し、リアルタイムストリームで結果を確認 |
| ステートメント | 運用者 | 資産に登録されたドメインルールの状態と実行統計を照会 |
クエリ画面 (/query/index)
EQLの臨時クエリを作成し、▶ボタンで即座に実行してリアルタイムストリームの結果を確認する画面です。
上部 — クエリ保存・履歴
🔍 쿼리 [💾 이 쿼리를 저장] [↩ 마지막 쿼리] [▼ 이력 ▼]
| ボタン | 動作 |
|---|---|
| このクエリを保存 | saveQueryHistory() — 現在のEQLをお気に入りに保存 |
| 最後のクエリ | loadLastQuery() — 直近に実行したクエリを読み込み |
| 履歴ドロップダウン | loadQueryHistory() — 保存したクエリ履歴をドロップダウンで表示(最大400pxスクロール) |
上部または左側メニューのEQL入力窓で作成したクエリは、この画面に自動的に転送され実行できます。
EQL入力パネル
黒い枠線の大きな入力ボックス(textarea[name=epl], 高さ8行) + 右上部の2つのアイコン。
| アイコン | 動作 |
|---|---|
| ▶ (再生, 白色) | runQuery() — EQL実行 |
| ⚙ (ギア, 灰色) | resultConfig() — 結果表示オプションダイアログ (display_count・expire_time・result_format・チャートオプションなど) |
実行結果パネル
結果パネルのヘッダーには以下が表示されます。
| 項目 | 表示 |
|---|---|
| 左側 | ⚪ 「クエリ実行結果」 + (保存済みクエリの場合) [배치시간=..., EQL ID=...] |
| 右側 | ▶ 開始 / ⏸ 停止 ボタン (リアルタイム結果受信の一時停止) |
結果チャート (query_result_chart, 160px)
- 右上に入力カウント(
input_count_cur) と分当たり入力数(input_count_min) を表示 - 結果データの受信が始まるとチャートが描画される。リアルタイムラインチャート形式
- データ受信前は「チャートデータ受信待ち...」 (回転アイコン)
結果テーブル (query_result_table)
| カラム | 説明 |
|---|---|
| # | 行番号 |
| 出力時間 | EQLが結果をemitした時刻 |
| 行数 | 1回のemitあたりの行数 |
| データ | JSONまたは表形式の結果本文 |
実行を停止しない限り、結果テーブルにデータが蓄積され続けます。停止ボタンを押すか、新しいクエリを実行すると蓄積が止まります。
トリガー画面 参照
独立した トリガー メニューは左側メニューにありません。既存の /trigger/index 画面や内部APIを運用中の環境では、以下の内容をレガシー参照としてのみ使用してください。新規の自動化は、フロー のトリガーノードと 自動化 > EQLクエリ / ステートメント のフローを優先して使用してください。
EQLのマッチング結果を外部メッセージチャネルへ発行したり、ストレージに保存したりするユーザー定義トリガーを管理します。
上部ツール
⚡ 트리거 [➕ 트리거 추가] [↻]
リストテーブル
リストパネルヘッダーの右側には、選択したトリガー配置 / 解除 / すべて再配置 の3つのボタンがあります。
| カラム | 幅 | 説明 |
|---|---|---|
| 選択 | 50px | 一括配置/解除用チェックボックス |
| 状態 | 80px | 配置/解除バッジ |
| トリガー ID | 110px | システム自動付与ID |
| トリガー名 | 説明 | 自動 | 運用者が指定したメタデータ |
| MQストリーミング | 70px | MQ発行の使用有無 (Y/N) |
| ストレージ保存 | 70px | 結果のストレージ蓄積使用有無 (Y/N) |
| 全体実行件数 | 70px | 累計マッチング件数 |
| 最終実行日 | 110px | 直近のマッチング時刻 |
| エラー | 70px | 累計エラーカウント |
| 登録日 | 110px | 登録時刻 |
| 最終修正日 | 110px | 最終修正時刻 |
| アクション | 80px | 修正・削除ボタン |
ページ下部には案内ボックスが表示されます。
ユーザー定義トリガーの使用 特定の条件に合致した際にアクションを実行するユーザー定義トリガーを追加できます。さらに、これをMQを通じてストリーミングしたり、ストレージに保存したりすることが可能です。
トリガー追加/修正様式
上部の トリガー追加 ボタンで様式画面(/trigger/form)へ移動します。
1) 基本情報 fieldset
| 入力 | path | 幅 | 備考 |
|---|---|---|---|
| トリガー ID | trigger_id | 200px | 読み取り専用 — システム自動付与 |
| トリガー名 | trigger_name | 450px | 識別しやすい名称 |
| 説明 | trigger_desc | 600 × 100px (textarea) | トリガーの用途 |
2) EQL fieldset
| 入力 | path | 説明 |
|---|---|---|
| EQL | epl | 8行 textarea — EQLクエリ作成 (SELECT ... FROM ... WHERE ...) |
| ▶ 試験実行 | (アイコン) | runQuery() — 作成したEQLを即座に試験実行。結果は以下の クエリ結果 表(graph_query_result)に表示 |
クエリ結果表(試験実行結果プレビュー):
| カラム | 説明 |
|---|---|
| 出力時間 | EQLが結果をemitした時刻 |
| データ | 結果本文 |
3) ストリーミング fieldset
| 入力 | path | 説明 |
|---|---|---|
| MQ出力有無 | use_mq (チェックボックス) | 結果データを外部メッセージチャネルへ発行するかどうか |
| プロトコル | mq_protocol (セレクター) | MQTT または KAFKA |
| デスティネーション | mq_destination (450px) | 発行先トピック/チャネル — 区別: KAFKA -, MQTT /. 例: device-machine-topic-1 または device/machine/topic_1 |
4) ストレージ保存 fieldset
| 入力 | path | 説明 |
|---|---|---|
| ストレージ保存有無 | use_storage (チェックボックス) | 結果データをストレージに蓄積するかどうか |
ストレージテーブル名・カラム定義領域は、トリガー結果保存テーブルが固定されているため、現在は非活性状態です。
フォーム送信
| ボタン | 動作 |
|---|---|
| リスト(☰) | トリガーリスト画面に戻る |
| 保存 (青) | 入力検証後に保存。保存しただけでは配置されず、リスト画面で 選択したトリガー配置 を押すことで実際の動作が開始される |
すべて再配置
| ボタン | 位置 | 動作 |
|---|---|---|
| すべて再配置 | リストパネルヘッダー右側 (🔁) | 登録されたすべてのトリガーを一括再配置。ルールエンジン再起動後または設備点検後に使用 |
運用手順
- トリガー追加 → EQL・ストリーミング・ストレージオプションを入力 → 保存
- リストで該当トリガーにチェック → 選択したトリガー配置 をクリック → 状態が「配置」に変更
- 運用中に一時停止させる場合は 解除 をクリック → 状態が「解除」に変更
- 点検後、すべて再配置 で一括再稼働
ステートメント画面 (/statement/index)
資産単位で登録されたドメインルール(状態/集計/イベント/命令)の状態と実行統計を照会する画面です。
上部 検索・フィルタ
√ 스테이트먼트 [유형 ▼] [검색 ...] [조회] [↻]
| コントロール | オプション | 説明 |
|---|---|---|
タイプセレクター (search_type) | 全タイプ・状態(CONTEXT)・集計(AGGREGATION)・イベント(EVENT)・命令(COMMAND) | 4種類のルールタイプフィルタ |
検索入力 (txt) | (250px) | placeholder: 「検索 ...」 — ルール名/適用資産ID/説明キーワード |
| 照会 | (赤 + 🔍) | search() — 条件でリストを更新 |
| 更新 | (赤 + ↻) | refresh() — 画面をリフレッシュ |
4種類のルールタイプ
| コード | 名称 | 意味 |
|---|---|---|
CONTEXT | 状態 | 資産の現在状態(稼働/停止/異常)をEQLで定義 |
AGGREGATION | 集計 | 一定ウィンドウ期間の平均/最大値などを集計 |
EVENT | イベント | 特定パターン(閾値超過など)発生時にドメインイベントを発行 |
COMMAND | 命令 | ルールマッチング時に資産へ命令(flow_on_asset_command)を発行 |
リストテーブル
| カラム | 幅 | 説明 |
|---|---|---|
| 状態 | 80px | 活性/非活性バッジ |
| 適用済みアセット ID | 150px | ルールが付与された資産識別子 |
| タイプ | 80px | 4つのタイプのうち1つ (上の表を参照) |
| ステートメント名 | 自動 | ルールの名前 |
| 説明 | 300px | ルールのメモ |
| 全体実行件数 | 80px | ルールがマッチングした累計回数 |
| 最終実行日 | 120px | 直近のマッチング時刻 |
| エラー | 60px | 累計エラーカウント |
| 登録日 | 120px | ルール登録時刻 |
| 詳細 | 50px | クリックしてルール詳細表示画面(/statement/view)へ移動 |
ステートメント作成 — 種類別の必須項目
ステートメントは設備に紐付けます。アセットツリーから設備を選択し、レジストリ タブの ステートメント追加 から開きます (ADMINのみ表示)。この画面(/statement/index)は照会・運用用です。
EQLの SELECT は種類別に定められた出力項目をすべて出力しなければ保存されません。 プラットフォームがその名前で値を読み取るためです。それ以外の項目は自由です。
| 種類 | ダイアログ名 | 必須項目 |
|---|---|---|
EVENT | イベント | timestamp · plugin · name · color · from_timestamp · to_timestamp · value |
CONTEXT | 文脈 | timestamp · plugin · key · value |
AGGREGATION | 集計 | timestamp · plugin · key · value |
COMMAND | 命令 | timestamp · plugin · key · value |
| 項目 | 意味 |
|---|---|
timestamp | イベント時刻(epoch ms) |
plugin | 出典プラグイン(OEE·RAM·EMSなど) |
key | 項目名(状態・集計・命令の名前) |
value | 値 |
name | イベント名 |
color | 表示色 |
from_timestamp · to_timestamp | 開始 · 終了時刻(epoch ms) |
項目は ... AS 칸 で出力するか、同じ名前の項目をそのまま選択します。SELECT * は項目名が文中にないため通りません。種類を選択すると この種類が出力すべき項目 の案内が変わり、エディタが空の場合はその種類のテンプレートが埋められます。
SELECT
timestamp AS timestamp,
'-' AS plugin,
'' AS key,
'' AS value
FROM Point(tag_id = '...')
ダイアログは保存前に EQL実行(▶)でまず検証することになっています。項目が不足していると保存が拒否され(HTTP 422, asset_statement.eql.missing_columns)、EQLエディタ下のオレンジ色のボックスに不足項目が表示されます。
AGGREGATION ステートメントのEQLに必須項目がありません: key. SELECTの出力名(... AS 項目)としてtimestamp, plugin, key, valueをすべて出力してください。
同様の規則がコンソール・V5・ISOプラグイン適用・プラグインテンプレート・MCP validate_eql にも適用されます。4種類以外の値は asset_statement.eql.unknown_type として拒否されます。
詳細表示
リストの 詳細 ボタンをクリックすると、別画面(/statement/view/{asset_id}/{statement_name})へ移動して以下を確認できます(下の ステートメント詳細画面 参照)。
- ルールのEQL本文
- 実行結果履歴
- 実行トレンド/集計
- 分析性能トレンド
- 状態履歴
ステートメント詳細画面
詳細ボタンから進入する分析ビュー(statement/view.jsp, 715行)。1つのルールのすべての運用情報を1つの画面にまとめています。
上部 — 識別ヘッダー
√ 스테이트먼트 | {statement_name} [ {asset_id} ] [← 목록] [↻]
| ボタン | 動作 |
|---|---|
| リスト(←) | /statement/index へ戻る |
| 更新 | 画面を再読み込み |
パネル 1 — ステートメント情報 (5カラム表)
| カラム | 幅 | 説明 |
|---|---|---|
| 状態 | 250px | 活性/非活性 + 最終実行時刻 |
| ステートメント名 | 自動 | ルールの名前 |
| 適用アセット | 200px | 資産ドメインバッジ — クリックで 資産ツリー へ移動 |
| タイプ | 200px | 状態(CONTEXT)·集計(AGGREGATION)·イベント(EVENT)·命令(COMMAND) |
| 登録日 | 160px | ルール登録時刻 |
EQL本文 fieldset
ルールのEQLクエリ本文がそのまま表示されます。テキスト領域からコピーして クエリ画面 に貼り付け、試験実行することができます。
入力・出力 fieldset
| 領域 | 表示 |
|---|---|
| 入力シリーズ | ルールの入力に使用されるタグ・イベントタイプリスト |
| 出力シリーズ | ルールが発行するドメインイベントタイプ |
| エラーカウント初期化 | 累計エラーカウントのみを0にリセット(resetErrorCount(asset_id, statement_name)) |
パネル 2 — 実行結果履歴 (4カラム表)
| カラム | 幅 | 説明 |
|---|---|---|
| 実行時間 | 160px | ルール実行時刻 |
| 結果 | 60px | 成功(緑) / エラー(赤) |
| 結果値 / エラーメッセージ | 自動 | 成功時は結果本文、エラー時はエラーメッセージ |
| コピー | 50px | 📋 — 結果値/エラーメッセージをクリップボードにコピー |
パネル 3 — 実行トレンドチャート
| 項目 | 説明 |
|---|---|
| ヘッダー | 📊 「実行トレンド」 |
| ボタン | 今日(switchTrendDay(0)) / 昨日(switchTrendDay(-1)) トグル |
| チャート | 24時間時間帯別の成功/エラー累計棒グラフ (シリーズ: 成功・エラー) |
パネル 4 — 実行集計
| 項目 | 説明 |
|---|---|
| ヘッダー | 📊 「実行集計」 |
| ボタン | 今日(switchAggDay(0)) / 昨日(switchAggDay(-1)) トグル |
| fieldset 1 | 分単位集計(時間帯別カウント・平均処理量など) |
| fieldset 2 | 優先順位または結果分布 |
パネル 5 — 分析性能トレンド
| 項目 | 説明 |
|---|---|
| ヘッダー | 🖥 「分析性能トレンド」 |
| ボタン | 今日(switchCpuDay(0)) / 昨日(switchCpuDay(-1)) トグル |
| チャート | ルール処理に使用されたCPU/処理時間の時系列 — 負荷の高いルールを識別 |
パネル 6 — 状態履歴表
| カラム | 説明 |
|---|---|
| 変更時間 | ルール状態変更時刻 (活性・解除・再配置など) |
| 状態 | 変更された状態 |
ルールライフサイクル(いつ活性化・解除・修正されたか)を追跡する際に使用します。
活用パターン
| 分析フロー | 画面フロー |
|---|---|
| エラールールの診断 | 実行結果履歴 → エラーメッセージ → コピー → EQL本文検討 → クエリ画面 で試験実行 |
| 負荷の高いルールの識別 | 分析性能トレンド → CPU使用量が多い時間帯 → EQL本文の簡素化 |
| ルールマッチング分布分析 | 実行トレンド + 集計 → 時間帯別のマッチングパターン |
| 運用ルールの整備 | 状態履歴 → 活性化/解除時点の追跡 |
活用シナリオ
| シナリオ | 画面 | 手順 |
|---|---|---|
| 現在のライン稼働状態を即座に確認 | クエリ | EQL入力窓に SELECT * FROM AssetData.win:time(1 sec) WHERE asset_id='LINE-A' → ▶ |
| 新しいアラームルールの試験・配備 | トリガー | 追加 → EQL作成 → ▶ 試験実行 → 結果確認 → 保存 → 配置 |
| 外部SCADAへ資産イベントを中継 | トリガー | EQLマッチングメッセージをMQTTトピック scada/line-a/events へ発行 |
| 資産単位のルール点検 | ステートメント | タイプ=EVENT + 資産ID検索 → 活性ルールリスト + 実行件数 |
| ルールの暴走が疑われる場合 | ステートメント | 全体実行件数が多いルールから確認 → 詳細でEQL/入力検討 |
| 自動化でルールの結果を受信 | フロー | flow_on_asset_event トリガーでドメインルールの結果を直接受信 |
よくある質問
Q. EQLはSQLと同じですか?
A. 似た構文を使用していますが、EQLは 時間ウィンドウ と ストリーム の概念が追加されたイベント処理言語です。例: Point.win:time(5 sec) は直近5秒のデータのみを、Point.win:length(100) は直近100件のみを処理します。
Q. クエリ画面で実行したクエリは保存されますか? A. ▶ 実行しただけでは一時的であり、このクエリを保存 ボタンを押すことでお気に入りに保存されます。単発の分析用であれば保存しなくても問題ありません。
Q. トリガーを保存しましたが動作しません。 A. 保存は定義を登録しただけの状態です。リストでそのトリガーにチェックを入れ、選択したトリガー配置 をクリックすることで、実際のルールエンジンに登録されマッチングが開始されます。
Q. トリガーのデスティネーションはどう決めればよいですか? A. プロトコル によって区切り文字が異なります。
- KAFKA: ハイフン(
-)区切り — 例:device-machine-topic-1 - MQTT: スラッシュ(
/)区切り — 例:device/machine/topic_1
Q. ステートメント画面で検索しても結果が出ません。 A. タイプセレクターで「タイプ」(全体)が選択されているか確認してください。また、資産IDの一部を入力しても部分一致検索が可能です。
Q. 全体実行件数が異常に大きいです。
A. ルールの入力ウィンドウが狭すぎるか、マッチング条件が広すぎる可能性があります。詳細 ボタンでEQLを検討するか、フロー のトリガパターン(*_pattern)でメッセージを事前フィルタリングしてください。
Q. トリガーのEQL試験実行結果が空です。
A. 試験時点でデータ入力がないか、EQLのウィンドウが長すぎて最初の方のマッチングに時間がかかっている可能性があります。試験を1分ほど待ってから再確認するか、ウィンドウを短く (win:time(1 sec)) 調整して試験してください。
Q. トリガーを一時的に停止させるには? A. リストで該当トリガーにチェックを入れ、解除 をクリックしてください。再始動させる場合は 選択したトリガー配置 をクリックします。
Q. 資産にルールが自動的に付与されますか? A. 資産登録時の運用環境設定により、基本ドメインルールが自動付与される場合があります。現在適用されているルールはステートメント画面で確認でき、追加/削除が必要な場合はシステム管理者または資産別設定画面で行ってください。
Q. EQLの結果を自動的に処理したいです。
A. フロー の資産トリガー(flow_on_asset_event/flow_on_asset_alarm など)を使用してドメインルールの結果を自動受信し、後続アクション(作業指示発行・メール・外部API呼出)へ接続できます。