Когда ваше PHP-приложение внезапно перестаёт работать, а пользователи пишут в поддержку, вы хотите знать, что произошло. Без мониторинга и логирования вы будете как детектив без улик: гадать, тыкать пальцем в небо и, скорее всего, не найти причину. В этой статье я расскажу, как правильно настроить логирование и мониторинг в PHP, чтобы вы всегда были в курсе состояния своего кода. Будет просто, с примерами и без лишней воды.
Зачем вам логирование и мониторинг: история одной ошибки
Представьте: у вас интернет-магазин на PHP. В один прекрасный день пользователи жалуются, что корзина не сохраняется. Вы открываете код, но видите идеальный код. Что делать? Без логов вы будете перебирать всё подряд: может, сессия не работает? Может, база данных отвалилась? А с логами вы за пять минут найдёте ошибку. Логирование — это запись событий, которые происходят в вашем приложении: ошибки, предупреждения, действия пользователей. Мониторинг — это наблюдение за этими логами и метриками, чтобы вовремя заметить проблемы. Вместе они дают вам полную картину.
Базовые инструменты: функция error_log и не только
В PHP есть встроенная функция error_log(), которая позволяет записывать сообщения в файл или в системный лог. Это самый простой способ начать. Например:
<?php
// Записываем ошибку в файл
$error_message = 'Не удалось подключиться к БД';
error_log($error_message, 3, '/var/log/my_app.log');
?>
Но хранить все ошибки в одном файле — не лучшая идея. Через месяц у вас будет мешанина. Лучше использовать системный лог (параметр 0), тогда PHP сам разложит всё по полочкам. Однако для серьёзных проектов этого мало. Нужны библиотеки, которые умеют форматировать, фильтровать и отправлять логи в разные места.
Современное логирование: PSR-3 и Monolog
Стандарт PSR-3 определяет интерфейс для логирования. Самая популярная библиотека — Monolog. Она позволяет писать логи в файлы, базы данных, Telegram, Slack и даже в облачные сервисы. Установить её просто через Composer:
composer require monolog/monolog
Пример использования:
<?php
require 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// Создаём логгер с именем 'my_app'
$log = new Logger('my_app');
// Добавляем обработчик, который пишет в файл
$log->pushHandler(new StreamHandler('/var/log/my_app.log', Logger::INFO));
// Пишем сообщение
$log->info('Пользователь залогинился');
$log->error('Ошибка при сохранении заказа');
?>
Monolog поддерживает разные уровни логирования: debug, info, notice, warning, error, critical, alert, emergency. Это помогает фильтровать важность сообщений. Вы можете настроить так, чтобы критические ошибки отправлялись вам на почту, а мелочи просто сохранялись в файл.
Мониторинг метрик и ошибок: от файлов к сервисам
Логи — это хорошо, но мониторинг — это ещё и метрики: время ответа, использование памяти, количество запросов. Для сбора метрик можно использовать такие сервисы, как Sentry, Grafana, Prometheus. Sentry — это как раз для отслеживания ошибок. Он автоматически собирает стектрейс, контекст и уведомляет вас в реальном времени. Подключается просто:
composer require sentry/sentry
Пример настройки:
<?php
\Sentry\init(['dsn' => 'https://your-dsn@sentry.io/123456']);
// Теперь все ошибки автоматически отправляются в Sentry
?>
Для метрик можно использовать библиотеку InfluxDB или просто писать в отдельную таблицу в БД. Главное — собирать данные и анализировать их. Например, если время ответа выросло в два раза, значит, что-то пошло не так.
Практические советы и лайфхаки
Вот несколько правил, которые я выработал за годы работы:
- Логируйте всё важное — но не перегружайте. Каждая операция с деньгами, авторизация, изменение данных — это обязательно.
- Используйте уровни — debug для разработки, info для обычных событий, error для проблем.
- Не храните логи в одном файле вечно — настройте ротацию. Monolog умеет это делать автоматически.
- Следите за ошибками проактивно — Sentry пришлёт уведомление, а вы разберётесь.
Также советую логировать не только ошибки, но и ключевые бизнес-события. Например, если пользователь оформил заказ, запишите это. Так вы сможете восстановить хронологию, если что-то пойдёт не так.
Сравнение инструментов: что выбрать
Вот таблица, чтобы было наглядно:
| Инструмент | Тип | Плюсы | Минусы |
|---|---|---|---|
| error_log | Встроенный | Простота, не требует установки | Ограниченные возможности, нет структуры |
| Monolog | Библиотека | Гибкость, много обработчиков, стандарт PSR-3 | Требует настройки |
| Sentry | Сервис | Автосбор ошибок, уведомления, стектрейсы | Платная подписка для больших объёмов |
| Grafana + Prometheus | Сервисы | Мощный мониторинг метрик, графики | Сложная настройка, требует времени |
Если вы новичок, начните с Monolog и Sentry. Это покроет 90% потребностей.
Что в итоге: резюме
Мониторинг и логирование — это не роскошь, а необходимость. Без них вы работаете вслепую. Начните с простого: настройте Monolog, пишите логи в файл, отправляйте критические ошибки в Sentry. Затем добавьте метрики. И помните: хороший лог — это тот, который помогает быстро найти проблему. Не перегружайте систему, но и не игнорируйте.
Студия WNDER



