Zabbix vs графики
Zabbix позволяет легко и удобно настроить мониторинг большого количества разных счетчиков со множества устройств. Он был открыт под GPL в 2001 г, и за последние 15 лет в нем безусловно было сделано множество улучшений, позволяющих еще лучше собирать еще больше данных.
Но почему же все улучшения обошли стороной навигацию по такому большому количеству собранных графиков и их отображение?
Что есть сейчас
Основная задача для которой Zabbix используется в нашей компании — это оценка трендов, а не текущие алерты и триггеры. Т.е. в основном нам необходимо быстро открыть все графики по одному серверу, или один и тот же график по группе серверов.
Что нам предлагает стандартный zabbix-frontend-php для этого?
Ничегошеньки! Позволено выбрать группу, потом выбрать хост из нее, потом выбрать график для этого хоста. Каждый выбор сопровождается полной перезагрузкой страницы, и хотя и присутствует выбор all — все равно выведен будет только один график.
Вы скажете, что решение этой проблемы — Screens, которые надо создать заранее с графиками типа Dynamic item. К сожалению, такое решение только добавляет проблем, когда необходимо просто открыть нужный Screen из списка over 9000 in plain list.
Пробовали ли вы быстро открыть Screen, созданный на хосте через шаблон? Потом переключиться на соседний хост?
Server-side graphs
Проблема признана пользователями, и фича-реквесты по отображению графиков находятся в топе JIRA разработчиков. И пользователи не только просят, но и колхозят. Так в ZBXNEXT-75 был найден патч (уходящий корнями в 2006 г) который добавляет кажущуюся очевидной вещь:
Если в графиках мы выберем группу, потом сервер из нее, а график оставим all — то будут выведены все графики для этого хоста на одной странице. То же самое и для выбора конкретного графика, но указания имени сервера all — будет выведен заданный график для всех серверов группы.
Казалось бы это настолько логично — что просто должно присутствовать «из коробки»!
Cristian added a comment — 2013 Dec 04 18:44Патч был установлен, и на какое-то время позволил легче дышать. А так же сразу и выяснилась причина почему данный функционал не реализован официально — производительность генерирования картинки на стороне сервера оставляет желать лучшего. Это терпимо, когда картинка на странице одна, но когда их уже 20 — это становится заметно.
Btw, I simply don’t understand why this patch is not included into Zabbix source. The code is quite simple and these (very useful) patches are quite easy to add.
Client-side graphs
На минутку вспомним, что сейчас 2016 год и модно-молодежные системы типа Graphite, Grafana, Chronograf рендерят графики на стороне клиента. Более того для Grafana даже есть data-source плагин для Zabbix:
Это отличная возможность пощупать что-то новое на уже собранных родных данных, посмотреть на них под другим углом. И в связи с относительной простотой, я всем рекомендую сделать это. Хорошее сравнение оригинальных возможностей и Grafana вы можете посмотреть в wiki
Но нам к сожалению плагин не подошел по нескольким причинам:
— Очень медленная работа связанная с возможностями API Zabbix. Когда мы пробовали Grafana, получение истории вообще было патчем ZBXNEXT-1193. Но и сейчас в API нет даунсемплинга. Если вы смотрите график за месяц и счетчик собирается раз в минуту, готовьтесь что браузер загрузит json со всеми данными и будет пытаться их отрисовать. Не говоря уже о том что размер данных будет больше, чем весила бы картинка.
— Доступны только счетчики и их история значений. Все графики, созданные с ними в Zabbix, надо опять создавать в Grafana как темплейты. С помощью написания запросов можно нарисовать что угодно, но это не помогает когда хочется быстро окинуть взглядом уже созданный набор графиков.
Т.е. хотелось бы чего-то более интегрированного в Zabbix, т.к. его система наслования шаблонов довольно удобна. Очень жаль что инициатива 2013 г по переводу рендеринга на D3.js погибла. Да, zabbix-d3 работает, но упирается в те же архитектурные ограничения API. Остается надеяться, что то множество ZBXNEXT которые были созданы для поддержки D3 когда-нибудь будут реализованы. Это так же улучшит работу Grafana, и возможных ее конкурентов в будущем. (Разработчики, не упускайте свой шанс развязаться с почти совершеннолетним PHP кодом!)
Server-side graphs #2
Разные компании по разному решали проблему графиков в Zabbix, так Ring Central помимо прочего сделал отдельную ферму для рендеринга графиков.
С отдельным веб-интерфейсом для их навигации и просмотра:
(Скриншот в хорошем качестве предоставлен автором TPAKTOP_666, который отозвался после опубликования статьи) Немного информации по туле доступно в презентации на slideshare, немного — в выступлении на ZabbixConf. Больше ничего я в открытом доступе не нашел, но понятно, что инструмент позволяет сделать график из любых счетчиков, даже не объединенных одним графиком ранее. Так же интересной выглядит возможность послать ссылку на сформированный набор графиков.
Идея выноса рендеринга картинок на ферму серверов показалась простым решением в лоб, и была опробована. Что в купе с кешированием в nginx и переходом на php7 дало кое-какой выигрыш в производительности. Достаточный чтобы опять посмотреть на улучшение в навигации текущего веб интерфейса.
Основной проблемой патча ZBXNEXT-75, упомянутого выше, было то, что при каждом изменении фильтра страница перезагружалась полностью. Да, можно было бы переписать его на js, и приходить за всеми нужными данными в Zabbix API на лету –, но для использования API нужна авторизация и токен. Глупо было бы просить пользователя вводить пароль дважды, один раз для PHP, второй — для js.
Последним щелчком, который расставил все по местам был чудесный скрипт от Toshiyuki-сана zabbix-graph-viewer:
При работе он не спрашивал аутентификации, и сделано это было всего одной строкой (ага, меньше 30;) на js:
auth: $cookies.zbx_sessionid,
Т.е. пресловутый токен для zabbix API является всего лишь SSID, и уже лежит в куки. После этого стало довольно просто переписать идею ZBXNEXT-75 на js. Засучаем рукава и появляется zabbixGrapher:
Помимо возможности просмотра произвольных уже созданных графиков по хостам, удалось так же реализовать возможность создавать графики для любых счетчиков на лету. При этом используется html5 history который меняет URL при изменении состояния страницы — это позволяет поделиться ссылкой на вашу подборку графиков.
LLD
Возможность генерирвать графики на лету так же в некоем роде стала решением для ZBXNEXT-927 (в топе JIRA под номером 2). Вкратце проблема в следующем:
— У вас есть LLD, например для определения всех дисков на сервере. Он успешно создает счетчик, например
Free disk space, %
для каждого диска— В LLD вы можете создать только отдельный график для каждого найденного диска. Вы не можете создать один график для отображения свободного места на всех дисках:
Такой график можно создать вручную, на хосте, из обнаруженных счетчиков. Через некоторое время диск заменят, или добавят новый, и ваш график перестанет полноценно отражать реальность.
Да, для автоматизации создания и обновления таких графиков с 2012 г существуют скрипты. Но основная их проблема в том что вам надо о них помнить. Например при создании нового шаблона с хостами не забыть и обновить конфиг такого скрипта. Было бы неплохо править конфиг в том же веб-интерфейсе. Let’s go, it’s fun! Так появился gLLD:
Который всего лишь позволяет удобно редактировать задачи, которые уже будет исполнять скрипт ходящий по крону. При написании этой простой формочки пришлось поразбираться с веб-интерфейсом Zabbix поглубже чем публичный API, и к сожалению особой радости увиденное не принесло. (Not fun at all) Зато понятно почему ответ разработчиков в ZBXNEXT-927 был ссылкой на Development services. Минимальная цена текущих проектов на этой странице стартует с €8,000.00
The End
На этом все, будет интересно почитать ваши комментарии. Надеюсь эта подборка кому-то поможет (например осознать что пора мигрировать с Zabbix;)
PS
Да, плагинов не существует, вам надо патчить исходный код. Но они скоро появятся — ZBXNEXT-1099
Комментарии (1)
7 августа 2016 в 21:57
0↑
↓
Использую «графану» как фронтэнд для вывода на монитор, но за подробностями всёравно лажу в родной интерфейс. Графана просто марафет для показа неискушенным пользователям :)Уже сколько лет ведуться дискусии по «апгрейду» интерфейса и предлагается куча полезных идей и готовых решений, даже в последнем релизе нам презентовали «новый интерфейс» который по факту стал просто менее квадратным.
С другой стороны заббикс вполне выполняет свою работу даже в том виде как сейчас есть, к остальному привыкаешь быстро.