Как лучше получить время, когда зафиксировано минимальное значение элемента данных?

Ссылка скопирована
1 ответ

Нужно понять: для узла сети создан дополнительный вычисляемый элемент данных, в котором по формуле min вычисляется минимальное значение соседнего элемента за указанный промежуток времени. Как получить значение времени, когда впервые зафиксировано минимальное значение в заданном промежутке времени?
По вводным: пример: в Zabbix поступают показания значений температуры с внешнего устройства. Для отправки отчета по температуре за последние сутки/несколько часов, необходимо, в дополнение к минимальному(максимальному) значению, добавить время, когда это значение было впервые зафиксировано.

Версия Zabbix: 7.4

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Дмитрий К. Ответ

В Zabbix получить само минимальное значение через min() просто, а вот время, когда оно впервые было зафиксировано, отдельной стандартной функцией в calculated item обычно не достаётся. Для такой задачи чаще используют API, SQL к history-таблицам или отдельный preprocessing/скрипт, который ищет минимальное значение и первую дату этого значения за период.

Для отчёта самый практичный путь — брать данные через Zabbix API методом history.get за нужный интервал, затем на своей стороне находить минимум и первую временную метку. Пример логики:

const values = history.map(row => ({
  value: Number(row.value),
  clock: Number(row.clock)
}));
 
const min = Math.min(...values.map(v => v.value));
const first = values
  .filter(v => v.value === min)
  .sort((a, b) => a.clock - b.clock)[0];

const values = history.map(row => ({ value: Number(row.value), clock: Number(row.clock) })); const min = Math.min(...values.map(v => v.value)); const first = values .filter(v => v.value === min) .sort((a, b) => a.clock - b.clock)[0];

Так вы получите и минимальное значение, и timestamp первого появления. Это удобнее и надёжнее, чем пытаться заставить calculated item хранить два разных значения.

Если очень хочется делать на стороне Zabbix, можно создать отдельный external script или dependent item, который возвращает JSON с минимумом и временем. Например:

{
  "min": 18.4,
  "first_clock": 1718104200
}

{ "min": 18.4, "first_clock": 1718104200 }

Потом dependent items могут разобрать JSONPath-ом отдельно значение и время. Но это уже кастомная логика.

SQL напрямую к history-таблицам возможен, но нужно учитывать тип элемента: history, history_uint, history_float. Для float-значений это обычно history. Прямые запросы к БД быстрее для отчётов, но привязывают вас к структуре хранения Zabbix.

Итог: для Zabbix 7.4 нормальное решение — получить history за период через API и вычислить минимум плюс первое время во внешнем отчётном скрипте. Calculated item оставьте для самого значения, а время минимума считайте отдельной логикой.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно