Собираем метрики cPanel в Zabbix
Многие провайдеры виртуального хостинга для предоставления услуги используют программу cPanel
cPanel
cPanel является достаточно распространённым ПО, возможно, даже самой распространённой из всех коммерческих панелей управления для хостинга, особенно хостинг-провайдеров Европы и Северной Америки. Не последняя причина в том, что cPanel имеет расширенную функциональность для перепродажи хостинга.
Провайдер предлагает клиенту выбрать тарифный план. Среди параметров тарифного плана могут быть такие пункты:
Дисковое пространство Ресурсы RAM Ресурсы CPU И многое другое.
Для контроля использования ресурсов клиенту предлагается довольно бедный пункт меню — «Использование ресурсов». Без возможности установки каких либо уведомлений. Многие клиенты узнают, что причиной сбоя в работе сайта является, например исчерпание свободного дискового пространства, но уже по факту.
Что в общем то и понятно, ведь cPanel не профессиональный комплекс мониторинга с построением дашбордов, отчетов, порогов, уведомлений и эскалаций.
Работая с мониторингом я применяю систему мониторинга Zabbix. Теперь рассмотрим, как можно метрики cPanel передать в Zabbix.
Для этого из коробки у cPanel есть API, на ряду с управлением можно запросить и параметры метрик. К сожалению не каждый провайдер хостинга настраивает cPanel с возможностью удаленной работы с WEB API, хотя возможность создания соответствующих токенов сохраняют.
Меня это не сильно расстроило ведь есть утилита uapi и доступ к консоли и cron. Вызываем утилиту uapi с следующими ключами:
uapi --output=json ResourceUsage get_usages
Пример вывода:
{"apiversion":3,"module":"ResourceUsage","func":"get_usages","result":{"status":1,"messages":null,"warnings":null,"errors":null,"data":[{"error":null,"usage":.....и так далее
Что бы иметь возможность забрать данные:
Запускаем запрос к этой утилите раз в минуту (или как вам нравится) Вывод направляем в файл, который будет доступен из интернета на одном из Ваших доменов. Например в кроне записано так:
* * * * * uapi --output=json ResourceUsage get_usages > /home/USERNAME/DOMEN/FILE.log
Далее переходим к конфигурированию Zabbix.
zabbix
1. Создаем элемент данных типа HTTP agent и указываем точный URL до файла, не путать с путем для cron.
2. Тип данных выбираем Text и раз в минуту, или как вам удобней, забираем данные из файла в Zabbix. Текст у нас уже приходит в JSON формате.
Затем к нашему основному элементу данных создаем зависимые элементы данных с соответствующим парсингом. Например:
Для получения CPU будет следующий Preprocessing
JSONPath: $.result.data[12].usage
И так по каждому интересующему элементу данных.
Далее у меня получился следующий дашборд:
Сюда ж можно вывести метрику внешнего мониторинга WEB, например Response time — время ответа и Download speed — скорость скачивания.
Zabbix позволяет установить по каждой метрике свои пороги и отправлять уведомления при их достижении, например в Telegram. К примеру если вы используете 70% выделенный Вам ресурсов CPU в течении 10 минут, то получите соответствующее уведомление, или если выделенное дисковое пространство будет подходить к концу, то можно так ж получать уведомление.
Если у вас есть вопросы или непреодолимое желание поблагодарить, — пишите.