7가지 예측 트리거 기능
원본 보기7 예측 트리거 함수
개요
때때로 다가올 문제의 징후가 있습니다. 이러한 징후를 발견하여 문제를 예방하거나 최소한 문제의 영향을 최소화하기 위해 미리 조치를 취할 수 있습니다.
Zabbix는 과거 데이터를 기반으로 모니터링되는 시스템의 미래 동작을 예측할 수 있는 도구를 제공합니다. 이러한 도구는 예측 트리거 함수를 통해 구현됩니다.
함수
트리거를 설정하기 전에, 문제 상태가 무엇인지 그리고 조치를 취하는 데 얼마나 많은 시간이 필요한지 정의하는 것이 필요합니다. 그러면 잠재적인 원치 않는 상황에 대해 신호를 보내는 트리거를 설정하는 두 가지 방법이 있습니다. 첫 번째: 시스템이 "조치 시간" 후에 문제 상태에 있을 것으로 예상될 때 트리거가 발동되어야 합니다. 두 번째: 시스템이 "조치 시간"보다 적은 시간 내에 문제 상태에 도달할 때 트리거가 발동되어야 합니다. 사용할 해당 트리거 함수는 forecast와 timeleft입니다. 두 함수 모두에 대한 기본적인 통계 분석은 본질적으로 동일합니다. 비슷한 결과로 선호하는 방식으로 트리거를 설정할 수 있습니다.
매개변수
두 함수 모두 거의 동일한 매개변수 집합을 사용합니다. 참고용으로 지원되는 함수 목록을 사용하세요.
Time interval
First of all, you should specify the historic period Zabbix should
analyze to come up with the prediction. You do it in a familiar way by
means of the time period parameter and optional time shift like you do
it with avg, count, delta, max, min and sum
functions.
예측 범위
(forecast 전용)
매개변수 time은 Zabbix가 과거 데이터에서 발견한 의존성을 미래의 얼마나 먼 시점까지 추정해야 하는지를 지정합니다. time_shift를 사용하든 사용하지 않든, time은 항상 현재 시점부터 계산됩니다.
도달할 임계값
(timeleft 전용)
매개변수 threshold는 분석된 항목이 도달해야 하는 값을 지정하며,
위쪽에서든 아래쪽에서든 상관없습니다. f(t)를 결정한 후
(아래 참조), f(t) = threshold 방정식을 풀고 현재 시점에 가장 가깝고
현재 시점보다 오른쪽에 있는 근을 반환하거나, 그러한 근이 없는 경우
1.7976931348623158E+308을 반환합니다.
항목 값이 임계값에 접근한 후 이를 넘어설 때, timeleft는
교차점이 이미 과거에 있다고 가정하고 따라서 threshold 수준과의
다음 교차점이 있는 경우 해당 지점으로 전환합니다. 예측은 일반적인
문제 진단을 대체하는 것이 아니라 보완하는 용도로 사용하는 것이
모범 사례입니다.1
Fit functions
Default fit is the linear function. But if your monitored system is
more complicated you have more options to choose from.
fit |
x = f(t) |
|---|---|
| linear | x = a + b*t |
| polynomialN2 | x = a~0~ + a~1~*t + a~2~*t2 + ... + a~n~*tn |
| exponential | x = a*exp(b*t) |
| logarithmic | x = a + b*log(t) |
| power | x = a*tb |
Modes
(forecast only)
Every time a trigger function is evaluated, it gets data from the
specified history period and fits a specified function to the data. So,
if the data is slightly different, the fitted function will be slightly
different. If we simply calculate the value of the fitted function at a
specified time in the future, you will know nothing about how the
analyzed item is expected to behave between now and that moment in the
future. For some fit options (like polynomial) a simple value from
the future may be misleading.
mode |
forecast result |
|---|---|
| value | f(now + time) |
| max | max~now\ <=\ t\ <=\ now\ +\ time~ f(t) |
| min | min~now\ <=\ t\ <=\ now\ +\ time~ f(t) |
| delta | max - min |
| avg | average of f(t) (now <= t <= now + time) according to definition |
세부사항
큰 수와의 계산을 피하기 위해, 지정된 기간의 첫 번째 값의 타임스탬프에 1ns를 더한 값을 새로운 영점 시간으로 간주합니다(현재 epoch 시간은 109 정도이고, epoch의 제곱은 1018, 배정밀도는 약 10-16입니다). log(t) 계산이 포함된 logarithmic 및 power 피팅을 위해 모든 양수 시간 값을 제공하기 위해 1ns가 추가됩니다. 시간 이동은 linear, polynomial, exponential에는 영향을 주지 않지만 (더 쉽고 정확한 계산은 제외하고), logarithmic 및 power 함수의 형태를 변경합니다.
잠재적 오류
함수는 다음과 같은 상황에서 -1을 반환합니다:
- 지정된 평가 기간에 데이터가 없는 경우;
- 수학적 연산의 결과가 정의되지 않은 경우3;
- 수치적 복잡성 (일부 입력 데이터 세트의 경우 불행히도 배정밀도 부동소수점 형식의 범위와 정밀도가 불충분해짐)4.
선택된 적합이 제공된 데이터를 제대로 설명하지 못하거나 정확한 예측을 위한 데이터가 너무 적은 경우에도 경고나 오류가 표시되지 않습니다.
예제 및 오류 처리
호스트의 남은 디스크 공간이 부족해질 때 경고를 받으려면 다음과 같은 트리거 표현식을 사용할 수 있습니다:
timeleft(/host/vfs.fs.size[/,free],1h,0)}<1h
그러나 오류 코드 -1이 발생하여 트리거를 문제 상태로 만들 수 있습니다. 일반적으로 이는 예측이 올바르게 작동하지 않는다는 경고를 받을 수 있어 좋으며, 이유를 찾기 위해 더 자세히 살펴봐야 합니다. 하지만 때로는 -1이 단순히 지난 시간 동안 호스트의 여유 디스크 공간에 대한 데이터가 없었다는 의미일 수 있어 좋지 않을 수 있습니다. 너무 많은 거짓 양성 알림을 받고 있다면, 더 복잡한 트리거 표현식 사용을 고려해보세요 5:
timeleft(/host/vfs.fs.size[/,free],1h,0)<1h and timeleft(/host/vfs.fs.size[/,free],1h,0)<>-1
forecast의 경우 상황이 조금 더 복잡합니다. 우선,
-1은 forecast(/host/item,(...))<...와 같은 표현식인지
forecast(/host/item,(...))>...와 같은 표현식인지에 따라
트리거를 문제 상태로 만들 수도 있고 그렇지 않을 수도 있습니다
게다가 항목 값이 음수인 것이 정상적인 경우 -1이 유효한 예측일 수 있습니다.
하지만 실제 상황에서 이런 경우가 발생할 확률은 무시할 수 있을 정도입니다
(= 연산자가 어떻게 작동하는지 참조).
따라서 -1을 문제로 처리하려면 ... or forecast(/host/item,(...))=-1을,
문제로 처리하지 않으려면 ... and forecast(/host/item,(...))<>-1을
각각 추가하세요.
각주
1 예를 들어,
timeleft(/host/item,1h,X) < 1h와 같은 간단한 트리거는
아이템 값이 X에 접근할 때 문제 상태로 전환되었다가 값 X에 도달하면 갑자기 복구될 수 있습니다. 문제가 아이템 값이 X보다 낮은 경우라면 다음을 사용하세요:
last(/host/item) < X or timeleft(/host/item,1h,X) < 1h 문제가 아이템 값이 X보다 높은 경우라면 다음을 사용하세요:
last(/host/item) > X or timeleft(/host/item,1h,X) < 1h
2 다항식 차수는 1에서 6까지 가능하며, polynomial1은 linear와 동일합니다. 그러나 높은 차수의 다항식은 주의해서 사용하세요. 평가 기간에 다항식 계수를 결정하는데 필요한 것보다 적은 점이 포함되어 있으면, 다항식 차수가 낮아집니다(예: polynomial5를 요청했지만 4개의 점만 있는 경우, polynomial3이 적합됩니다).
3 예를 들어, exponential 또는 power 함수를 적합하는 것은 아이템 값의 log()를 계산하는 것을 포함합니다. 데이터에 0 또는 음수가 포함되어 있으면, log()는 양수에만 정의되므로 오류가 발생합니다.
4 linear, exponential, logarithmic 및 power 적합의 경우 모든 필요한 계산을 명시적으로 작성할 수 있습니다. polynomial의 경우 추가 단계 없이 value만 계산할 수 있습니다. avg를 계산하려면 다항식 부정적분을 (해석적으로) 계산해야 합니다. max, min 및 delta를 계산하려면 다항식 도함수를 (해석적으로) 계산하고 그 근을 (수치적으로) 찾아야 합니다. f(t) = 0을 풀려면 다항식 근을 (수치적으로) 찾아야 합니다.
5 그러나 이 경우 -1은 트리거가
문제 상태에서 복구되도록 할 수 있습니다. 완전히 보호하려면 다음을 사용하세요:
timeleft(/host/vfs.fs.size[/,free],1h,0)<1h and ({TRIGGER.VALUE}=0 and timeleft(/host/vfs.fs.size[/,free],1h,0)<>-1 or {TRIGGER.VALUE}=1)