Zabbix Documentation 3.0

2.23.04.04.2 (current)In development:4.4 (devel)Unsupported:1.82.02.43.23.4

User Tools

Site Tools


ru:manual:config:triggers:prediction

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
ru:manual:config:triggers:prediction [2015/12/22 23:36]
dotneft
ru:manual:config:triggers:prediction [2015/12/23 22:30] (current)
dotneft
Line 1: Line 1:
-==== 8 Функции предсказания триггеров ====+==== 8 Прогнозирующие функции триггеров ====
  
 === Обзор === === Обзор ===
  
-{{http://​2016-god.com/​wp-content/​uploads/​2015/​01/​vanga-pic.jpg}}+Иногда имеются признаки надвигающейся проблемыЭти признаки можно заметить,​ поэтому можно заблаговременно предпринять меры, чтобы предотвратить или хотя бы уменьшить влияние проблемы.
  
-Временами есть знаки о предстоящих ​событиях. Эти знаки могут быть обозначены так что ​действия могут быть выполнены в для ​предотвращения либо как минимум для уменьшения воздействия проблемы. +В Zabbix имеются средства прогнозирования будущего поведения наблюдаемой системы на основе исторических данных. Эти средства реализованы ​в виде прогнозирующих ​функций триггеров.
- +
- +
-Zabbix имеет инструменты для предсказания будущего поведения наблюдаемой системы на основе исторических данных. Эти ​инструменты реализованы ​через функции предсказания ​триггеров.+
  
 === - Функции === === - Функции ===
  
-Две вещи нужно знать, это как определить ​проблемное ​состояние и сколько времени нужно ​для получения ​действия. Далее есть два пути настроить триггер сигнализирующий о потенциально нежелательной ситуации. Первый:​ триггер должен "пожечься"​ когда система после "времени ​действия" как ожидается будет в проблемном ​состоянии. Второй:​ триггер должен "поджечься" ​когда ​система ​собирается достигнуть ​проблемного состояния ​в промежуток ​менее чем "время ​действия"​. ​Соответсвующие ​функции триггеров используются это **forecast** и **timeleft*. Обратите внимание что лежащая в основе статистический анализ ​является ​в основном идентичным для обоих функций. Вы можете настроить триггер предпочтительным вам способом с похожими результатами.+Необходимо знать две вещи, а именно токак описать состояние ​проблемы ​и сколько времени нужночтобы предпринять меры. Далее есть два ​способа создать триггерсигнализирующий о возможной нежелательной ситуации. Первый:​ триггер должен "загореться"​когда система после "пора действовать"как ожидаетсябудет в состоянии ​проблема. Второй:​ триггер должен "загореться"​, если ​система ​перейдет в состояние проблемы за время меньшечем "пора действовать"​. ​Необходимо воспользоваться ​функциями триггеров, а именно **forecast** и **timeleft** соответсвенно. Надо заметить, ​что лежащий в основе статистический анализв основном идентичен у этих ​двух функций. Вы можете настроить триггер ​в зависимости от того, какой путь более ​предпочтителен для ​васи результаты будут ​идентичны.
  
 === - Параметры === === - Параметры ===
  
-Обе функции используют почти одинаковый набор параметров. ​Используйте перечень [[ru:manual/​appendix/​triggers/​functions|поддерживаемых функций]] ​для уточнения.+Обе функции используют почти одинаковый набор параметров. ​Обратитесь к списку ​[[ru/manual/​appendix/​triggers/​functions|поддерживаемых функций]] ​за справкой.
  
 == - Интервал времени == == - Интервал времени ==
  
-В первую очередь вы должны определить период ​времени ​исторических данных ​которые Zabbix должен анализировать для ​предсказания. ​Вы можете сделать это ​знакомым способом ​определив параметр ''​время''​ и опционально ''​сдвиг_времени'' ​как вы это делаете ​с функциями **avg**, **count**, **delta**, **max**, **min** ​and **sum**. +Прежде всего вам ​необходимо указать период историикоторый Zabbix должен ​проанализировать для составления ​прогнозаСделайте это ​привычным способом при ​помощи ​параметров ''​sec''​ или ''#​num'' ​и необязательного ''​сдвиг_времени'' ​по аналогии ​с функциями **avg**, **count**, **delta**, **max**, **min** ​и **sum**.
- +
-== - Промежуток времени для предсказания ==+
  
-олько для **forecast** )\\ Параметр ''​время'' ​определяет как долго в будущем Zabbix должен ​предполагать зависимости ​которые он находит в данных истории. Не важно используете ли вы ''​time_shift''​ или нет, ''​time''​ всегда отсчитывается ​начиная с текущего момента.+== - Горизонт предсказания ​==
  
 +(Только **forecast**)\\ Параметр ''​время''​ определяет,​ насколько далеко в будущее Zabbix будет экстраполировать зависимости,​ которые ему удастся найти в исторических данных. Независимо о того, используете ли вы ''​сдвиг_времени''​ или нет, ''​время''​ всегда отсчитывается от текущего момента.
  
-== - Порог достижения ​==+== - Достигаемый порог ​==
  
-(**timeleft** ​only)\\ Parameter ​''​threshold'' ​specifies a value the analysed item has to reachno difference if from above or from belowOnce we have determined ​f(t) (see belowwe should solve equation f(t) =  ​f(t) = ''​threshold'' ​and return the root which is closer to now and to the right from now or 999999999999.9999 ​if there is no such root.+(Только ​**timeleft**)\\ ​Параметр ​''​порог'' ​определяет значениекоторого должен достичь анализируемый элемент данных,​ нет никакой разницы,​ сверху или снизуПосле того, как мы определили ​f(t) (смотри ниже), мы должны решить уравнение ​f(t) = ''​порог'' ​и вернуть ближайший к текущему моменту корень,​ который находится справа от текущего момента,​ или вернуть ​999999999999.9999, если таковых корней нет.
  
-<note tip>When item values approach the threshold and then cross it, **timeleft** ​assumes that intersection is already in the past and therefore switches to the next intersection with ''​threshold'' ​levelif anyBest practice should be to use predictions as a complement to ordinary problem diagnosticsnot as a substitution.((For examplea simple trigger like <​code>​{host:​item.timeleft(1h,,​X)} < 1h</​code> ​may go into problem state when the item value approaches ​and then suddenly recover once value is reachedIf the problem is item value being below use: <​code>​{host:​item.last()} < X or {host:​item.timeleft(1h,,​X)} < 1h</​code> ​If the problem is item value being above use: <​code>​{host:​item.last()} > X or {host:​item.timeleft(1h,,​X)} < 1h</​code>​))</​note>​ +<note tip>Когда значения элемента данных приближаются к порогу,​ а затем пересекают его, **timeleft** ​делает вывод, что пересечение уже находится в прошлом,​ и поэтому переключается на следуещее пересечение с уровнем ​''​порога'', ​если таковое имеетсяНаилучшим решением яляется использование прогнозирований наряду с обычными диагностиками проблема не заменой одним на другое.((Напримерпростой триггер наподобие ​<​code>​{host:​item.timeleft(1h,,​X)} < 1h</​code> ​может перейти в состояние проблемы,​ когда элемент данных приближается к X, и неожиданно "​самоустраниться",​ как только значение ​достигнутоЕсли проблема выражается в том, что значение элемента данных меньше ​X, используйте: <​code>​{host:​item.last()} < X or {host:​item.timeleft(1h,,​X)} < 1h</​code> ​Если проблема заключается в том, что значение элемент данных больше ​X, используйте: <​code>​{host:​item.last()} > X or {host:​item.timeleft(1h,,​X)} < 1h</​code>​))</​note>​ 
-== - Fit functions ​==+== - Функции аппроксимации ​==
  
-Default ​''​fit'' ​is the //​linear// ​functionBut if your monitored system is more complicated you have more options to choose from.+По умолчанию ​''​аппроксимация'' ​является линейной (//linear//) функциейЕсли наблюдаемая система более сложная,​ вы можете выбрать один из следующих вариантов.
  
-^ ''​fit''​ ^ x = f(t) ^ +^ ''​аппроксимация''​ ^ x = f(t) ^ 
-|//linear// |x = a + b*t | +|линейная (//linear//|x = a + b*t | 
-|//​polynomialN//​((Polynomial degree can be from to 6, //​polynomial1// ​is equivalent to //​linear//​. ​Howeveruse higher degree polynomials ​[[https://​en.wikipedia.org/​wiki/​Runge'​s_phenomenon|with caution]]. If the evaluation period contains less points than needed to determine polynomial coefficientspolynomial degree will be lowered ​(e.g //​polynomial5// ​is requestedbut there are only pointstherefore ​//​polynomial3// ​will be fitted).)) |x = a<​sub>​0</​sub>​ + a<​sub>​1</​sub>​*t + a<​sub>​2</​sub>​*t<​sup>​2</​sup>​ + ... + a<​sub>​n</​sub>​*t<​sup>​n</​sup>​ | +|полином (//​polynomialN//​)((Степень многочлена может быть от до 6, при этом функция ​//​polynomial1// ​равнозначна ​//​linear//​. ​Однакоиспользовать полиномы высоких степеней следует ​[[https://​en.wikipedia.org/​wiki/​Runge'​s_phenomenon|с осторожностью]]. Если период вычисления содержит меньше точекчем требуется для определения коэффициентов полинома,​ степень полинома понизится ​(например,​ запрашивается ​//​polynomial5//, ​но есть только ​точкипоэтому для аппроксимации будет использована ​//​polynomial3//​).)) |x = a<​sub>​0</​sub>​ + a<​sub>​1</​sub>​*t + a<​sub>​2</​sub>​*t<​sup>​2</​sup>​ + ... + a<​sub>​n</​sub>​*t<​sup>​n</​sup>​ | 
-|//​exponential//​ |x = a*exp(b*t) | +|экспоненциальная (//​exponential//​|x = a*exp(b*t) | 
-|//​logarithmic//​ |x = a + b*log(t) | +|логарифмическая (//​logarithmic//​|x = a + b*log(t) | 
-|//power// |x = a*t<​sup>​b</​sup>​ |+|степенная (//power//|x = a*t<​sup>​b</​sup>​ |
  
-== - 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 dataSoif the data is slightly different the fitted function will be slightly differentIf we simply calculate the value of the fitted function at a specified time in the future you will know nothing about how the analysed item is expected to behave between now and that moment in the futureFor some ''​fit'' ​options ​(like //​polynomial//​) ​a simple value from the future may be misleading.+(Только ​**forecast**)\\ ​Каждый раз, когда вычисляется функция триггера,​ данные запрашиваются из указанного периода истории и по полученным данным строится указанная аппроксимацияПоэтомуесли данные немного изменятся,​ то и построенная аппроксимация немного изменитсяЕсли мы будем просто рассчитывать значение аппроксимирующей функции в заданный момент времени в будущем,​ то вы ничего не будете знать о том, как согласно прогнозу будет меняться анализируемый элемент данных между текущим моментом и этим моментом в будущемПри некоторых параметрах ​''​аппроксимации''​ (вроде ​//​polynomial//​) ​просто лишь одно значение из будущего может ввести в заблуждение.
  
-^ ''​mode''​ ^ **forecast** ​result ​+^ ''​режим''​ ^ результат ​**forecast** ^ 
-|//value// |f(now + ''​time''​) | +|значение (//value//|f(сейчас ​+ ''​время''​) | 
-|//max// |max<​sub>​now <​nowiki><​=</​nowiki>​ t <​nowiki><​=</​nowiki> ​now + ''​time''</​sub>​ f(t) | +|максимум (//max//|max<​sub>​сейчас ​<​nowiki><​=</​nowiki>​ t <​nowiki><​=</​nowiki> ​сейчас ​+ ''​время''</​sub>​ f(t) | 
-|//min// |min<​sub>​now <​nowiki><​=</​nowiki>​ t <​nowiki><​=</​nowiki> ​now + ''​time''</​sub>​ f(t) | +|минимум (//min//|min<​sub>​сейчас ​<​nowiki><​=</​nowiki>​ t <​nowiki><​=</​nowiki> ​сейчас ​+ ''​время''</​sub>​ f(t) | 
-|//delta// |//max// - //min// | +|дельта (//delta//|//max// - //min// | 
-|//avg// |average of f(t) (now <​nowiki><​=</​nowiki>​ t <​nowiki><​=</​nowiki> ​now + ''​time''​) ​according to [[https://​en.wikipedia.org/​wiki/​Mean_of_a_function|definition]] |+|среднее (//avg//|среднее значение ​f(t) (сейчас ​<​nowiki><​=</​nowiki>​ t <​nowiki><​=</​nowiki> ​сейчас ​+ ''​время''​) ​в соответствии с  ​[[https://​en.wikipedia.org/​wiki/​Mean_of_a_function|определением]] |
  
-=== - Details ​===+=== - Подробности ​===
  
-To avoid calculations with huge numbers we consider the timestamp of the first value in specified period plus ns as a new zero-time ​(current epoch time is of order 10<​sup>​9</​sup>, ​epoch squared is 10<​sup>​18</​sup>, ​double precision is about 10<​sup>​-16</​sup>​). 1 ns is added to provide all positive time values for //​logarithmic//​ and //power// fits which involve calculating ​log(t). ​Time shift does not affect //linear////​polynomial//,​ //​exponential// ​(apart from easier and more precise calculationsbut changes the shape of //​logarithmic//​ and //power// functions.+Для того, чтобы избежать вычислений с большими числами,​ мы рассматриваем штамп времени первого значения в указанном периоде плюс ​наносекунда как новую точку остчёта времени ​(текущие штампы времени порядка ​10<​sup>​9</​sup>, ​в квадрате уже ​10<​sup>​18</​sup>, ​а точность дробных значений около ​10<​sup>​-16</​sup>​). 1 нс прибавляется для того, чтобы все значения времени были положительными,​ поскольку построение логарифмической и степенной аппроксимаций подразумевает вычисление ​log(t). ​Этот сдвиг времени не влияет на линейную функциюполином и экспоненциальную функции ​(за исключением более легких и более точных вычислений), но изменяет форму логарифмической и степенной функций.
  
-=== - Potential errors ​===+=== - Возможные ошибки ​===
  
-Functions return ​-1 in such situations:+Функции возвращают ​-1 в следующих ситуациях:
  
-  * specified evaluation period contains no data;+  * указанных период не содержит данных;
  
-  * result of mathematical operation is not defined((For example fitting //​exponential//​ or //power// functions involves calculating log() of item valuesIf data contains zeros or negative numbers you will get an error since log() is defined for positive values only.));+  * математическая операция не задана((Например,​ построение экспоненциальной и степенной функций требует логарифмических вычислений значений элемента данныхЕсли данные содержат нулевые или отрицательные числа, вы получите сообщение об ошибке,​ поскольку вычисление логарифма возможно только при положительных значениях.));
  
-  * numerical complications ​(unfortunatelyfor some sets of input data range and precision of double-precision floating-point format become insufficient)((For //linear//, //​exponential//,​ //​logarithmic// ​and //​power// ​fits all necessary calculations can be written explicitlyFor //​polynomial// ​only //​value// ​can be calculated without any additional stepsCalculating ​//​avg// ​involves computing polynomial antiderivative ​(analytically). Computing ​//max//, //​min// ​and //​delta// ​involves computing polynomial derivative ​(analyticallyand finding its roots (numerically). Solving ​f(t) = 0 involves finding polynomial roots (numerically).+  * сложности вычислений ​(к сожалениюдля некоторых наборов входных данных диапазона и точности формата чисел с плаваюшей точкой двойной точности становится недостаточно)((При аппроксимации ​//linear//, //​exponential//,​ //​logarithmic// ​и //​power// ​выражений все необходимые вычисления можно написать в явном видеПри ​//​polynomial// ​можно вычислить только ​//​value// ​без дополнительных шаговВычисление ​//​avg// ​включает в себя вычисление первообразной полинома ​(аналитически). Вычисление ​//max//, //​min// ​и //​delta// ​включает в себя вычисление производной полинома ​(аналитическии поиск его корней ​(численно). Решение ​f(t) = 0 требует нахождения корней полинома ​(численно).
 )). )).
  
-<note tip>No warnings or errors are flagged if chosen fit poorly describes provided data or there is just too few data for accurate prediction.</​note>​+<note tip>Никаких предупреждений или ошибок не выдаётся,​ если выбранная аппроксимирующая функция плохо описывает предоставленные данные или просто данных недостаточно для точного прогноза.</​note>​
  
-=== - Examples and dealing with errors ​===+=== - Примеры и обработка ошибок ​===
  
-To get a warning when you are about to run out of free disk space on your host you may use a trigger expression like this:+Для получения предупреждения о том, что у вашего узла сети скоро закончится свободное дисковое пространство,​ вы можете использовать следующее выражение триггера:
 <​code>​{host:​vfs.fs.size[/,​free].timeleft(1h,,​0)}<​1h</​code>​ <​code>​{host:​vfs.fs.size[/,​free].timeleft(1h,,​0)}<​1h</​code>​
  
-Howevererror code -1 may come into play and put your trigger in a problem stateGenerally it's good because you get a warning that your predictions don't work correctly and you should look at them more thoroughly to find out whyBut sometimes it's bad because ​-1 can simply mean that there was no data about the host free disk space obtained in the last hourIf you are getting too many false positive alerts consider using more complicated trigger expression((But in this case -1 can cause your trigger to recover from the problem stateTo be fully protected use: <​code>​{host:​vfs.fs.size[/,​free].timeleft(1h,,​0)}<​1h and ({TRIGGER.VALUE}=0 and {host:​vfs.fs.size[/,​free].timeleft(1h,,​0)}<>​-1 or {TRIGGER.VALUE}=1)</​code>​)):​+Однакоможет появиться код ошибки ​-1 и перевести ваш триггер в состояние проблемыВообще говоря,​ это не плохо, потому что вы получите предупреждение о том, что ваши прогнозирования не работает должным образом,​ и вам стоит обратить на них внимание,​ чтобы разобраться почемуНо иногда это плохо, потому что ​-1 может просто означать,​ что за последний час не было получено никаких данных о свободном дисковом пространстве данного узла сетиЕсли вы получаете много сообщений о ложных тревогах,​ подумайте об использовании более сложного выражения((Но в этом случае ​-1 может восстановить триггер из состояния проблемыДля полной защищённости используйте: <​code>​{host:​vfs.fs.size[/,​free].timeleft(1h,,​0)}<​1h and ({TRIGGER.VALUE}=0 and {host:​vfs.fs.size[/,​free].timeleft(1h,,​0)}<>​-1 or {TRIGGER.VALUE}=1)</​code>​)) ​триггера:
 <​code>​{host:​vfs.fs.size[/,​free].timeleft(1h,,​0)}<​1h and {host:​vfs.fs.size[/,​free].timeleft(1h,,​0)}<>​-1</​code>​ <​code>​{host:​vfs.fs.size[/,​free].timeleft(1h,,​0)}<​1h and {host:​vfs.fs.size[/,​free].timeleft(1h,,​0)}<>​-1</​code>​
  
-Situation is a bit more difficult with **forecast**. ​First of all, -1 may or may not put the trigger in a problem state depending on whether you have expression like <​code>​{host:​item.forecast(...)}<​...</​code> ​or like <​code>​{host:​item.forecast(...)}>​...</​code>​+Ситуация немного сложнее с **forecast**. ​Начнём с тогочто ​-1 может перевести,​ а может и не перевести триггер в состояние проблемы в зависимости от вашего выражения триггера,​ которое может быть вроде ​<​code>​{host:​item.forecast(...)}<​...</​code> ​или наподобие ​<​code>​{host:​item.forecast(...)}>​...</​code>​
  
-Furthermore, -1 may be a valid forecast if it's normal for the item value to be negativeBut probability of this situation in the real world situation is negligible ​(see [[manual/​config/​triggers/​expression|how]] operator ​**=** works). So add <​code>​... or {host:​item.forecast(...)}=-1</​code> ​or <​code>​... and {host:​item.forecast(...)}<>​-1</​code> ​if you want or don't want to treat -1 as a problem respectively.+Более того, -1 может быть вполне корректным результатом прогнозирования,​ если прогнозируемый элемент данных может принимать отрицательные значенияНо вероятность возникновения такой ситуации в реальных условиях пренебрежительно мала ​(смотрите, ​[[ru/manual/​config/​triggers/​expression|как]] работает оператор ​**=**). ​Поэтому добавьте ​<​code>​... or {host:​item.forecast(...)}=-1</​code> ​или ​<​code>​... and {host:​item.forecast(...)}<>​-1</​code> ​если вы соответсвенно хотите или, наоборот,​ не хотите рассматривать ​-1 как проблему.
  
-=== See also ===+=== Смотрите также ​===
  
-  - [[http://​zabbix.org/​mw/​images/​1/​18/​Prediction_docs.pdf|Predictive trigger functions ​(pdf)]] on zabbix.org+  - [[http://​zabbix.org/​mw/​images/​1/​18/​Prediction_docs.pdf|Прогнозирующие функции триггеров ​(pdf)]] on zabbix.org ​[en]