Когда ваше PHP-приложение внезапно перестаёт работать, а пользователи пишут в поддержку, вы хотите знать, что произошло. Без мониторинга и логирования вы будете как детектив без улик: гадать, тыкать пальцем в небо и, скорее всего, не найти причину. В этой статье я расскажу, как правильно настроить логирование и мониторинг в PHP, чтобы вы всегда были в курсе состояния своего кода. Будет просто, с примерами и без лишней воды.

Digital-студия WNDER

Зачем вам логирование и мониторинг: история одной ошибки

Представьте: у вас интернет-магазин на 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