본문으로 건너뛰기

운영

CEP 는 pd 의 cep 서비스 하나입니다 — API · 콘솔 · 엔진이 같은 프로세스에 있습니다.

항목값
포트7400 (HTTP) · 7401 (TLS)
pd 서비스cep — MASTER 만
설정plantpulse-cep.properties (렌더됩니다)
룰 · 이벤트 타입PostgreSQL datalake DB
입력 · 출력Valkey
docker exec plantpulse-datalake pd status cep
docker exec plantpulse-datalake pd restart cep
docker exec plantpulse-datalake pd logs --lines 200 cep

어느 백엔드로 떴나 — 로그 한 줄이 답입니다​

CEP input path: aster.
ingest.rate_1m 은 증거가 아닙니다

어느 엔진으로 떴든 유입량은 오릅니다. 「돌고 있다」와 「무엇이 돌고 있다」는 다른 질문입니다.

백엔드를 고르는 법과 전환 순서는 백엔드에 있습니다.

등록 결과 읽기​

문장은 등록되고, 등록에는 결과가 있습니다.

curl -fsS -H "X-API-Key: ${PP_CEP_API_KEY}" http://127.0.0.1:7400/api/v1/eql/registration
결과뜻
ACTIVE부팅한 백엔드가 받았고 돌고 있습니다
REJECTED저장은 됐지만 돌지 않습니다. 어느 구성 때문인지 토큰이 함께 있습니다
REJECTED 는 «결함» 이 아니라 목록입니다

그 수가 0 이어야 정상인 것이 아닙니다. 거절된 문장은 다음에 무엇을 할지의 입력입니다 — 구성을 빼고 다시 쓰거나, 백엔드를 바꾸거나, 그 기능을 요청하거나.

중요한 것은 조용하지 않다는 점입니다. 거절은 저장되고, 이름이 있고, 조회됩니다.

이식성은 따로 묻습니다.

curl -fsS -H "X-API-Key: ${PP_CEP_API_KEY}" http://127.0.0.1:7400/api/v1/eql/portability

주요 API​

경로하는 일
POST /api/v1/eql/deploy문장 등록
POST /api/v1/eql/validate판정만
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/keysAPI 키
GET /api/health익명 readiness — 엔진 · 캐시 · 스키마
문장 지표는 매치율과 출력율입니다

서버가 문장마다 매치와 출력을 세고 위 두 엔드포인트가 냅니다. 어느 백엔드로 부팅해도 같습니다.

문장별 CPU · 벽시계 시간은 내지 않습니다 — 못 재는 값을 0 으로 내면 「빠르다」로 읽힙니다.

룰의 정본 — 의도는 DB, 사실은 엔진​

질문정본
「어떤 룰이 있어야 하나」cep_statement (datalake DB)
「어떤 룰이 돌고 있나」부팅한 엔진 자신
CREATE TABLE IF NOT EXISTS cep_statement (
statement_name VARCHAR(200) NOT NULL,
eql TEXT NOT NULL,
updated_at_ms BIGINT NOT NULL DEFAULT 0,
updated_by VARCHAR(64) NOT NULL DEFAULT '',
CONSTRAINT cep_statement_pkey PRIMARY KEY (statement_name)
);

한 문장이 한 행이고, 등록이 쓰고 해제가 지웁니다.

기술 컴포넌트가 업무 표를 읽지 않습니다

CEP 는 규칙 엔진이지 자산 관리가 아닙니다. 그래서 «무엇을 돌려야 하나» 를 자기 표에 적습니다.

enabled 컬럼이 없는 것은 의도입니다

멈추라는 신호는 행이 없는 것 하나뿐이고, 그것이 해제가 만드는 상태입니다. 언제나 참일 수밖에 없는 컬럼은 있지도 않은 스위치처럼 읽힙니다.

statement_name 이 기본키인 것도 그렇습니다 — 같은 이름이 본문 둘을 갖는 상황을 해소하지 않고 거부합니다.

updated_at_ms · updated_by 는 코드가 읽지 않습니다 — 장애 중에 psql 앞에 앉은 사람을 위한 것입니다.

표 셋(cep_statement · cep_event_type · cep_api_key)은 CEP 가 기동할 때 스스로 만듭니다. 전부 «있으면 그대로 두는» 형태라 값이 든 설치에도 그대로 적용됩니다.

입력 — Valkey 스트림​

설정기본값
스트림 접두사PP:CEP-IN-STREAM
샤드 수16 (cep.stream.shard_count)
한 번에 읽는 건수1000
TLS꺼짐 — 값은 cache.ssl.enabled 에서 옵니다
tls 기본값이 «꺼짐» 인 것은 실측 결과입니다

플랫폼 Valkey 설정에 TLS 포트 선언이 없고 평문으로 서비스합니다.

🔴 이 값이 틀리면 시끄럽게 실패하지 않습니다. 평문 서버에 TLS 로 붙었다가 핸드셰이크 타임아웃으로 죽는데, 그것은 설정 문제가 아니라 네트워크 장애처럼 읽힙니다.

실패·정체된 이벤트는 데드레터로 보존합니다 — 조용한 폐기로 되돌리지 마십시오.

출력 — 문장마다 토픽 하나​

결과는 문장 이름마다 하나인 Valkey 토픽으로 나갑니다.

  • 구독자가 0이면 로그만 남습니다. 발행은 구독자 없이도 성공하므로, 거기가 결과가 조용히 사라지는 자리입니다.
  • 재배포할 때는 컨슈머를 멈춘 뒤 레지스트리를 비웁니다. 순서가 반대면 재배포마다 데드레터가 쌓입니다.

시간대​

층값무엇이 정하나
와이어epoch ms시간대 없음. 어떤 PP_TZ 에서도 같은 수
창 경계문장 > PP_TZ > 거절WINDOW TUMBLING … AT TIME ZONE

등록 응답에 실제로 쓰인 시간대와 그 출처가 함께 나옵니다 — 「어느 자정이었나」를 나중에 되물을 수 있어야 하기 때문입니다.

JVM 시간대가 어긋나면 거절합니다

추측해서 고르지 않습니다. 조용히 고른 시간대는 배포 호스트마다 다른 답을 만듭니다.

설정 값​

키기본값무엇
cep.backendaster백엔드 — aster · flink. 설정하지 않으면 aster 로 뜹니다. 그 밖의 값(esper · siddhi 같은 옛 값 포함)은 이름을 대며 부팅이 멈춥니다
cep.modenativeportable 이면 기준 백엔드(Aster CEP)에게도 묻습니다
cep.stream.shard_count16입력 샤드
cep.consumer.thread_count16컨슈머 스레드
cep.api.max_eql_text_length100000문장 길이 상한
cep.storage.ttl_seconds864000 (10일)운영 지표 보존
cep.api.key관리 API 의 X-API-Key
cep.web.user · cep.web.password콘솔 로그인 — 비면 콘솔만 닫힙니다

값을 바꾸는 절차는 설정 바꾸는 법, 키 회전은 비밀번호 · API 키 바꾸기입니다.

컨테이너 안에서 고친 설정은 재기동에 사라집니다

정본은 배포가 렌더하는 템플릿입니다.

관련 문서​