CEP (複合イベント処理)
目次
- 概要
- 画面構成 — Automation グループの EQL 画面
- クエリ画面 (
/query/index) - ステートメント画面 (
/statement/index) - トリガー画面の参考情報
- 活用シナリオ
- よくある質問
- 関連画面
概要
CEP(Complex Event Processing) 機能は、リアルタイムのイベントストリームから意味のあるパターンを検出し、即座にアクション(保存・発行・アラーム)を実行するルールエンジンです。現在、左メニューでは Automation グループの EQL クエリ と ステートメント として表示されます。
| サブメニュー | 内部 URL | 用途 |
|---|---|---|
| EQL クエリ | /query/index | EQL(Event Query Language) のアドホッククエリをリアルタイムストリームに投げ、結果をその場で確認 |
| ステートメント | /statement/index | 資産単位のドメインルール(状態/集計/イベント/コマンド)の照会 |
CEP ルールの結果は フロー の資産トリガー(flow_on_asset_event など)にも自動的に連携されます。
画面構成 — Automation グループの 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)と 1 分あたりの入力数(input_count_min)を表示 - 結果データが入り始めるとチャートが描画される。リアルタイムのラインチャート形式
- データ到着前は「チャートデータ受信待機中...」(回転アイコン)
結果テーブル (query_result_table)
| カラム | 説明 |
|---|---|
| # | 行番号 |
| 出力時刻 | EQL が結果を emit した時刻 |
| 行数 | 1 回の emit の行数 |
| データ | JSON またはテーブル形式の結果本文 |
実行を停止しない限り、結果テーブルには結果が蓄積され続けます。停止 ボタンを押すか、新しいクエリを実行すると蓄積が止まります。
トリガー画面の参考情報
独立した トリガー メニューは、現在の統合サイドバーでは無効化されています。既存の /trigger/index 画面や内部 API を運用中のインストール環境では、以下の内容をレガシー参考としてのみ利用してください。新規の自動化では フロー のトリガーノードと Automation > 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 種類のうちいずれか (上の表を参照) |
| ステートメント名 | 自動 | ルール名 |
| 説明 | 300px | ルールのメモ |
| 総実行件数 | 80px | ルールがマッチした累積回数 |
| 最終実行日時 | 120px | 直近のマッチ時刻 |
| エラー | 60px | 累積エラーカウント |
| 登録日 | 120px | ルールの登録時刻 |
| 詳細 | 50px | クリックでルール詳細表示画面(/statement/view)へ |
詳細表示
一覧の 詳細 ボタンをクリックすると別画面(/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 呼び出し)へ連携できます。