문서
원본 보기7 예측 트리거 함수
개요
때로는 다가올 문제의 징후가 있습니다. 이러한 징후를 발견하여 문제를 예방하거나 최소한 문제의 영향을 최소화하기 위해 미리 조치를 취할 수 있습니다.
Zabbix는 과거 데이터를 기반으로 모니터링되는 시스템의 미래 동작을 예측할 수 있는 도구를 제공합니다. 이러한 도구는 예측 트리거 함수를 통해 구현됩니다.
함수
트리거를 설정하기 전에 문제 상태가 무엇인지, 그리고 조치를 취하는 데 얼마나 많은 시간이 필요한지를 정의해야 합니다. 그런 다음 잠재적으로 원치 않는 상황에 대해 신호를 보내는 트리거를 설정하는 두 가지 방법이 있습니다. 첫 번째: "조치 시간" 후에 시스템이 문제 상태에 있을 것으로 예상될 때 트리거가 발생해야 합니다. 두 번째: 시스템이 "조치 시간"보다 짧은 시간 내에 문제 상태에 도달할 때 트리거가 발생해야 합니다. 사용할 해당 트리거 함수는 forecast와 timeleft입니다. 두 함수의 기본 통계 분석은 기본적으로 동일하다는 점에 유의하세요. 유사한 결과로 선호하는 방식으로 트리거를 설정할 수 있습니다.
매개변수
두 함수 모두 거의 동일한 매개변수 세트를 사용합니다. 참조를 위해 지원되는 함수 목록을 사용하세요.
시간 간격
먼저, 예측을 위해 Zabbix가 분석해야 하는 과거 기간을 지정해야 합니다. avg, count, delta, max, min 및 sum 함수에서 하는 것처럼 time period 매개변수와 선택적 시간 이동을 사용하여 익숙한 방식으로 이를 수행합니다.
예측 범위
(forecast 전용)
매개변수 time은 Zabbix가 과거 데이터에서 찾은 의존성을 얼마나 멀리 미래로 외삽해야 하는지를 지정합니다. time_shift를 사용하든 사용하지 않든, time은 항상 현재 시점부터 계산됩니다.
도달할 임계값
(timeleft 전용)
매개변수 threshold는 분석된 항목이 도달해야 하는 값을 지정하며, 위에서 또는 아래에서 도달하는지는 차이가 없습니다. f(t)를 결정했으면 (아래 참조), f(t) = threshold 방정식을 풀고 현재에 더 가깝고 현재의 오른쪽에 있는 근을 반환하거나, 그러한 근이 없으면 1.7976931348623158E+308을 반환합니다.
항목 값이 임계값에 접근하여 이를 교차할 때, timeleft는 교차가 이미 과거에 있었다고 가정하고 따라서 threshold 수준과의 다음 교차로 전환합니다(있는 경우). 예측은 일반적인 문제 진단의 대체가 아닌 보완으로 사용하는 것이 모범 사례입니다.1
맞춤 함수
기본 fit은 linear 함수입니다. 하지만 모니터링되는 시스템이 더 복잡하다면 선택할 수 있는 더 많은 옵션이 있습니다.
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 |
모드
(forecast 전용)
트리거 함수가 평가될 때마다 지정된 히스토리 기간에서 데이터를 가져와 지정된 함수를 데이터에 맞춥니다. 따라서 데이터가 약간 다르면 맞춰진 함수도 약간 달라집니다. 미래의 지정된 시간에서 맞춰진 함수의 값을 단순히 계산하면, 분석된 항목이 지금과 미래의 그 순간 사이에 어떻게 행동할 것으로 예상되는지 알 수 없습니다. 일부 fit 옵션(polynomial과 같은)의 경우 미래의 단순한 값은 오해를 불러일으킬 수 있습니다.
mode |
forecast 결과 |
|---|---|
| value | f(now + time) |
| max | max~now\ <=\ t\ <=\ now\ +\ time~ f(t) |
| min | min~now\ <=\ t\ <=\ now\ +\ time~ f(t) |
| delta | max - min |
| avg | 정의에 따른 f(t)의 평균 (now <= t <= now + time) |
세부사항
큰 수와의 계산을 피하기 위해, 지정된 기간의 첫 번째 값의 타임스탬프에 1 ns를 더한 것을 새로운 0-시간으로 간주합니다 (현재 epoch 시간은 109 정도이고, epoch 제곱은 1018이며, 이중 정밀도는 약 10-16입니다). log(t) 계산을 포함하는 logarithmic 및 power 맞춤에 대해 모든 양의 시간 값을 제공하기 위해 1 ns가 추가됩니다. 시간 이동은 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)