Собираем метрики cPanel в Zabbix +12


Многие провайдеры виртуального хостинга для предоставления услуги используют программу cPanel

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
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 минут, то получите соответствующее уведомление, или если выделенное дисковое пространство будет подходить к концу, то можно так ж получать уведомление.

UPDATE: 11.11.2021

Как показала практика использования такого подхода не оптимально. При обновлении версии Cpanel с стороны хостера меняются местами данные в выводе, дополняются новыми данными.

Zabbix ж мы нацелили на номер пункта данных:

 JSONPath:    $.result.data[12].usage

Теперь пере нацеливаем выборку на название, что нужно было бы и изначально сделать. Например: Вписав:

  • id - поле поиска

  • lvecpu - что искать

  • usage - название поля которое нужно вывести

Пример:

 JSONPath:    $.result.data.[?(@.id=='lvecpu')].usage

Но только этого изменения не достаточно, т.к. в выборке будет не число, а текст вида [10]. Далее на нужно выбрать само число, применим регулярку: (\d+)

В итоге предобработка выглядит так:

Если у вас есть вопросы или непреодолимое желание поблагодарить, - пишите.




К сожалению, не доступен сервер mySQL