Pull to refresh

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

Reading time3 min
Views3K

Многие провайдеры виртуального хостинга для предоставления услуги используют программу 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+)

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

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

Tags:
Hubs:
Total votes 12: ↑12 and ↓0+12
Comments4

Articles