본문으로 건너뛰기

가상 태그 운영

개요​

가상 태그는 다른 태그 값으로 계산해 만드는 태그입니다. 무엇이고 어떻게 만드는지는 사용자 가이드의 가상 태그에 있습니다. 이 페이지는 관리자가 알아야 할 것 — 계산이 어디서 돌고, 언제 배포되고, 실패가 어디에 남고, 무엇이 성능을 좌우하는지 — 만 다룹니다.


계산 하나 = CEP 문장 하나​

태그의 계산 탭에 넣은 EQL 은 CEP 에 문장 하나로 배포됩니다.

항목값
문장 IDCALCULATION_ + 태그 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태그 계산식 · 에셋 스테이트먼트 · 알람 설정 · 쿼리 컴파일/실행
CEP 가 내려가 있으면 계산식을 저장할 수 없다

검사하지 않은 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 — 백엔드).


관련 문서​