Мониторинг PHP-приложений: инструменты и практики для разработчика

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Мониторинг приложений PHP: от базовых метрик до продвинутого профилирования

Мониторинг PHP-приложений — это не просто «смотреть, не упал ли сайт». Это комплексный процесс сбора, анализа и визуализации данных о работе кода, сервера и базы данных. Для образовательного портала pythonlib.ru (ориентированного на PHP) мы собрали ключевые инструменты и методики, которые помогут вам держать руку на пульсе вашего проекта.

Зачем мониторить PHP?

  • Обнаружение узких мест: медленные запросы к БД, долгие циклы, неоптимальные алгоритмы.
  • Предупреждение сбоев: фатальные ошибки, превышение лимитов памяти, нехватка дискового пространства.
  • Анализ пользовательского опыта: время загрузки страниц, количество запросов в секунду (RPS), процент ошибок.
  • Безопасность: подозрительные паттерны запросов, атаки на инъекции.

Основные инструменты мониторинга PHP

1. Xdebug — классика профилирования

Xdebug — это расширение для PHP, которое предоставляет трассировку стека, профилирование и отладку. Для мониторинга используйте режим профилирования (profiler_enable_trigger).

Пример конфигурации php.ini:

zend_extension=xdebug.so
xdebug.mode=profile
xdebug.output_dir=/tmp/xdebug
xdebug.profiler_output_name=cachegrind.out.%p

Результат — файлы cachegrind.out, которые можно анализировать с помощью KCachegrind или Webgrind.

2. Pinba — мониторинг в реальном времени

Pinba (PHP Is Not A Bottleneck Anymore) — это легковесный сборщик метрик, работающий как модуль PHP и сервер на C. Он отправляет данные о времени выполнения, памяти, количестве запросов и ошибках в MySQL.

Пример использования в коде:

// Установка таймера
pinba_timer_start('my_script');

// Ваш код
$data = heavyCalculation();

// Остановка таймера и отправка данных
pinba_timer_stop('my_script');

// Дополнительные метки
pinba_script_name_set('api/v1/users');
pinba_hostname_set('web-01');

Данные автоматически попадают в таблицы Pinba, откуда их можно визуализировать в Grafana.

3. Tideways — коммерческий профилировщик

Tideways (ранее XHProf) — это расширение для PHP, которое позволяет профилировать продакшн-окружение с минимальными накладными расходами. Он собирает:

  • Время выполнения каждой функции.
  • Количество вызовов.
  • Потребление памяти.

Установка через Composer:

composer require tideways/php-xhprof-extension

Запуск профилирования:

$profiler = new Tideways\Profiler();
$profiler->start();

// Ваш код
$result = expensiveOperation();

$profiler->stop();
$data = $profiler->getCallgraph(); // данные для визуализации

Логирование ошибок: основа мониторинга

Без качественного логирования мониторинг бесполезен. Используйте PSR-3 совместимые библиотеки, например Monolog.

Пример настройки Monolog для отправки критических ошибок в Telegram:

use Monolog\Logger;
use Monolog\Handler\TelegramBotHandler;

$logger = new Logger('app');
$handler = new TelegramBotHandler(
    'YOUR_BOT_TOKEN',
    'YOUR_CHAT_ID',
    Logger::CRITICAL
);
$logger->pushHandler($handler);

try {
    // опасный код
} catch (\Throwable $e) {
    $logger->critical('Ошибка в модуле оплаты', [
        'exception' => $e,
        'user_id' => $userId,
        'ip' => $_SERVER['REMOTE_ADDR']
    ]);
}

Метрики для отслеживания

Вот минимальный набор метрик для любого PHP-приложения:

  • Время ответа (Response Time) — среднее, 95-й и 99-й перцентили.
  • Количество запросов в минуту (RPM).
  • Ошибки HTTP (4xx, 5xx).
  • Использование памяти PHP (memory_get_peak_usage()).
  • Время выполнения SQL-запросов (через логи MySQL или ORM).

Рекомендаций