Окт 272015
 

Zabbix очень мощная и удобная система мониторинга.
Раньше использовал его только для мониторинга за IT инфраструктурами компаний в которых работал/работаю, но с недавнего времени стал использовать его и в своем проекте gh-online.

В этом проекте до текущего момента zabbix использовался только для мониторинга температуры, влажности и это было удобно – отсылка данных, отображение и анализ графиков – всё организовано средствами самого zabbix.

Теперь же возникла необходимость мониторить состояние устройств: вентиляторов, помп и прочего.

И тут появились две проблемы:

  1. Zabbix не позволяет масштабировать графики точнее чем за 1 час
  2. Zabbix-у нельзя отправлять данные с прецизионной точностью времени снятия показаний

По первой проблеме решение нашлось довольно быстро. Уже давно на сайте поддержки zabbix висит тикет с просьбой реализовать масштабирование графиков с большей точностью.

И слава разработчикам! В следующей версии zabbix эта возможность  будет реализована (а уже выпущена третья альфа ;) )!

Выглядеть будет примерно так:

one_minute_zoom

Видно, что реализована точность масштабирования вплоть до одной минуты. И это круто!

В предвкушении предстоящего в скором времени обновления системы решил начать реализовывать функционал по отправке в zabbix данных о включении и выключении оборудования.

Покопавшись на форумах понял, что в базе zabbix данные о времени снятия показаний хранятся в unixtime и кроме этого есть поле nanoseconds. То-есть теоретический предел точность – 1 миллиардная доля секунды.

А вот дальше начались проблемы.

Данные я отправлял с openwrt на zabbix сервер с помощью нативного zabbix_sender из lua скрипта. Но zabbix_sender умеет отправлять время в unixtime и никак не точнее (а это с точностью до секунды).

Нативных библиотек для реализации zabbix_sender для lua не нашлось.

Потом выяснилось, что протокол обмена не текстовый (хотя внутри он и json based ;) ), а в lua (без дополнительных модулей) проблемно работать с бинарными данными (точнее сказать невозможно). А учитывая ценность интерпретируемых скриптов на lua (они выполняются без предварительной компиляции), тащить дополнительные модули написанные на C очень не хотелось.

В итоге в процессе длительного изучения возможных вариантов решения задачи полез в исходники zabbix.

И не зря полез :) В общем и целом, протокол zabbix_sender является подмножеством протокола zabbix_agent. А zabbix_agent отправляет данные c прецизионной точностью в одну наносекунду.

Поковыряв исходник zabbix_sender решил попробовать дописать необходимый функционал. И хотя знания мои в программирования весьма ограниченны, удалось добиться положительного результата :)

В итоге получился такой патч.

Патч отправлен на портал поддержки на верификацию. Надеюсь войдет в следующую версию, потому как расширенным возможностям масштабирования графика добавление такого функционала к zabbix_sender будет как раз во время.

Что не маловажно, именно возможность отправлять время изменения состояния оборудования с точностью до наносекунд, позволит строить графики типа таких, что изображен ниже красным цветом:

20150920-5

В то время как сейчас, график включения оборудования на одну секунду будет выглядеть как изображенный выше синим цветом.

Для этого нужно будет отправить предыдущее состояние оборудования с временем снятия показаний на одну наносекунду меньше чем новое показание.

 Опубликовано в 00:05