Похожие вопросы в истории поиска я уже находил, но ответ по ним - нет. Может, взгляд под другим углом поможет экспертам подсказать мне решение проблемы?
У меня zabbix 5.0 (обновиться не получится). Рассмотрю абстрактный случай: Есть хост, для которого я создал 2 зависимых элемента: newping[1] и newping[2]. Оба являются dependent от ICMP ping response time. Мне нужно высчитать сумму значений этих элементов, для этого конечно же я делаю last(newping[1])+last(newping[2]). Но что, если заранее неизвестно, сколько параметров newping должно суммироваться на хосте? То есть, их может быть 1, а может быть 6... Сделать sum(newping[*],#1) zabbix, конечно же, не даёт. Можно было бы сделать last(newping[1])+...+last(newping[6]), но если в этой цепочке будет несуществующий элемент, сумма вообще не будет вычисляться... Очень не хватает функции, которая при отсутствии указанного ключа просто возвращала бы 0... Читал, что sum в некоторых версиях возвращает 0, но в моей - нет.
Хотел решить проблему другим образом: сделал правило обнаружения, которое в зависимости от заданного мной на уровне шаблона макроса, javascript'ом генерирует формулу в LLD-макрос {#FORMULA}, которую я подставляю в прототип calculated item как есть: {#FORMULA} в поле formula. Но правило не может создать элемент из прототипа, пишет: Cannot create item, error in formula: not numeric value in macro "{#FORMULA}".
Теперь конкретика, зачем это нужно. Есть железка, которая мониторится. Внутри неё есть 6 сервис-бандлов, по каждому из которых собирается почти 300 метрик. Потом они суммируются, и получается несколько итоговых величин. Пока неизвестно, будут ли задействованы все сервис-бандлы, поэтому хочется создать шаблон, в котором количество метрик можно масштабировать одной переменной. И если с масштабированием метрик нижнего уровня правило обнаружения и прототипы отлично справляются при помощи javascript, то с итоговым суммированием метрик, которые отсутствуют, zabbix справиться не даёт...
У меня zabbix 5.0 (обновиться не получится). Рассмотрю абстрактный случай: Есть хост, для которого я создал 2 зависимых элемента: newping[1] и newping[2]. Оба являются dependent от ICMP ping response time. Мне нужно высчитать сумму значений этих элементов, для этого конечно же я делаю last(newping[1])+last(newping[2]). Но что, если заранее неизвестно, сколько параметров newping должно суммироваться на хосте? То есть, их может быть 1, а может быть 6... Сделать sum(newping[*],#1) zabbix, конечно же, не даёт. Можно было бы сделать last(newping[1])+...+last(newping[6]), но если в этой цепочке будет несуществующий элемент, сумма вообще не будет вычисляться... Очень не хватает функции, которая при отсутствии указанного ключа просто возвращала бы 0... Читал, что sum в некоторых версиях возвращает 0, но в моей - нет.
Хотел решить проблему другим образом: сделал правило обнаружения, которое в зависимости от заданного мной на уровне шаблона макроса, javascript'ом генерирует формулу в LLD-макрос {#FORMULA}, которую я подставляю в прототип calculated item как есть: {#FORMULA} в поле formula. Но правило не может создать элемент из прототипа, пишет: Cannot create item, error in formula: not numeric value in macro "{#FORMULA}".
Теперь конкретика, зачем это нужно. Есть железка, которая мониторится. Внутри неё есть 6 сервис-бандлов, по каждому из которых собирается почти 300 метрик. Потом они суммируются, и получается несколько итоговых величин. Пока неизвестно, будут ли задействованы все сервис-бандлы, поэтому хочется создать шаблон, в котором количество метрик можно масштабировать одной переменной. И если с масштабированием метрик нижнего уровня правило обнаружения и прототипы отлично справляются при помощи javascript, то с итоговым суммированием метрик, которые отсутствуют, zabbix справиться не даёт...
Comment