Zabbix vs графики

в 16:11, , рубрики: gLLD, NIH, zabbix, zabbix api, zabbixGrapher, ит-инфраструктура, системное администрирование

New!
Zabbix позволяет легко и удобно настроить мониторинг большого количества разных счетчиков со множества устройств. Он был открыт под GPL в 2001г, и за последние 15 лет в нем безусловно было сделано множество улучшений, позволяющих еще лучше собирать еще больше данных.
Но почему же все улучшения обошли стороной навигацию по такому большому количеству собранных графиков и их отображение?

Что есть сейчас

Основная задача для которой Zabbix используется в нашей компании – это оценка трендов, а не текущие алерты и триггеры. Т.е. в основном нам необходимо быстро открыть все графики по одному серверу, или один и тот же график по группе серверов.
Что нам предлагает стандартный zabbix-frontend-php для этого?

image

Ничегошеньки! Позволено выбрать группу, потом выбрать хост из нее, потом выбрать график для этого хоста. Каждый выбор сопровождается полной перезагрузкой страницы, и хотя и присутствует выбор 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
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.

Патч был установлен, и на какое-то время позволил легче дышать. А так же сразу и выяснилась причина почему данный функционал не реализован официально – производительность генерирования картинки на стороне сервера оставляет желать лучшего. Это терпимо, когда картинка на странице одна, но когда их уже 20 – это становится заметно.

Client-side graphs

На минутку вспомним, что сейчас 2016 год и модно-молодежные системы типа Graphite, Grafana, Chronograf рендерят графики на стороне клиента. Более того для Grafana даже есть data-source плагин для Zabbix:

image

Это отличная возможность пощупать что-то новое на уже собранных родных данных, посмотреть на них под другим углом. И в связи с относительной простотой, я всем рекомендую сделать это. Хорошее сравнение оригинальных возможностей и 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 помимо прочего сделал отдельную ферму для рендеринга графиков.
С отдельным веб-интерфейсом для их навигации и просмотра:

image

Сорри за качество скриншота, он взят из презентации на slideshare. И помимо их выступления на ZabbixConf, я ничего в открытом доступе не нашел. Т.е. можно сделать график из любых счетчиков, даже не обьединенных одним графиком ранее. Так же интересной выглядит возможность послать ссылку на сформированный набор графиков.

Идея выноса рендеринга картинок на ферму серверов показалась простым решением в лоб, и была опробована. Что в купе с кешированием в nginx и переходом на php7 дало кое-какой выигрыш в производительности. Достаточный чтобы опять посмотреть на улучшение в навигации текущего веб интерфейса.

Основной проблемой патча ZBXNEXT-75, упомянутого выше, было то, что при каждом изменении фильтра страница перезагружалась полностью. Да, можно было бы переписать его на js, и приходить за всеми нужными данными в Zabbix API на лету – но для использования API нужна авторизация и токен. Глупо было бы просить пользователя вводить пароль дважды, один раз для PHP, второй — для js.

Последним щелчком, который расставил все по местам был чудесный скрипт от Toshiyuki-сана zabbix-graph-viewer:

image

При работе он не спрашивал аутентификации, и сделано это было всего одной строкой (ага, меньше 30 ;) на js:

auth: $cookies.zbx_sessionid,

Т.е. пресловутый токен для zabbix API является всего лишь SSID, и уже лежит в куки. После этого стало довольно просто переписать идею ZBXNEXT-75 на js. Засучаем рукава и появляется zabbixGrapher:

image

Помимо возможности просмотра произвольных уже созданных графиков по хостам, удалось так же реализовать возможность создавать графики для любых счетчиков на лету. При этом используется html5 history который меняет URL при изменении состояния страницы — это позволяет поделиться ссылкой на вашу подборку графиков.

LLD

Возможность генерирвать графики на лету так же в некоем роде стала решением для ZBXNEXT-927 (в топе JIRA под номером 2). Вкратце проблема в следующем:
— У вас есть LLD, например для определения всех дисков на сервере. Он успешно создает счетчик, например Free disk space, % для каждого диска
— В LLD вы можете создать только отдельный график для каждого найденного диска. Вы не можете создать один график для отображения свободного места на всех дисках:

image

Такой график можно создать вручную, на хосте, из обнаруженных счетчиков. Через некоторое время диск заменят, или добавят новый, и ваш график перестанет полноценно отражать реальность.
Да, для автоматизации создания и обновления таких графиков с 2012г существуют скрипты. Но основная их проблема в том что вам надо о них помнить. Например при создании нового шаблона с хостами не забыть и обновить конфиг такого скрипта. Было бы неплохо править конфиг в том же веб-интерфейсе. Let's go, it's fun! Так появился gLLD:

image

Который всего лишь позволяет удобно редактировать задачи, которые уже будет исполнять скрипт ходящий по крону. При написании этой простой формочки пришлось поразбираться с веб-интерфейсом Zabbix поглубже чем публичный API, и к сожалению особой радости увиденное не принесло. (Not fun at all) Зато понятно почему ответ разработчиков в ZBXNEXT-927 был ссылкой на Development services. Минимальная цена текущих проектов на этой странице стартует с €8,000.00

The End

На этом все, будет интересно почитать ваши комментарии. Надеюсь эта подборка кому-то поможет (например осознать что пора мигрировать с Zabbix ;)

PS
Да, плагинов не существует, вам надо патчить исходный код. Но они скоро появятся — ZBXNEXT-1099

Автор: sepich

Источник

Поделиться новостью

* - обязательные к заполнению поля