Мониторинг проектов на Битриксе в Zabbix
Артем Житник
В Битриксе есть встроенные инструменты диагностики, есть уведомления о критических событиях, но часто нужно большего. Даже если под вашей ответственностью находятся всего несколько сайтов, не говоря уже о десятках, сложно постоянно уделять им должное внимание. А потом приходит руководитель проекта с претензией, почему тормозит сайт. Начинаем разбираться, искать концы... А лучше бы наоборот, вы бы пришли к заказчику с находкой: "Эй, тут у вас кеш разросся до диких гигабайтов, давайте что-то делать!". И вы молодец, и клиент доволен. Ну этот, так, один из сценариев.
Важно держать под контролем свои проекты и лучше этот процесс автоматизировать. Тут на помощь приходят системы мониторинга, например Zabbix. Кстати, разрабатывают его наши люди. Автор - Алексей Владышев. Отличный продукт получился! Zabbix позволяет отслеживать работу железа, сетей, программ, серверов, бизнес-процессов и т.д. Существует куча шаблонов, в том числе созданных энтузиастами, позволяющими подружить Zabbix со многими объектами наблюдения. Большая часть находится в open source, бери и пользуйся.
На предыдущих проектах я частично использовал Zabbix. Простенькая проверка, показатели получались через простой JSON, генерируемый обычным скриптом лежащим в папке /local/. А на стороне Zabbix был создан шаблон хоста с прописанными элементами данных и триггерами. Все хорошо, но нужно было следить чтоб этот скрипт был включен во все проекты. Не всегда была необходимость, да и возможность, получать полный комплект данных, что вело к модификации скрипта под конкретную установку. Хоть он был небольшой, но это не совсем удобно. Хорошо что этих проектов было не много, можно было обходиться и так.
Почему бы не сделать более комплексное и универсальное решение? Подумал я и сделал модуль IX мониторинг. Смешное название)) Почему "Ы"? Чтоб никто не догадался! Что общего у "Zabbix" и "Bitrix", конечно окончание "IX". Так шутят программисты...
Решение расширяет GraphQL API для получения необходимых для отслеживания данных. Расширение API производится через механизм событий Битрикс, более подробно с примерами опишу позже. Идея такая - мы определяем какие данные мы хотим отдавать Zabbix`у, например мы хотим следить за размерами папок кеша, но нам не интересно что там происходит с инфоблоками. Мы можем ограничить отдаваемую схему в настройках модуля GraphQL API. После настройки схемы, экспортируем прямо из модуля конфигурацию хоста в формате JSON, скармливаем этот файл в Zabbix через стандартный импорт. По идее, все работает. Даже секреты пропишутся в макросах сразу, в частности токен аутентификации который вставляется в каждый запрос API.
Мониторятся например такие показатели:
- Скорость сайта
- Окончание лицензии
- Размеры папок кеша, upload, backup
- Параметры инфоблоков: количество элементов, разделов, свойств, значений свойств и др.
Срабатывают тревоги, например:
- Сайт X работает медленно
- Заканчивается лицензия на сайте X
- Изменилось место хранения свойств инфоблока Z
Для инфоблоков работает правило определения (discovery).
А какие бы вы хотели отслеживать показатели? Напишите, в новых версиях будем добавлять.