Как использовать PHP-FPM exporter
Разворачивая на сервере одно из приложений, которое я разрабатываю, я столкнулся с очень странным поведением процесса php-fpm. Воспроизвести это поведение можно было только спустя часы, поэтому «тупой метод проб и ожидания» отнял бы слишком много времени на исправление. Первое, что я сделал — установил мониторинг, ведь он позволяет следить за тем, что происходит на машине, пока вы спите.
Я обожаю Prometheus и Grafana, поэтому было вполне очевидно, что выбор падёт именно на эти инструменты.
Если вы читаете это руководство, скорее всего, у вас возникли проблемы с настройкой, но я буду исходить из того, что Prometheus у вас уже установлен.
Установка
Приступим. Будем считать, что вы уже подключились по SSH к серверу или контейнеру, который хотите мониторить. Я буду использовать PHP FPM Exporter из этого репозитория.
Скачайте экспортер и переместите его в /usr/local/bin (поскольку это обычный пакет, не управляемый пакетным менеджером дистрибутива) с помощью следующей команды:
wget https://github.com/hipages/php-fpm_exporter/releases/download/v2.2.0/php-fpm_exporter_2.2.0_linux_amd64
mv php-fpm_exporter_* /usr/local/bin/php-fpm_exporter
chmod 755 /usr/local/bin/php-fpm_exporter
Настройка
Эта часть доставила мне немало хлопот (оправдание — было уже поздно), что и подтолкнуло меня написать это руководство на следующее утро после настройки.
-
Откройте конфигурационный файл PHP-FPM (замените
8.3на вашу версию PHP):vi /etc/php/8.3/fpm/pool.d/www.conf -
Внесите следующие изменения:
-
Раскомментируйте режим listen:
listen.mode = 0660 -
Раскомментируйте status URI:
pm.status_path = /status -
Убедитесь, что конфигурация сокета указывает на правильный путь (при необходимости замените
8.3на вашу версию PHP):listen = /run/php/php8.3-fpm.sock
-
Раскомментируйте режим listen:
- Сохраните изменения и выйдите из редактора.
-
Перезапустите службу PHP-FPM, чтобы применить конфигурацию:
systemctl restart php8.3-fpm
Теперь ваш экземпляр PHP-FPM настроен так, чтобы отдавать метрики по пути /status на указанном сокете.
Служба
Далее создадим службу для PHP-FPM exporter, чтобы он мог работать в фоне и автоматически запускаться при загрузке системы.
Откройте новый файл службы для экспортера:
vi /etc/systemd/system/php-fpm_exporter.service
Добавьте в файл следующее содержимое:
# Service file for PHP-FPM Exporter:
[Unit]
Description=PHP-FPM Exporter Service
After=network.target
[Service]
User=www-data
Group=www-data
Type=simple
ExecStart=/usr/local/bin/php-fpm_exporter server --phpfpm.fix-process-count=true --phpfpm.scrape-uri "unix:///run/php/php8.3-fpm.sock;/status"
[Install]
WantedBy=multi-user.target
Запуск и включение службы
Перезагрузите демон systemd, чтобы он подхватил конфигурацию новой службы:
sudo systemctl daemon-reload
Включите автозапуск службы PHP-FPM exporter при загрузке системы
sudo systemctl enable php-fpm_exporter
Запустите службу PHP-FPM exporter:
sudo systemctl start php-fpm_exporter
Проверьте статус службы, чтобы убедиться, что она работает корректно:
sudo systemctl status php-fpm_exporter
Если всё настроено правильно, вы увидите, что служба имеет статус active (running). Если возникли проблемы, посмотреть журналы можно так:
journalctl -u php-fpm_exporter -f
Сбор метрик
Теперь, когда PHP-FPM exporter запущен, пора настроить Prometheus на сбор метрик.
-
Откройте конфигурационный файл Prometheus (как правило,
prometheus.yml). -
Добавьте следующую конфигурацию задания:
- job_name: 'php-fpm-exporter' scrape_interval: 15s # Adjust based on your needs static_configs: - targets: ['ip_of_your_server:9253'] -
Сохраните изменения и перезапустите Prometheus:
sudo systemctl restart prometheus -
Убедитесь, что Prometheus собирает метрики, открыв страницу targets:
http://<your-prometheus-server>:9090/targets. Вы должны увидеть, что цель php-fpm-exporter имеет статус up. Если это не так, убедитесь, что экспортер запущен и что никакие правила файрвола не блокируют соединение.
Проверка настройки в Grafana
Как только Prometheus начнёт успешно собирать метрики, вы сможете создавать визуализации в Grafana.
Добавление Prometheus как источника данных
- Войдите в свой экземпляр Grafana.
- Перейдите в Settings → Data Sources.
- Нажмите Add Data Source и выберите Prometheus.
-
Укажите URL Prometheus (например,
http://<your-prometheus-server>:9090). - Нажмите Save & Test, чтобы подтвердить соединение.
Если всё работает как надо, вы увидите сообщение об успешном добавлении источника данных.
Успешного мониторинга