트리거 표현식

Zabbix v7.4번역일: 2026-09-09원본 보기

개요

트리거에서 사용하는 표현식은 매우 유연합니다. 이를 사용해 모니터링되는 통계에 관한 복잡한 논리 테스트를 만들 수 있습니다.

단순한 표현식은 아이템에 몇 가지 파라미터와 함께 적용되는 함수를 사용합니다. 함수는 결과를 반환하며, 이 결과는 연산자와 상수를 사용해 임계값과 비교됩니다.

단순하고 유용한 표현식의 구문은 function(/host/key,parameter)<operator><constant>입니다.

예를 들면:

min(/Zabbix server/net.if.in[eth0,bytes],5m)>100K

이는 지난 5분 동안 수신 바이트 수가 항상 100킬로바이트를 초과했을 때 트리거됩니다.

구문은 완전히 동일하지만, 기능적 관점에서 트리거 표현식에는 두 가지 유형이 있습니다:

  • 문제 표현식(problem expression) - 문제 조건을 정의
  • 복구 표현식(recovery expression, 선택 사항) - 문제 해결의 추가 조건을 정의

문제 표현식만 정의하는 경우, 이 표현식은 문제 임계값과 문제 복구 임계값으로 모두 사용됩니다. 문제 표현식이 TRUE로 평가되는 즉시 문제가 발생합니다. 문제 표현식이 FALSE로 평가되는 즉시 문제가 해결됩니다.

문제 표현식과 보조 복구 표현식을 모두 정의하는 경우, 문제 해결은 더 복잡해집니다: 문제 표현식이 FALSE가 되어야 할 뿐만 아니라 복구 표현식도 TRUE가 되어야 합니다. 이는 히스테리시스(hysteresis)를 만들고 트리거 플래핑(flapping)을 방지하는 데 유용합니다.

복구 표현식에서 {TRIGGER.VALUE} 매크로를 사용하는 것은 비생산적인데, 이 표현식은 트리거가 "Problem" 상태일 때만 평가되기 때문입니다. 따라서 표현식을 평가하는 동안 {TRIGGER.VALUE}는 항상 "1"("Problem" 상태를 나타냄)로 해석됩니다.

함수

함수를 사용하면 수집된 값(평균, 최소, 최대, 합계)을 계산하고, 문자열을 찾고, 현재 시간 및 기타 요소를 참조할 수 있습니다.

지원되는 함수의 전체 목록을 확인할 수 있습니다.

일반적으로 함수는 비교를 위해 숫자 값을 반환합니다. 문자열을 반환하는 경우, = 및 <> 연산자로 비교가 가능합니다(예시 참조).

함수 파라미터

함수 파라미터를 사용해 다음을 지정할 수 있습니다:

  • 호스트 및 아이템 키(호스트 아이템 히스토리만 참조하는 함수)
  • 함수별 파라미터
  • 다른 표현식(호스트 아이템 히스토리를 참조하는 함수에는 사용 불가, 예시는 다른 표현식 참조)

호스트와 아이템 키는 /host/key 형식으로 지정할 수 있습니다.
첫 번째 파라미터에서 호스트 이름을 생략하는 것(즉, function(//key,parameter,...)과 같은 형태)은 특정 상황에서만 지원됩니다:

  • 계산 아이템(calculated items)의 수식에서
  • 표현식 매크로(expression macros)에서, 다음 위치에서 사용 가능:

이러한 상황에서는 {HOST.HOST} 매크로도 사용할 수 있습니다. {HOST.HOST<1-9>}는 Event name 필드와 "Trigger" 맵 요소의 경우 트리거 표현식 내 특정 아이템을 참조하는 데 사용될 수 있습니다. 이러한 상황에서 호스트 이름이 생략되거나 {HOST.HOST}로 대체되면, 해당 참조는 트리거 표현식의 첫 번째 아이템 또는 그래프의 첫 번째 아이템을 가리킵니다. 지원되는 상황 외에서 트리거 표현식에서 호스트 이름을 생략하면 오류가 발생합니다. Event name 매크로에서 이중 슬래시 사용 예시는 예시 18을 참조하세요.

참조되는 아이템은 지원되는 상태여야 합니다(단, 지원되지 않는 아이템에 대해서도 계산되는 nodata() 함수는 예외).

다른 트리거 표현식을 함수 파라미터로 사용하는 것은 트리거에서는 히스토리 함수가 아닌 함수로 제한되지만, 계산 아이템에서는 이 제한이 적용되지 않습니다.

함수별 파라미터

함수별 파라미터는 아이템 키 뒤에 위치하며 아이템 키와는 쉼표로 구분됩니다. 이러한 파라미터의 전체 목록은 지원되는 함수를 참조하세요.

대부분의 숫자 함수는 시간을 파라미터로 받습니다. 시간을 나타낼 때는 초 단위 또는 시간 접미사를 사용할 수 있습니다. 해시 기호(#)가 앞에 붙으면 파라미터는 다른 의미를 가집니다:

표현식 설명
sum(/host/key,10m) 지난 10분 동안 값의 합계.
sum(/host/key,#10) 마지막 10개 값의 합계.

해시 기호가 있는 파라미터는 last 함수에서는 다른 의미를 가지는데, N번째 이전 값을 나타냅니다. 예를 들어 값이 30, 70, 20, 60, 50(최신에서 가장 오래된 순서)일 때:

  • last(/host/key,#2)는 '70'을 반환합니다
  • last(/host/key,#5)는 '50'을 반환합니다
시간 이동(Time shift)

함수 파라미터로 시간 또는 값 개수를 사용해 선택적으로 시간 이동을 지원합니다. 이 파라미터를 사용하면 과거의 특정 기간 데이터를 참조할 수 있습니다.

시간 이동은 현재 시각을 지정하는 now로 시작하며, 뒤에 +N<time unit> 또는 -N<time unit>이 붙어 N만큼의 시간 단위를 더하거나 뺍니다.

예를 들어, avg(/host/key,1h:now-1d)는 하루 전 한 시간 동안의 평균값을 반환합니다.

월(M) 및 연(y) 단위로 지정하는 시간 이동은 트렌드 함수에서만 지원됩니다. 다른 함수는 초(s), 분(m), 시간(h), 일(d), 주(w) 단위를 지원합니다.

절대 시간 구간을 사용한 시간 이동

시간 이동 파라미터에서는 절대 시간 구간도 지원됩니다. 예를 들어 하루의 자정부터 자정까지, 한 주의 월요일부터 일요일까지, 한 달의 첫날부터 마지막 날까지가 있습니다.

절대 시간 구간을 위한 시간 이동은 현재 시각을 지정하는 now로 시작하며, 이후 여러 시간 연산이 이어질 수 있습니다: /<time unit> - 해당 시간 단위의 시작과 끝을 정의(예: 하루의 자정부터 자정까지), +N<time unit> 또는 -N<time unit> - N만큼의 시간 단위를 더하거나 뺌.

시간 이동 값은 0 이상일 수 있으며, 시간 구간의 최솟값은 1이라는 점에 유의하세요.

파라미터 설명
1d:now/d 어제
1d:now/d+1d 오늘
2d:now/d+1d 최근 2일
1w:now/w 지난 주
1w:now/w+1w 이번 주
다른 표현식

함수 파라미터에는 다음과 같은 구문으로 다른 표현식을 포함할 수 있습니다:

min(min(/host/key,1h),min(/host2/key2,1h)*10)

함수가 아이템 히스토리를 참조하는 경우에는 다른 표현식을 사용할 수 없다는 점에 유의하세요. 예를 들어 다음 구문은 허용되지 않습니다:

min(/host/key,#5*10)

연산자

트리거에서는 다음 연산자가 지원됩니다 (실행 우선순위 내림차순):

우선순위 연산자 정의 알 수 없는 값에 대한 참고 피연산자를 float로 강제 형변환 ^1^
1 - 단항 마이너스 **-**Unknown → Unknown 예
2 not 논리 NOT not Unknown → Unknown 예
3 * 곱셈 0 * Unknown → Unknown
(그렇습니다, Unknown이지 0이 아닙니다 - 산술 연산에서
Unknown을 잃지 않기 위함)
1.2 * Unknown → Unknown
예
< / 나눗셈 Unknown / 0 → 오류
Unknown / 1.2 → Unknown
0.0 / Unknown → Unknown
예
4 + 산술 덧셈 1.2 + Unknown → Unknown 예
< - 산술 뺄셈 1.2 - Unknown → Unknown 예
5 < 미만. 연산자 정의:

A<B ⇔ (A<B-0.000001)
1.2 < Unknown → Unknown 예
< <= 이하. 연산자 정의:

A<=B ⇔ (A≤B+0.000001)
Unknown <= Unknown → Unknown 예
< > 초과. 연산자 정의:

A>B ⇔ (A>B+0.000001)
예
< >= 이상. 연산자 정의:

A>=B ⇔ (A≥B-0.000001)
예
6 = 같음. 연산자 정의:

A=B ⇔ (A≥B-0.000001) and (A≤B+0.000001)
아니오 ^1^
< <> 같지 않음. 연산자 정의:

A<>B ⇔ (A<B-0.000001) or (A>B+0.000001)
아니오 ^1^
7 and 논리 AND 0 and Unknown → 0
1 and Unknown → Unknown
Unknown and Unknown → Unknown
예
8 or 논리 OR 1 or Unknown → 1
0 or Unknown → Unknown
Unknown or Unknown → Unknown
예

^1^ 문자열 피연산자는 다음 경우 여전히 숫자로 형변환됩니다:

  • 다른 피연산자가 숫자인 경우
  • 피연산자에 = 또는 <> 이외의 연산자가 사용된 경우

관계 연산자(<, <=, >, >=)의 경우: 형변환이 실패하면(예: ""의 경우) 표현식은 Unknown이 됩니다(문자열 비교로 대체되지 않음).

동등 연산자(=, <>)의 경우: 형변환이 실패하면 피연산자는 원시 문자열로 비교됩니다.

not, and, or 연산자는 대소문자를 구분하며 반드시 소문자여야 합니다. 또한 공백이나 괄호로 둘러싸여야 합니다.

단항 -와 not을 제외한 모든 연산자는 좌결합성(left-to-right associativity)을 가집니다. 단항 -와 not은 결합성이 없습니다(즉, --1과 not not 1 대신 -(-1)과 not (not 1)을 사용해야 합니다).

평가 결과:

  • <, <=, >, >=, =, <> 연산자는 지정된 관계가 참이면 트리거 표현식에서 '1'을, 거짓이면 '0'을 반환합니다. 피연산자 중 하나라도 Unknown이면 결과는 Unknown입니다;
  • and는 알려진 피연산자의 경우 두 피연산자가 모두 '0'과 같지 않으면 '1'을 반환하고, 그렇지 않으면 '0'을 반환합니다; 알 수 없는 피연산자의 경우 and는 한 피연산자가 '0'과 같을 때만 '0'을 반환하고, 그렇지 않으면 'Unknown'을 반환합니다;
  • or는 알려진 피연산자의 경우 두 피연산자 중 하나라도 '0'과 같지 않으면 '1'을 반환하고, 그렇지 않으면 '0'을 반환합니다; 알 수 없는 피연산자의 경우 or는 한 피연산자가 '0'과 같지 않을 때만 '1'을 반환하고, 그렇지 않으면 'Unknown'을 반환합니다;
  • 논리 부정 연산자 not의 알려진 피연산자에 대한 결과는, 피연산자 값이 '0'과 같지 않으면 '0'이고, '0'과 같으면 '1'입니다. 알 수 없는 피연산자의 경우 not은 'Unknown'을 반환합니다.

값 캐싱

트리거 평가에 필요한 값은 Zabbix 서버에 의해 캐시됩니다. 이 때문에 서버가 재시작된 후 일정 시간 동안 트리거 평가로 인해 데이터베이스 부하가 더 높아집니다. 아이템 히스토리 값이(수동으로든 하우스키퍼에 의해서든) 삭제되어도 값 캐시는 지워지지 않으므로, 서버는 트리거 함수에서 정의된 시간 구간보다 오래된 값이 되거나 서버가 재시작될 때까지 캐시된 값을 사용합니다.

캐시에 최근 데이터가 없고 함수에 정의된 조회 기간이 없는 경우, Zabbix는 기본적으로 과거 최대 1주일까지 데이터베이스를 조회해 과거 값을 가져옵니다.

트리거 예시

예시 1

Zabbix server의 프로세서 부하가 너무 높습니다.

last(/Zabbix server/system.cpu.load[all,avg1])>5

'last()' 함수를 사용해 가장 최근 값을 참조합니다. /Zabbix server/system.cpu.load[all,avg1]는 모니터링되는 파라미터의 짧은 이름을 나타냅니다. 이는 호스트가 'Zabbix server'이고 모니터링되는 키가 'system.cpu.load[all,avg1]'임을 지정합니다. 마지막으로 >5는 Zabbix server의 가장 최근 프로세서 부하 측정값이 5보다 클 때마다 트리거가 PROBLEM 상태가 됨을 의미합니다.

예시 2

www.example.com이 과부하 상태입니다.

last(/www.example.com/system.cpu.load[all,avg1])>5 or min(/www.example.com/system.cpu.load[all,avg1],10m)>2

현재 프로세서 부하가 5를 초과하거나, 지난 10분 동안 프로세서 부하가 2를 초과했을 때 이 표현식은 참입니다.

예시 3

/etc/passwd 파일이 변경되었습니다.

last(/www.example.com/vfs.file.cksum[/etc/passwd],#1)<>last(/www.example.com/vfs.file.cksum[/etc/passwd],#2)

/etc/passwd 체크섬의 이전 값이 가장 최근 값과 다를 때 이 표현식은 참입니다.

비슷한 표현식은 /etc/passwd, /etc/inetd.conf, /kernel 등 중요한 파일의 변경 사항을 모니터링하는 데 유용할 수 있습니다.

예시 4

누군가 인터넷에서 큰 파일을 다운로드하고 있습니다.

min 함수 사용:

min(/www.example.com/net.if.in[eth0,bytes],5m)>100K

지난 5분 동안 eth0에서 수신된 바이트 수가 100KB를 초과할 때 이 표현식은 참입니다.

예시 5

클러스터링된 SMTP 서버의 두 노드가 모두 다운되었습니다.

하나의 표현식에서 서로 다른 두 호스트를 사용하는 예시:

last(/smtp1.example.com/net.tcp.service[smtp])=0 and last(/smtp2.example.com/net.tcp.service[smtp])=0

smtp1.example.com과 smtp2.example.com 두 SMTP 서버가 모두 다운되었을 때 이 표현식은 참입니다.

예시 6

Zabbix agent를 업그레이드해야 합니다.

find() 함수 사용:

find(/example.example.com/agent.version,,"like","beta8")=1

Zabbix agent 버전이 beta8이면 이 표현식은 참입니다.

예시 7

서버에 접근할 수 없습니다.

count(/example.example.com/icmpping,30m,,"0")>5

지난 30분 동안 호스트 "example.example.com"에 5회 초과로 접근할 수 없었을 때 이 표현식은 참입니다.

예시 8

지난 3분 동안 하트비트(heartbeat)가 없습니다.

nodata() 함수 사용:

nodata(/example.example.com/tick,3m)=1

이 트리거를 사용하려면 'tick'이 Zabbix trapper 아이템으로 정의되어야 합니다. 호스트는 zabbix_sender를 사용해 이 아이템의 데이터를 주기적으로 전송해야 합니다. 180초 이내에 데이터가 수신되지 않으면 트리거 값이 PROBLEM이 됩니다.

참고: 'nodata'는 모든 아이템 유형에 사용할 수 있습니다.

예시 9

야간 시간대 CPU 활동.

time() 함수 사용:

min(/Zabbix server/system.cpu.load[all,avg1],5m)>2 and time()<060000

이 트리거는 야간 시간(00:00 - 06:00)에만 문제 상태로 변경될 수 있습니다.

예시 10

예외를 제외한 모든 시간대의 CPU 활동.

time() 함수와 not 연산자 사용:

min(/zabbix/system.cpu.load[all,avg1],5m)>2
and not (dayofweek()=7 and time()>230000)
and not (dayofweek()=1 and time()<010000)

이 트리거는 주간이 바뀌는 시점의 2시간(일요일 23:00 - 월요일 01:00)을 제외한 모든 시간에 문제 상태로 변경될 수 있습니다.

예시 11

클라이언트의 로컬 시간이 Zabbix server 시간과 동기화되어 있는지 확인합니다.

fuzzytime() 함수 사용:

fuzzytime(/MySQL_DB/system.localtime,10s)=0

서버 MySQL_DB의 로컬 시간과 Zabbix server 시간의 차이가 10초를 초과하면 트리거가 문제 상태로 변경됩니다. 'system.localtime'은 Zabbix agent에서 passive check로 구성되어야 하며, Zabbix agent 2에서는 active check로 구성할 수 있다는 점에 유의하세요.

예시 12

오늘의 평균 부하와 어제 같은 시간대의 평균 부하를 비교합니다(시간 이동으로 now-1d 사용).

avg(/server/system.cpu.load,1h)/avg(/server/system.cpu.load,1h:now-1d)>2

지난 한 시간의 평균 부하가 어제 같은 시간대 평균 부하의 두 배를 초과하면 트리거가 발생합니다.

예시 13

다른 아이템의 값을 사용해 트리거 임계값을 구하는 예시:

last(/Template PfSense/hrStorageFree[{#SNMPVALUE}])<last(/Template PfSense/hrStorageSize[{#SNMPVALUE}])*0.1

여유 저장 공간이 10퍼센트 아래로 떨어지면 트리거가 발생합니다.

예시 14

평가 결과를 사용해 임계값을 초과한 트리거 개수를 구하는 예시:

(last(/server1/system.cpu.load[all,avg1])>5) + (last(/server2/system.cpu.load[all,avg1])>5) + (last(/server3/system.cpu.load[all,avg1])>5)>=2

표현식 내 트리거 중 최소 2개가 문제 상태이면 트리거가 발생합니다.

예시 15

두 아이템의 문자열 값을 비교하는 예시 - 여기서 피연산자는 문자열을 반환하는 함수입니다.

문제: 서로 다른 호스트에서 Ubuntu 버전이 다르면 알림을 생성합니다

last(/NY Zabbix server/vfs.file.contents[/etc/os-release])<>last(/LA Zabbix server/vfs.file.contents[/etc/os-release])
예시 16

두 문자열 값을 비교하는 예시 - 피연산자는:

  • 문자열을 반환하는 함수
  • 매크로와 문자열의 조합

문제: DNS 쿼리의 변경 사항을 감지합니다

아이템 키는 다음과 같습니다:

net.dns.record[192.0.2.1,{$WEBSITE_NAME},{$DNS_RESOURCE_RECORD_TYPE},2,1]

매크로는 다음과 같이 정의됩니다

{$WEBSITE_NAME} = example.com
{$DNS_RESOURCE_RECORD_TYPE} = MX

일반적으로 다음을 반환합니다:

example.com           MX       0 mail.example.com

따라서 DNS 쿼리 결과가 예상 결과에서 벗어났는지 감지하는 트리거 표현식은 다음과 같습니다:

last(/Zabbix server/net.dns.record[192.0.2.1,{$WEBSITE_NAME},{$DNS_RESOURCE_RECORD_TYPE},2,1])<>"{$WEBSITE_NAME}           {$DNS_RESOURCE_RECORD_TYPE}       0 mail.{$WEBSITE_NAME}"

두 번째 피연산자를 둘러싼 따옴표에 유의하세요.

예시 17

두 문자열 값을 비교하는 예시 - 피연산자는:

  • 문자열을 반환하는 함수
  • 특수 문자 \ 와 "를 포함한 문자열 상수

문제: /tmp/hello 파일 내용이 다음과 같은지 감지합니다:

\" //hello ?\"

방법 1. 문자열을 직접 작성:

last(/Zabbix server/vfs.file.contents[/tmp/hello])="\\\" //hello ?\\\""

문자열을 직접 비교할 때 \ 와 " 문자가 어떻게 이스케이프되는지 확인하세요.

방법 2. 매크로 사용

{$HELLO_MACRO} = \" //hello ?\"

표현식에서는:

last(/Zabbix server/vfs.file.contents[/tmp/hello])={$HELLO_MACRO}
예시 18

장기간을 비교하는 예시.

문제: Exchange server의 부하가 지난달보다 10% 이상 증가했습니다

trendavg(/Exchange/system.cpu.load,1M:now/M)>1.1*trendavg(/Exchange/system.cpu.load,1M:now/M-1M)

트리거 설정의 Event name 필드를 사용해 다음과 같은 의미 있는 알림 메시지를 만들 수도 있습니다

"Load of Exchange server increased by 24% in July (0.69) comparing to June (0.56)"

이 경우 이벤트 이름은 다음과 같이 정의되어야 합니다:

Load of {HOST.HOST} server increased by {{?100*trendavg(//system.cpu.load,1M:now/M)/trendavg(//system.cpu.load,1M:now/M-1M)}.fmtnum(0)}% in {{TIME}.fmttime(%B,-1M)} ({{?trendavg(//system.cpu.load,1M:now/M)}.fmtnum(2)}) comparing to {{TIME}.fmttime(%B,-2M)} ({{?trendavg(//system.cpu.load,1M:now/M-1M)}.fmtnum(2)})

이런 유형의 문제에 대해서는 트리거 설정에서 수동 종료(manual closing)를 허용하는 것도 유용합니다.

::: note-contribute 다른 사람들에게 유용할 만한 트리거 표현식 예시가 있으신가요? Example suggestion form을 사용해 Zabbix 개발자에게 보내주세요. :::

히스테리시스

때로는 단순한 임계값이 아니라 문제 상태와 복구 상태 사이에 간격이 필요합니다. 예를 들어 서버실 온도가 20°C를 넘으면 문제를 보고하고, 온도가 15°C 아래로 떨어질 때까지 문제 상태를 유지하는 트리거를 정의하고 싶다면, 20°C의 단순한 트리거 임계값만으로는 충분하지 않습니다.

대신 먼저 문제 이벤트(온도가 20°C 초과)에 대한 트리거 표현식을 정의해야 합니다. 그런 다음 추가 복구 조건(온도가 15°C 미만)을 정의해야 합니다. 이는 트리거를 정의할 때 추가 Recovery expression 파라미터를 정의함으로써 이루어집니다.

이 경우 문제 복구는 두 단계로 이루어집니다:

  • 먼저, 문제 표현식(온도가 20°C 초과)이 FALSE로 평가되어야 합니다
  • 그다음, 복구 표현식(온도가 15°C 미만)이 TRUE로 평가되어야 합니다

복구 표현식은 문제 이벤트가 먼저 해결된 경우에만 평가됩니다.

문제 표현식이 여전히 TRUE라면, 복구 표현식이 TRUE인 것만으로는 문제가 해결되지 않습니다!

예시 1

서버실 온도가 너무 높습니다.

문제 표현식:

last(/server/temp)>20

복구 표현식:

last(/server/temp)<=15
예시 2

여유 디스크 공간이 너무 적습니다.

문제 표현식: 지난 5분 동안 10GB 미만인 경우

max(/server/vfs.fs.size[/,free],5m)<10G

복구 표현식: 지난 10분 동안 40GB 초과인 경우

min(/server/vfs.fs.size[/,free],10m)>40G

알 수 없는 피연산자가 있는 표현식

일반적으로 표현식 내 알 수 없는 피연산자(예: 지원되지 않는 아이템)가 있으면 트리거 값은 즉시 Unknown이 됩니다.

하지만 일부 경우에는 알 수 없는 피연산자(지원되지 않는 아이템, 함수 오류)가 표현식 평가에 반영됩니다:

  • nodata() 함수는 참조된 아이템이 지원되는지 여부와 관계없이 평가됩니다.
  • OR과 AND를 사용한 논리 표현식은 알 수 없는 피연산자와 관계없이 두 가지 경우에 알려진 값으로 평가될 수 있습니다:
    • 사례 1: "1 or some_function(unsupported_item1) or some_function(unsupported_item2) or ..."는 알려진 결과('1' 또는 "Problem")로 평가될 수 있습니다,
    • 사례 2: "0 and some_function(unsupported_item1) and some_function(unsupported_item2) and ..."는 알려진 결과('0' 또는 "OK")로 평가될 수 있습니다.
      Zabbix는 지원되지 않는 아이템을 알 수 없는 피연산자로 취급해 이러한 논리 표현식을 평가하려고 시도합니다. 위 두 경우에는 알려진 값("Problem" 또는 "OK")이 산출되며; 그 외의 모든 경우에는 트리거가 Unknown으로 평가됩니다.
  • 지원되는 아이템에 대한 함수 평가가 오류로 끝나면 함수 값은 Unknown이 되며, 이후 표현식 평가에서 알 수 없는 피연산자로 취급됩니다.

알 수 없는 피연산자는 위에서 설명한 것처럼 논리 표현식에서만 "사라질" 수 있다는 점에 유의하세요. 산술 표현식에서는 알 수 없는 피연산자가 항상 Unknown 결과로 이어집니다(0으로 나누는 경우는 예외).

Unknown으로 평가되는 표현식은 트리거 상태("Problem/OK")를 변경하지 않습니다. 따라서 이전 상태가 "Problem"이었다면(사례 1 참조), 알려진 부분이 해결되어('1'이 '0'이 되어) 표현식이 이제 Unknown으로 평가되더라도 트리거 상태를 변경하지 않으므로 여전히 같은 문제 상태로 유지됩니다.

지원되지 않는 아이템이 여러 개 있는 트리거 표현식이 Unknown으로 평가되면, 프런트엔드의 오류 메시지는 마지막으로 평가된 지원되지 않는 아이템을 참조합니다.