가상 태그 운영
개요
가상 태그는 다른 태그 값으로 계산해 만드는 태그입니다. 무엇이고 어떻게 만드는지는 사용자 가이드의 가상 태그에 있습니다. 이 페이지는 관리자가 알아야 할 것 — 계산이 어디서 돌고, 언제 배포되고, 실패가 어디에 남고, 무엇이 성능을 좌우하는지 — 만 다룹니다.
계산 하나 = CEP 문장 하나
태그의 계산 탭에 넣은 EQL 은 CEP 에 문장 하나로 배포됩니다.
| 항목 | 값 |
|---|---|
| 문장 ID | CALCULATION_ + 태그 ID (예: CALCULATION_TAG_V_FILTER_DP) |
| 켜고 끄는 값 | 태그의 use_calculation — 계산 탭의 적용 여부 |
| 결과가 가는 곳 | 결과 행 하나가 그 태그의 포인트 하나가 되어 수집 값과 같은 파이프라인으로 들어갑니다 — 저장 · 알람 · 다른 계산이 일반 태그처럼 읽습니다 |
| 결과 처리 | 문장이 결과를 내면 비동기 작업자가 포인트로 바꿔 파이프라인에 넣습니다 |
계산 결과는 CEP 로 다시 들어가는 것이 허용된 유일한 CEP 결과입니다. 다른 CEP 결과는 CEP 입구에서 되돌려 받지 않습니다. 그래서 가상 태그를 원본으로 읽는 가상 태그(연쇄)가 됩니다 — 대신 계산이 자기 자신을 읽는지는 저장 때 검사하지 않습니다. 순환을 만들면 문장이 자기 출력을 다시 읽게 됩니다.
언제 배포되나
| 때 | 동작 | 실패하면 |
|---|---|---|
계산 탭 저장 · V5 PATCH /api/v5/tag/{tag_id}/calculation | 문장을 컴파일해 본 뒤 저장하고, 옛 문장을 내리고 새 문장을 올립니다 | 컴파일이 안 되면 저장하지 않습니다. 저장은 됐는데 배포가 안 되면 응답이 실패입니다 — 배포되지 않은 문장을 성공으로 알리지 않습니다 |
| 서버 기동 | use_calculation 이 켜진 태그 전부를 동시에 4개씩 배포합니다 | 그 태그만 건너뛰고 나머지를 계속 배포합니다. 그 태그의 진단 «계산 태그 배치 실패» 가 켜집니다 — 아래 |
| 태그 삭제 | 그 태그의 계산 문장을 내리고, 그 태그의 알람 설정을 지웁니다 | 한 단계가 실패해도 다음 단계와 DB 삭제는 계속됩니다 |
| 연결 삭제 | 그 연결의 태그 전부(가상 태그 포함)의 계산 · 집계 · 알람을 내린 뒤 태그와 함께 지웁니다 | — |
저장이 거부되면 — 422
계산 탭 저장에서 문장이 컴파일되지 않으면 HTTP 422 로 거부되고, 원인이 화면에 그대로 나옵니다.
| 어디에 | 무엇이 |
|---|---|
| EQL 편집기 바로 아래 안내 상자 | 제목 «EQL 을 읽을 수 없습니다», 위치 칩 «N줄 M칸», 원인 문장과 힌트, 접힌 엔진 원문 보기. 커서가 그 자리로 옮겨 갑니다(위치가 없으면 칩 없이 문장만). 토스트는 따로 뜨지 않습니다 |
서버의 문장(V5 응답의 detail) | «EQL 컴파일 실패 (N줄 M칸): …» — 위치가 없으면 «EQL 컴파일 실패: …» |
| V5 응답의 확장 칸 | reason = eql.compile, cause · compiler_message = 정리한 컴파일러의 문장, engine_message = 엔진의 원래 문장, line · col = 1부터 센 위치 |
CEP 가 떠 있지 않아 검사할 수 없으면 HTTP 503 이고 토스트에
«CEP 엔진에 연결할 수 없어 EQL 을 검증하지 못했습니다.» 가 뜹니다 — 문장의 잘못이 아니므로 편집기에는 표시하지 않습니다.
서버 로그에는 거부가 Tag calculation refused: tag_id=[…] 로, CEP 를 못 만난 저장이
Tag calculation not saved - CEP could not check the EQL 로 남습니다.
같은 모양이 EQL 을 받는 다른 입구에도 똑같이 적용됩니다.
| 입구 | |
|---|---|
| 콘솔 | 태그 계산 탭 · 에셋 스테이트먼트 추가/수정 · 플러그인 스테이트먼트 · 알람 설정 저장 · [EQL 실행] 검사 · 쿼리 실행 |
| V5 | 태그 계산식 · 에셋 스테이트먼트 · 알람 설정 · 쿼리 컴파일/실행 |
검사하지 않은 EQL 은 DB 에 저장하지 않는 것이 규칙입니다. CEP 를 재기동하는 동안 계산 탭 저장이 실패하는 것은 정상이고, CEP 가 뜬 뒤 다시 저장하면 됩니다.
실패는 진단에 남는다
계산이 실패하면 진단에 두 종류로 남습니다.
| 코드 | 이름 · 종류 · 심각도 | 메시지 | 언제 |
|---|---|---|---|
diagnostic.tag.calculation_deploy_failed | 계산 태그 배치 실패 · 상태 · ERROR | 태그 {target} 의 계산을 적용하지 못했습니다({operation}): {error} | 저장된 계산식을 기동이나 재배치 때 엔진에 올리지 못했을 때. 태그마다 하나 켜지고, 고쳐서 배치되면 저절로 풀립니다 |
diagnostic.tag.calculation_listener_failing | 상태 · ERROR | 태그 {target} 의 계산이 실패합니다. | 문장이 낸 결과를 포인트로 바꾸다 실패할 때. 다음 결과가 성공하면 풀립니다 |
계산 태그 배치 실패의 {error} 에는 엔진이 거절한 문장이, 진단 인자 line · col 에는 그 위치가 들어 있습니다.
진단 화면의 상세 패널에는 «고칠 화면 열기» 링크가 있어 그 태그의 설정 양식으로 바로 갑니다 — 계산 탭에서
고쳐 저장하면 다시 배치되고 진단이 풀립니다. diagnostic.infra.component_unreachable(cep) 가 함께 켜져 있으면 CEP 부터 살리세요.
저장된 EQL 이 배치되지 않으면 돌지 않으므로, 같은 진단이 대상마다 하나씩 EQL 을 쓰는 다른 곳에도 있습니다.
| 코드 | 이름 | 대상 | «고칠 화면 열기» 가 여는 곳 |
|---|---|---|---|
diagnostic.tag.calculation_deploy_failed | 계산 태그 배치 실패 | 태그 | 태그 설정 양식 |
diagnostic.tag.alarm_deploy_failed | 태그 알람 배치 실패 | 알람 설정 ID (태그는 tag_id) | 알람 설정 양식 |
diagnostic.asset.statement_deploy_failed | 설비 스테이트먼트 배치 실패 | asset_id/statement_name | 그 에셋의 스테이트먼트 탭 |
결과 행에 timestamp · value · quality · error_code 중 하나가 없거나 value 가 비어
있으면 오류가 아니라 경고 로그를 남기고 그 결과를 버립니다. 가상 태그에 값이 안 생기는데
진단이 조용하다면 서버 로그에서 Calculated point validation failed 를 찾으세요.
성능
| 무엇 | 왜 |
|---|---|
| 가상 태그 수 = CEP 문장 수 | 가상 태그 하나마다 문장이 하나 더 돕니다. 같은 값을 여러 가상 태그가 따로 계산하지 않게 합니다 |
| 원본마다 붙는 창은 작게 | 원본 둘 이상을 짝지으면 창 안의 값끼리 조합이 만들어집니다. win:length(1) 은 최신 값 하나씩이라 조합이 하나뿐이지만, 시간 창을 크게 잡으면 조합이 곱으로 늘어납니다 |
OUTPUT LAST EVERY n | 원본 어느 쪽에 값이 와도 다시 계산하므로, 원본이 많고 빠를수록 결과가 잦아집니다. 이 절은 간격마다 마지막 하나만 내보내는 비율 제한입니다 — 결과가 곧 저장되는 포인트이므로 저장량도 함께 줄어듭니다 |
| 기동 시간 | 기동할 때 계산 문장을 동시에 4개씩 배포합니다. 가상 태그가 많으면 기동 뒤 계산이 모두 돌기까지 시간이 걸립니다 |
한계
| 항목 | 내용 |
|---|---|
| 원본 태그 수 상한 | 제품에 정해진 상한은 없습니다 |
| 연쇄(가상 태그의 가상 태그) | 됩니다 |
| 순환 · 자기 참조 검사 | 없습니다 — 저장 때 잡히지 않습니다 |
| 계산식 길이 | V5 API 로 넣을 때 4,000자 |
| 문법 | 부팅한 CEP 백엔드가 받는 문장만 배포됩니다 — CEP — 백엔드 |
설정 키
가상 태그 계산만을 위한 설정 키는 없습니다. 계산 문장이 어느 엔진에서 도는지는 CEP 의
cep.backend 가 정합니다(CEP — 백엔드).
관련 문서
- 가상 태그 — 사용자 가이드: 만들기 · 예 · 알람
- 진단 — 계산 실패가 남는 곳
- 성능 튜닝
- CEP — 한계와 거부 토큰