본문으로 건너뛰기

CEP (복합 이벤트 처리)

목차


개요

CEP(Complex Event Processing) 기능은 실시간 이벤트 스트림에서 의미 있는 패턴을 찾아내어 즉시 액션(저장·발행·알람)을 수행하는 룰 엔진입니다. 현재 좌측 메뉴에서는 Automation 그룹의 EQL 쿼리스테이트먼트로 노출됩니다.

하위 메뉴내부 URL용도
EQL 쿼리/query/indexEQL(Event Query Language) 임시 쿼리를 실시간 스트림에 던져 결과를 즉시 보기
스테이트먼트/statement/index자산 단위 도메인 룰(상태/집계/이벤트/명령) 조회

CEP 룰의 결과는 플로우 의 자산 트리거(flow_on_asset_event 등)로도 자동 연결됩니다.


화면 구성 — Automation 그룹의 EQL 화면

화면주된 사용자한줄 요약
쿼리운영 분석가EQL 한 줄을 즉시 실행해 실시간 스트림에서 결과 보기
스테이트먼트운영자자산에 등록된 도메인 룰의 상태와 실행 통계 조회

쿼리 화면 (/query/index)

EQL 임시 쿼리를 작성하고 ▶ 버튼으로 즉시 실행해 실시간 스트림에서 결과를 보는 화면입니다.

상단 — 쿼리 저장·이력

🔍 쿼리 [💾 이 쿼리를 저장] [↩ 마지막 쿼리] [▼ 이력 ▼]
버튼동작
이 쿼리를 저장saveQueryHistory() — 현재 EQL 을 즐겨찾기 저장
마지막 쿼리loadLastQuery() — 가장 최근 실행 쿼리 불러오기
이력 드롭다운loadQueryHistory() — 저장한 쿼리 이력을 드롭다운으로 표시(최대 400px 스크롤)

상단 또는 좌측 메뉴 EQL 입력창에서 작성한 쿼리는 이 화면으로 자동 전달되어 실행할 수 있습니다.

EQL 입력 패널

검은 보더의 큰 입력 박스(textarea[name=epl], 높이 8행) + 우상단 두 개 아이콘.

아이콘동작
▶ (재생, 흰색)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 한 시각
행수한 emit 의 행 수
데이터JSON 또는 표 형태의 결과 본문

실행을 중지하지 않으면 결과 테이블이 계속 누적됩니다. 중지 버튼을 누르거나 새 쿼리를 실행하면 누적이 멈춥니다.


트리거 화면 참고

별도 트리거 메뉴는 현재 통합 사이드바에서 비활성화되어 있습니다. 기존 /trigger/index 화면이나 내부 API를 운영 중인 설치 환경에서는 아래 내용을 레거시 참고로만 사용하세요. 신규 자동화는 플로우 의 트리거 노드와 Automation > EQL 쿼리 / 스테이트먼트 흐름을 우선 사용합니다.

EQL 매칭 결과를 외부 메시지 채널로 발행하거나 스토리지에 저장하는 사용자 정의 트리거를 관리합니다.

상단 도구

⚡ 트리거 [➕ 트리거 추가] [↻]

목록 테이블

목록 패널 헤더 우측에는 선택된 트리거 배치 / 해제 / 모두 재배치 3개 버튼이 있습니다.

컬럼설명
선택50px일괄 배치/해제용 체크박스
상태80px배치/해제 뱃지
트리거 ID110px시스템 자동 부여 ID
트리거 명 | 설명자동운영자 지정 메타
MQ 스트리밍70pxMQ 발행 사용 여부 (Y/N)
스토리지 저장70px결과를 스토리지에 적재 사용 여부 (Y/N)
전체 실행 건수70px누적 매칭 건수
마지막 실행 일자110px가장 최근 매칭 시각
에러70px누적 에러 카운트
등록일110px등록 시각
마지막 수정일110px마지막 수정 시각
액션80px수정·삭제 버튼

페이지 하단에는 안내 박스가 표시됩니다.

사용자 정의 트리거의 사용 특정 조건에 해당할 시 액션을 수행하는 사용자 정의 트리거를 추가할 수 있습니다. 추가로 이를 MQ를 통해 스트리밍하거나 스토리지에 저장할 수 있습니다.

트리거 추가/수정 양식

상단 트리거 추가 버튼으로 양식 화면(/trigger/form)으로 이동합니다.

1) 기본 정보 fieldset

입력path비고
트리거 IDtrigger_id200px읽기 전용 — 시스템 자동 부여
트리거 명trigger_name450px사람이 식별하기 쉬운 이름
설명trigger_desc600 × 100px (textarea)트리거 용도

2) EQL fieldset

입력path설명
EQLepl8행 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 (체크박스)결과 데이터를 스토리지에 적재할지

스토리지 테이블명·컬럼 정의 영역은 트리거 결과 저장 테이블이 고정되어 현재 비활성화 상태입니다.

폼 제출

버튼동작
목록(☰)트리거 목록 화면으로 돌아가기
저장 (파랑)입력 검증 후 저장. 저장만으로는 아직 배치되지 않으며, 목록 화면에서 선택된 트리거 배치 를 눌러야 실제 동작 시작

모두 재배치

버튼위치동작
모두 재배치목록 패널 헤더 우측 (🔁)등록된 모든 트리거를 일괄 재배치. 룰 엔진 재시작 후 또는 시스템 점검 후 사용

운영 절차

  1. 트리거 추가 → EQL·스트리밍·스토리지 옵션 입력 → 저장
  2. 목록에서 해당 트리거 체크 → 선택된 트리거 배치 클릭 → 상태가 "배치" 로 변경
  3. 운영 중 잠시 멈추려면 해제 클릭 → 상태가 "해제" 로 변경
  4. 점검 후 모두 재배치 로 일괄 재가동

스테이트먼트 화면 (/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활성/비활성 뱃지
적용된 에셋 ID150px룰이 부여된 자산 식별자
타입80px4가지 타입 중 하나 (위 표 참고)
스테이트먼트명자동룰 이름
설명300px룰 메모
전체 실행 건수80px룰이 매칭된 누적 횟수
마지막 실행 일자120px가장 최근 매칭 시각
에러60px누적 에러 카운트
등록일120px룰 등록 시각
상세50px클릭 시 룰 상세 보기 화면(/statement/view)

상세 보기

목록의 상세 버튼을 클릭하면 별도 화면(/statement/view/{asset_id}/{statement_name}) 으로 이동해 다음을 볼 수 있습니다(아래 스테이트먼트 상세 화면 참고).

  • 룰의 EQL 본문
  • 실행 결과 이력
  • 실행 트렌드/집계
  • 분석 성능 트렌드
  • 상태 이력

스테이트먼트 상세 화면

상세 버튼으로 진입하는 분석 뷰(statement/view.jsp, 715줄). 한 룰의 모든 운영 정보를 한 화면에 모았습니다.

상단 — 식별 헤더

√ 스테이트먼트 | {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 호출)으로 연결할 수 있습니다.


관련 화면