Мониторинг PHP-FPM в Prometheus

Алгоритм действий состоит из следующих шагов:

1.Настройка PHP-FPM на отдачу статусной страницы
2.Настройка Nginx на поддержку статусной страницы PHP-FPM
3.Запуск PHP-FPM-экспортера для сбора метрик с PHP-FPM и отдачи их Prometheus-у
4.Настройка Prometheus-а для сбора метрик с PHP-FPM-экспортера
5.Импортирование/настройка dashboard Grafana для визуализации метрик
6.Настрйка правил Prometheus для мониторинга PHP-FPM показателей

Описание собираемых параметров с помощью статусной страницы в PHP-FPM изложено ранее в статье

 

1.Настройка PHP-FPM на отдачу статусной страницы

Перезапускаем php-fpm контейнер,чтобы применились настройки

В данном случае каталог php-fpm.d в Docker-контейнер монтируется с хоста через volume, поэтому достаточно перезапусить контейнер. Если этот каталог копируется при сборке образа в Dockerfile-е, тогда необходимо пересобирать образ контейнера заново и запускать контейнер с новым образом

 

2.Настройка Nginx на поддержку статусной страницы PHP-FPM
Добавляем поддержку php-fpm URL-а в дефолтном хосте
Важно разрешит доступ к статусной странице Nginx для docker-подсети( 172.16.0.0/12)
Запрос на php-fpm контейнер будет идти с nginx-контейнера,который проксирует запрос при поступлении на nginx запроса типа /fpm_status или /fpm_ping

Проверяем синтаксис конфигурационного файла nginx

Перегружаем nginx

Заходим в любой контейнер, который находится в одной сети с nginx-контейнером + имеет установленный curl и проверяем доступность статусной страницы PHP-FPM путем отправки запроса на установленный ранее location в Nginx
Например, выполним запрос с самого php-fpm-контейнера

 

3.Запуск PHP-FPM-экспортера для сбора метрик с PHP-FPM и отдачи их Prometheus-у

Если не используется docker-compose
php-fpm-экспортер запускаем в той же docker-сети, в которой и запущен nginx-контейнер,чтобы средствами Docker-а экспортер смог разименовать имя nginx-контейнера в его IP-адрес и подключиться по этому IP-адресу для отправки на него запроса для получения статусной страницы php-fpm http://nginx/fpm_status

Если используется docker-compose
В данном случае nginx-exporter добавим в docker-compose, с помощью которого запущенны различные приложения, включая nginx, куда направляет свой запрос php-fpm-экспортер для сбора метрик
Добавляем php-fpm-exporter в docker-compose.yml

В качестве command передаются пару аргументов:

– URL, по которому доступна статусная страница PHP-FPM( для которой мы настраивали соответственно Nginx и PHP-FPM) (по дефолту используется «http://127.0.0.1:9000/status»)

– на каких сетевых интерфейсах и порте слушать запросы для сбора метрик с php-fpm-экспортера( по умолчанию используется «127.0.0.1:8080»)
Мне необходимо прокинуть порт,на котором слушает запросы php-fpm-exporter(дефолтный 8080) наружу на, например, туннельный IP-адрес(10.103.90.1) и на порт, например,9114, чтобы Prometheus смог подключиться к с php-fpm-экспортеру для сбора метрик с него.

Проверка синтаксиса docker-compose.yml файла

Создание и запуск php-fpm-exporter сервиса

Проверка корректности запуска php-fpm-exporter

Проверка доступности метрик с php-fpm-exporter-а

С мониторинг хоста

Получаем такой же успешный ответ

 

4.Настройка Prometheus-а для сбора метрик с PHP-FPM-экспортера

Добавляем php-fpm-экпортер в service discovery файл

Подключаем этот service discovery файл в Prometheus

Проверка синтаксиса конфиг.файла Prometheus и файлов с правилами

Перечитываем конф.файл Prometheus

После чего проверяем в Prometheus наличие новой цели для мониторинга
Prometheus->Status->Target->

 

5.Импортирование/настройка dashboard Grafana для визуализации метрик
В Grafana импортируем dashboard отсюда
https://grafana.com/grafana/dashboards/3901

Я изменил импортированный по вышеуказанной ссылке дашбоард
PHP-FPM-dashboard.zip

 

6.Настрйка правил Prometheus для мониторинга PHP-FPM показателей
Добавление нескольких правил для мониторинга PHP-FPM
1.Запущен ли PHP-FPM (php-fpm_is_running)
2.Относительное увеличение обработанных запросов(свидетельствует об увеличении полезной нагрузки/атаки DOS/DDOS и т.д.)(php-fpm_high_number_accepted_connections)
3.Увеличение параметра максимального количества подключений(php-fpm_number_maximun_active_processes)
4.Увеличение параметра достижения лимита количества дочерних процессов(php-fpm_max_children_reached_total)


Источник:

https://github.com/bakins/php-fpm-exporter
https://github.com/bakins/php-fpm-exporter/releases
https://grafana.com/grafana/dashboards/3901

Комментирование и размещение ссылок запрещено.

Комментарии закрыты.

Яндекс.Метрика