본문으로 건너뛰기

CEP 개요

CEP(Complex Event Processing) 는 흘러가는 이벤트에서 «지금 일어나고 있는 일» 을 즉시 판정하는 계층입니다. 저장한 뒤에 물어보는 것이 아니라, 들어오는 동안 판정합니다.

"심각도 3 이상 알람이 뜨고 10초 안에 같은 설비에서 심각도 4 이상이 또 뜨면 승격" — "알람이 떴는데 30분 동안 해제가 안 오면 미해제로 올린다"

규칙은 EQL(PlantPulse CEP SQL) 로 씁니다.

언어가 먼저이고, 엔진은 그것을 실행할 뿐입니다​

EQL 문장
│
▼
의미 분석 ─────────► 판정 셋: SUPPORTED · UNSUPPORTED · UNPARSEABLE
│
▼
공통 IR (엔진 독립)
│
┌─────┴─────┐
▼ ▼
Aster CEP Flink
(기본) (오라클 — 운영에 쓰지 않습니다)
언어EQL 1.0 — SQL-92 코어 + 스트리밍 확장
기본 백엔드Aster CEP — KOPENS 자체 엔진 (동적 룰 배포)
Flink오라클입니다 — 같은 문장을 Aster CEP 와 함께 넣어 답을 대조하는 데 씁니다. 운영에서는 돌지 않습니다
런타임에 도는 엔진은 «언제나 하나» 입니다

부팅할 때 하나를 고르고, 문장별 라우팅도 폴백도 없습니다.

둘이 동시에 돌면 「어느 엔진이 이 결과를 냈는가」가 사라지고, 같은 입력이 두 번 발행됩니다 — 실제로 겪은 결함입니다. 차등 실행은 CI 에서 하는 것이고 운영에서 둘이 같이 도는 일은 없습니다.

폴백이 없다는 것은 «갈 곳이 없다» 는 뜻입니다

부팅한 백엔드가 못 읽는 문장은 등록 자체가 거부됩니다. 저장은 되지만 REJECTED 로 표시되고, 다른 엔진에 조용히 넘어가지 않습니다.

거부는 언제나 이름을 댑니다 — 어느 구성이 막혔는지 토큰으로 말합니다. 조용히 무시하면 문장이 계획되고 배포되고 그럴듯한 답을 냅니다.

EQL 은 무엇이고 무엇이 아닌가​

  • 다른 제품의 호환 프로젝트가 아닙니다. 다른 CEP 제품의 언어를 전부 구현하지 않습니다. 다만 오늘 살아서 도는 문장은 계속 돌아야 합니다.
  • Flink SQL 의 별명이 아닙니다. 기반은 SQL-92 이고, 스트리밍에 필요한 것만 확장합니다.
  • 백엔드가 언어를 정하지 않습니다. 언어가 먼저 있고 백엔드는 그것을 실행합니다.
PlantPulse CEP SQL (EQL)
│
├── SQL-92 SELECT · FROM · WHERE · JOIN · GROUP BY
│ (+ HAVING · ORDER BY · LIMIT · DISTINCT · CASE · CAST)
│
└── CEP 확장 WINDOW · OUTPUT … EVERY · INSERT INTO · 스트림 필터
MATCH_RECOGNIZE · pattern[...] · 부재 패턴

확장은 표준에 없는 것만 둡니다. 표준으로 표현되는 것을 새 키워드로 다시 만들지 않습니다.

데이터가 흐르는 길​

  • 입력은 Valkey 스트림, 기본 접두사 PP:CEP-IN-STREAM, 16 샤드입니다.
  • 출력은 문장마다 하나인 Valkey 토픽입니다.
  • 룰과 이벤트 타입의 정본은 PostgreSQL (cep_statement · cep_event_type)입니다.

처음 10분​

# 1. 어느 백엔드로 떴나 — 판정 지표는 «로그 한 줄» 입니다
docker exec plantpulse-datalake sh -c 'grep "CEP input path" /opt/kopens/.../system.log | tail -1'
# CEP input path: aster.

# 2. 서버가 살아 있나 (익명 readiness)
curl -fsS http://127.0.0.1:7400/api/health

# 3. 문장이 몇 개 등록됐고 몇 개가 거부됐나
curl -fsS -H "X-API-Key: ${PP_CEP_API_KEY}" http://127.0.0.1:7400/api/v1/eql/registration

# 4. 이 문장들이 다른 백엔드에서도 도나
curl -fsS -H "X-API-Key: ${PP_CEP_API_KEY}" http://127.0.0.1:7400/api/v1/eql/portability
ingest.rate_1m 은 증거가 아닙니다

어느 엔진으로 떴든 유입량은 오릅니다. 어느 백엔드가 도는지는 부팅 로그 한 줄이 답합니다.

이벤트 타입을 먼저 등록하십시오

등록되지 않은 타입 위의 문장은 컴파일되고, 배포되고, 돌면서 영영 매치하지 않습니다. 그래서 배포 시점에 거부합니다 → 이벤트 타입 등록

이 섹션의 구성​

페이지언제 보나
EQL 언어문장을 쓸 때 — 절 · 창 · 집계 · 패턴과 도는 예제
백엔드어느 엔진으로 띄울지, cep.mode 로 이식성을 어떻게 다룰지
이벤트 타입 등록새 이벤트를 CEP 에 처음 넣을 때
운영켜고 끄기 · 등록 결과 읽기 · 입출력 계약
한계와 거부 토큰등록이 거부됐을 때 그 한 줄을 여기서 찾습니다

관련 문서​