Как использовать 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

Настройка

Эта часть доставила мне немало хлопот (оправдание — было уже поздно), что и подтолкнуло меня написать это руководство на следующее утро после настройки.

  1. Откройте конфигурационный файл PHP-FPM (замените 8.3 на вашу версию PHP):
    vi /etc/php/8.3/fpm/pool.d/www.conf
    
  2. Внесите следующие изменения:
    1. Раскомментируйте режим listen:
      listen.mode = 0660
      
    2. Раскомментируйте status URI:
      pm.status_path = /status
      
    3. Убедитесь, что конфигурация сокета указывает на правильный путь (при необходимости замените 8.3 на вашу версию PHP):
      listen = /run/php/php8.3-fpm.sock
      
  3. Сохраните изменения и выйдите из редактора.
  4. Перезапустите службу 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 на сбор метрик.

  1. Откройте конфигурационный файл Prometheus (как правило, prometheus.yml).
  2. Добавьте следующую конфигурацию задания:
    - job_name: 'php-fpm-exporter'
      scrape_interval: 15s  # Adjust based on your needs
      static_configs:
        - targets: ['ip_of_your_server:9253']
    
  3. Сохраните изменения и перезапустите Prometheus:
    sudo systemctl restart prometheus
    
  4. Убедитесь, что Prometheus собирает метрики, открыв страницу targets: http://<your-prometheus-server>:9090/targets. Вы должны увидеть, что цель php-fpm-exporter имеет статус up. Если это не так, убедитесь, что экспортер запущен и что никакие правила файрвола не блокируют соединение.

Проверка настройки в Grafana

Как только Prometheus начнёт успешно собирать метрики, вы сможете создавать визуализации в Grafana.

Добавление Prometheus как источника данных

  1. Войдите в свой экземпляр Grafana.
  2. Перейдите в Settings → Data Sources.
  3. Нажмите Add Data Source и выберите Prometheus.
  4. Укажите URL Prometheus (например, http://<your-prometheus-server>:9090).
  5. Нажмите Save & Test, чтобы подтвердить соединение.

Если всё работает как надо, вы увидите сообщение об успешном добавлении источника данных.

Успешного мониторинга