Решил у нас в Имхонете сделать мониторинг PHP-FPM, чтобы все было как у нормальных пацанов. Советы в интернете сводятся к тому, чтобы включить статус и проксировать запросы в него через Nginx. Но я считаю, что это как ездить на метро с пересадкой, при условии что пешком дойти ближе и быстрее, поэтому сделал все сам.
Обзор
PHP-FPM
В самом PHP-FPM нам нужно только включить страницу статуса и ответ на пинг запрос. Для этого в конфиг пула (по умолчанию это /etc/php/fpm/pool.d/www.conf
) нужно добавить следующие строки:
И перезагрузить демон:
Zabbix
Cкрипт
Первую реализацию я написал на Bash, сначала напишу его разбор а потом приведу целиком.
Первой строкой указываем чем необходимо выполнять скрипт:
Записываем в переменную подсказку по использованию скрипта:
В скрипте есть три функции ping
- для простой проверки, status
- для получения пар параметр:значение и status_clear
- для получения статуса без парсинга:
После объявления функций сетим переменные:
Ну и дальше основная обработка, в зависимости от типа проверки и параметров вызываются функции и каким-либо образом обрабатываются:
Скрипт полностью можно скачать здесь. Чтобы использвать его во внешних проверках нужно:
- Переместить его в каталог
/usr/lib/zabbix/externalscripts/
- Переименовать
fcgi.txt
->fcgi
- Сделать исполняемым
chmod +x fcgi
- Установить пользователя
chown -R zabbix:zabbix fcgi
Также для работы скрипта должна быть установлена программа cgi-fcgi
в Debian пакет для установки называется fcgiwrap
.
Шаблон
Сам шаблон можно скачать тут. После импорта его необходимо подключить к узлам на которых крутится PHP-FPM. Для запросов используются две переменные: встроенная HOST.CONN
и макрос FPM_PORT
добавленный мной, по дефолту там стоит значение 3000
.
В шаблоне несколько итемов, 2 триггера, графики и даже скрины, все как положено.
Заключение
Таким образом я решил задачу мониторинга необходимых нам параметров, но эту реализация считаю недостаточной. В дальнейшем хочу переписать его на golang c использованием вот этой библиотеки. Так как это внешняя проверка она должна работать быстро, а bash
не подходит по этому параметру. Если у вас есть рекомендации или доработки пишите мне на почту или в Twitter.
UPD
Переписал скрипт на Golang и выложил в open source, подробнее можно почитать вот тут.
#Zabbix #Php-fpm #TechAndDev