Мониторинг приложений 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).
Также в библиотеке
Отправка email на Swift (iOS/macOS): MFMailComposeViewController и SMTP
OAuth клиент для Node.js: реализация авторизации через Google и GitHub
ring для Rust: полное руководство с примерами
Работа с CSV в Swift (iOS/macOS) — библиотеки и примеры кода
Обработка и парсинг Markdown в PHP: библиотеки и примеры