Для мониторинга обработчика PHP - PHP-FPM (в связке с nginx) я использую Zabbix, и шаблон для него, от китайского автора netkiller.
Файл шаблона zbx_export_templates.xml для Zabbix 3.2 у меня не загрузился, судя по всему из-за несоответствия версий (у меня стоит 3.4.6), поэтому нужные мне элементы я создал вручную. Мой шаблон можете скачать по ссылке внизу поста.
1. В основном файле конфигурации PHP-FPM (по умолчанию - /etc/php-fpm.d/www.conf) нужно раскомментировать следующие строки (убрать ; перед началом строки):
pm.status_path = /status
ping/ping/ = /ping
и перезапустить php-fpm
systemctl reload php-fpm
2. Теперь в конфигурационный файл Nginx (/etc/nginx/nginx.conf ) нужно добавить два location, чтобы он проксировал статистику по адресу http://127.0.0.1/status (вместо локального адреса подставьте ваш IP или домен)
location /status { stub_status on; access_log off; allow 127.0.0.1; # тут укажите IP хоста, с которого хотите смотреть или мониторить статистику. deny all; } location ~ ^/(status|ping)$ { access_log off; allow 127.0.0.1; deny all; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; include fastcgi_params; }
Обратите внимание что в директике allow нужно указать ip адреса хостов, с которых хотите смотреть статистику и мониторить.
Перечитываем конфиг nginx:
systemctl reload nginx
После вышеуказанных настроек у вас должен по адресу http://127.0.0.1/status окно статистики примерно такого вида:
pool: www process manager: ondemand start time: 08/Aug/2018:18:14:19 +0000 start since: 479272 accepted conn: 1388458 listen queue: 0 max listen queue: 18 listen queue len: 128 idle processes: 11 active processes: 3 total processes: 14 max active processes: 23 max children reached: 0 slow requests: 0
Настройка Zabbix - агента
После установки агента на целевом хосте, в каталоге /etc/zabbix/ создаем папку scripts и в ней файл php-fpm.sh со следующим содержимым:
#!/bin/bash ################################################## # AUTHOR: Neo <netkiller@msn.com> # WEBSITE: http://www.netkiller.cn # Description:zabbix 通过 status 模块监控 php-fpm # Note:Zabbix 3.2 # DateTime: 2016-11-22 ################################################## HOST="localhost" PORT="80" status="status" function query() { curl -s http://${HOST}:${PORT}/${status} | grep "$1" | cut -d : -f 2 | awk '{print $1}' } if [ $# == 0 ]; then echo $"Usage $0 \"{pool|process manager|start time|start since|accepted conn|listen queue|max listen queue|listen queue len|idle processes|active processes|total processes|max active processes|max children reached|slow requests}\"" exit else query "$1" fi
Измените значение переменной HOST и PORT на свои.
Этот же файл на github.
Добавляем в /etc/zabbix/zabbix_agentd.conf в самый конец строки с нашими параметрами:
UserParameter=php.fpm.ping,/etc/zabbix/scripts/php-fpm.sh UserParameter=php-fpm.status[*],/etc/zabbix/scripts/php-fpm.sh $1
и рестартуем агент.
Настройка Zabbix - сервера
Итак, после добавления узла в Zabbix, заходим в Настройки - Узлы сети, выбираем наш узел, переходим на вкладку Элементы данных, в правом углу жмём - Создать новый элемент.
Имя: php-fpm status $1
Тип: Zabbix-агент
Ключ: php-fpm.status[listen-queue]
Тип информации: Целое положительное
Остальные параметры можно оставить по умолчанию.
По аналогии создаем остальные элементы - меняется только значение в поле ключ, которое в квадратных скобках (listen-queue, max listen queue и т.д)
Таким образом, zabbix - агент будет запускать скрипт php-fpm.sh с нужным нам параметром, который указан в поле Ключ в квадратных скобках. Скрипт будет обращаться к странице нашего хоста по пути /status, парсить возвращенную xml - страницу, и передавать данные на сервер.
Вложение | Размер |
---|---|
Файл шаблона для Zabbix | 12.69 КБ |
Комментарии
Спасибо за статью! Хочу
Спасибо за статью! Хочу поделиться скриптом и шаблоном для автоматического обнаружения пулов PHP-FPM и их дальнейшего мониторинга для Zabbix 4.0+ https://github.com/rvalitov/zabbix-php-fpm
Работает со всеми типам пулов (dynamic, static, ondemand), имеет все необходимые скрины и триггеры.
Надеюсь, что кому-нибудь это пригодится