문서
원본 보기2 트리거 표현식
개요
트리거에서 사용되는 표현식은 매우 유연합니다. 모니터링된 통계에 대한 복잡한 논리적 테스트를 생성하는 데 사용할 수 있습니다.
간단한 표현식은 일부 매개변수와 함께 항목에 적용되는 함수를 사용합니다. 함수는 연산자와 상수를 사용하여 임계값과 비교되는 결과를 반환합니다.
간단하고 유용한 표현식의 구문은 function(/host/key,parameter)<operator><constant>입니다.
예를 들어:
min(/Zabbix server/net.if.in[eth0,bytes],5m)>100K
지난 5분 동안 수신된 바이트 수가 항상 100킬로바이트를 초과한 경우 트리거됩니다.
구문은 정확히 동일하지만 기능적 관점에서 트리거 표현식에는 두 가지 유형이 있습니다:
- 문제 표현식 - 문제의 조건을 정의
- 복구 표현식 (선택사항) - 문제 해결의 추가 조건을 정의
문제 표현식만 정의할 때, 이 표현식은 문제 임계값과 문제 복구 임계값 모두로 사용됩니다. 문제 표현식이 TRUE로 평가되자마자 문제가 발생합니다. 문제 표현식이 FALSE로 평가되자마자 문제가 해결됩니다.
문제 표현식과 보완적인 복구 표현식을 모두 정의할 때, 문제 해결이 더 복잡해집니다: 문제 표현식이 FALSE여야 할 뿐만 아니라 복구 표현식도 TRUE여야 합니다. 이는 히스테리시스를 생성하고 트리거 플래핑을 방지하는 데 유용합니다.
복구 표현식에서 {TRIGGER.VALUE} 매크로를 사용하는 것은 비생산적입니다. 이 표현식은 트리거가 "문제" 상태일 때만 평가되기 때문입니다. 따라서 표현식을 평가하는 동안 {TRIGGER.VALUE}는 항상 "1"("문제" 상태를 나타냄)로 해석됩니다.
함수
함수를 사용하면 수집된 값들을 계산(평균, 최솟값, 최댓값, 합계)하고, 문자열을 찾고, 현재 시간 및 기타 요소를 참조할 수 있습니다.
지원되는 함수의 전체 목록을 확인할 수 있습니다.
일반적으로 함수는 비교를 위해 숫자 값을 반환합니다. 문자열을 반환할 때는 = 및 <> 연산자로 비교가 가능합니다(예제 참조).
함수 파라미터
함수 파라미터를 통해 다음을 지정할 수 있습니다:
- 호스트와 아이템 키 (호스트 아이템 히스토리만을 참조하는 함수)
- 함수별 파라미터
- 다른 표현식 (호스트 아이템 히스토리를 참조하는 함수에서는 사용할 수 없음, 예시는 다른 표현식 참조)
호스트와 아이템 키는 /host/key로 지정할 수 있습니다.
첫 번째 파라미터에서 호스트 이름을 생략하는 것(즉, function(//key,parameter,...)와 같이)은 특정 컨텍스트에서만 지원됩니다:
이러한 컨텍스트에서는 {HOST.HOST} 매크로를 사용할 수도 있습니다.
{HOST.HOST<1-9>}는 이벤트 이름 필드와 "트리거" 맵 요소의 경우 트리거 표현식의 특정 아이템을 참조하는 데 사용할 수 있습니다.
이러한 컨텍스트에서 호스트 이름이 생략되거나 {HOST.HOST}로 대체될 때, 참조는 트리거 표현식의 첫 번째 아이템 또는 그래프의 첫 번째 아이템을 가리킵니다.
이러한 지원되는 컨텍스트 외부에서는 트리거 표현식에서 호스트 이름을 생략하면 오류가 발생합니다.
이벤트 이름 매크로에서의 이중 슬래시 사용 예시는 예시 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'을 반환합니다
시간 이동
시간 또는 값 개수를 함수 매개변수로 사용하는 선택적 시간 이동이 지원됩니다. 이 매개변수를 사용하면 과거의 특정 기간 데이터를 참조할 수 있습니다.
시간 이동은 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 | Yes |
| 2 | not | 논리 NOT | not Unknown → Unknown | Yes |
| 3 | * | 곱셈 | 0 * Unknown → Unknown (네, Unknown입니다. 0이 아닙니다 - 산술 연산에서 Unknown을 잃지 않기 위해서입니다) 1.2 * Unknown → Unknown |
Yes |
| / | 나눗셈 | Unknown / 0 → 오류 Unknown / 1.2 → Unknown 0.0 / Unknown → Unknown |
Yes | |
| 4 | + | 산술 덧셈 | 1.2 + Unknown → Unknown | Yes |
| - | 산술 뺄셈 | 1.2 - Unknown → Unknown | Yes | |
| 5 | < | 미만. 연산자는 다음과 같이 정의됩니다: A<B ⇔ (A<B-0.000001) |
1.2 < Unknown → Unknown | Yes |
| <= | 이하. 연산자는 다음과 같이 정의됩니다: A<=B ⇔ (A≤B+0.000001) |
Unknown <= Unknown → Unknown | Yes | |
| > | 초과. 연산자는 다음과 같이 정의됩니다: A>B ⇔ (A>B+0.000001) |
Yes | ||
| >= | 이상. 연산자는 다음과 같이 정의됩니다: A>=B ⇔ (A≥B-0.000001) |
Yes | ||
| 6 | = | 같음. 연산자는 다음과 같이 정의됩니다: A=B ⇔ (A≥B-0.000001) and (A≤B+0.000001) |
No 1 | |
| <> | 같지 않음. 연산자는 다음과 같이 정의됩니다: A<>B ⇔ (A<B-0.000001) or (A>B+0.000001) |
No 1 | ||
| 7 | and | 논리 AND | 0 and Unknown → 0 1 and Unknown → Unknown Unknown and Unknown → Unknown |
Yes |
| 8 | or | 논리 OR | 1 or Unknown → 1 0 or Unknown → Unknown Unknown or Unknown → Unknown |
Yes |
1 다음의 경우에는 문자열 피연산자가 여전히 숫자로 변환됩니다:
- 다른 피연산자가 숫자인 경우
- 피연산자에 = 또는 <> 이외의 연산자가 사용되는 경우
관계 연산자 (<, <=, >, >=)의 경우: 변환에 실패하면 (예: ""에서), 표현식은 Unknown을 반환합니다 (문자열 비교 대안 없음).
등호 연산자 (=, <>)의 경우: 변환에 실패하면, 피연산자는 원시 문자열로 비교됩니다.
not, and 및 or 연산자는 대소문자를 구분하며 소문자여야 합니다. 또한 공백이나 괄호로 둘러싸여 있어야 합니다.
단항 - 및 not을 제외한 모든 연산자는 왼쪽에서 오른쪽으로의 결합성을 가집니다. 단항 - 및 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는 기본적으로 과거 일주일까지 거슬러 올라가서 데이터베이스에서 히스토리 값들을 조회합니다.
트리거 예제
Example 1
Zabbix 서버의 프로세서 로드가 너무 높습니다.
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 서버의 가장 최근 프로세서 로드 측정값이 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를 초과할 때 참이 됩니다.
Example 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인 경우 참입니다.
Example 7
서버에 접근할 수 없습니다.
count(/example.example.com/icmpping,30m,,"0")>5
호스트 "example.example.com"에 지난 30분 동안 5번 이상 접근할 수 없는 경우 표현식이 참입니다.
예제 8
지난 3분 내에 하트비트가 없음.
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)에만 문제 상태로 변경될 수 있습니다.
Example 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 서버 시간과 동기화되어 있는지 확인합니다.
fuzzytime() 함수 사용:
fuzzytime(/MySQL_DB/system.localtime,10s)=0
MySQL_DB 서버의 로컬 시간과 Zabbix 서버 시간이 10초 이상 차이날 경우 트리거가 문제 상태로 변경됩니다. 'system.localtime'은 Zabbix 에이전트에 대해 패시브 체크로 설정되어야 합니다. Zabbix agent 2에서는 액티브 체크로 설정할 수 있습니다.
Example 12
오늘의 평균 부하를 어제 같은 시간의 평균 부하와 비교 (시간 이동을 now-1d로 사용).
avg(/server/system.cpu.load,1h)/avg(/server/system.cpu.load,1h:now-1d)>2
지난 1시간의 평균 부하가 어제 같은 시간의 평균 부하보다 2배 이상 높으면 트리거가 발생합니다.
Example 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
표현식에서 최소 두 개의 트리거가 문제 상태에 있을 때 트리거가 발생됩니다.
Example 15
두 아이템의 문자열 값 비교 - 여기서 피연산자는 문자열을 반환하는 함수입니다.
문제: 서로 다른 호스트에서 Ubuntu 버전이 다를 경우 알림 생성
last(/NY Zabbix server/vfs.file.contents[/etc/os-release])<>last(/LA Zabbix server/vfs.file.contents[/etc/os-release])
Example 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}
Example 18
장기간 비교.
문제: Exchange 서버의 부하가 지난달 10% 이상 증가했습니다
trendavg(/Exchange/system.cpu.load,1M:now/M)>1.1*trendavg(/Exchange/system.cpu.load,1M:now/M-1M)
또한 트리거 설정의 이벤트 이름 필드를 사용하여 의미 있는 경고 메시지를 작성할 수 있습니다. 예를 들어 다음과 같은 메시지를 받으려면
"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)})
이런 종류의 문제에 대해서는 트리거 설정에서 수동 닫기를 허용하는 것도 유용합니다.
다른 사람들에게 유용할 수 있는 트리거 표현식 예제가 있나요? 예제 제안 양식을 사용하여 Zabbix 개발자에게 보내주세요.
히스테리시스
때로는 단순한 임계값보다는 문제 상태와 복구 상태 사이에 간격이 필요한 경우가 있습니다. 예를 들어, 서버실 온도가 20°C를 넘으면 문제를 보고하고 온도가 15°C 아래로 떨어질 때까지 문제 상태를 유지하고 싶다면, 20°C의 단순한 트리거 임계값으로는 충분하지 않습니다.
대신, 먼저 문제 이벤트에 대한 트리거 표현식(온도가 20°C를 넘는 경우)을 정의해야 합니다. 그다음 추가적인 복구 조건(온도가 15°C 미만)을 정의해야 합니다. 이는 트리거를 정의할 때 추가적인 복구 표현식 매개변수를 정의함으로써 수행됩니다.
이 경우 문제 복구는 두 단계로 이루어집니다:
- 첫 번째로, 문제 표현식(온도가 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으로 평가됩니다.
- 케이스 1: "
- 지원되는 항목에 대한 함수 평가가 오류를 발생시키면, 함수 값이
Unknown이 되고 추가 표현식 평가에서 알 수 없는 피연산자로 참여합니다.
알 수 없는 피연산자는 위에 설명된 논리 표현식에서만 "사라질" 수 있다는 점에 주의하세요.
산술 표현식에서 알 수 없는 피연산자는 항상 Unknown 결과를 가져옵니다(0으로 나누기는 제외).
Unknown으로 결과가 나오는 표현식은 트리거 상태("Problem/OK")를 변경하지 않습니다.
따라서 "Problem" 상태였다면(케이스 1 참조), 알려진 부분이 해결되더라도('1'이 '0'이 됨) 동일한 문제 상태를 유지합니다. 왜냐하면 표현식이 이제 Unknown으로 평가되고 이것은 트리거 상태를 변경하지 않기 때문입니다.
여러 지원되지 않는 항목이 있는 트리거 표현식이 Unknown으로 평가되면 프론트엔드의 오류 메시지는 마지막으로 평가된 지원되지 않는 항목을 참조합니다.