Статьи

Более эффективная регистрация PHP с Loggly

Эта статья была спонсирована Loggly. Спасибо за поддержку спонсоров, которые делают возможным использование SitePoint.

Сервер перегружен, библиотека выдает исключение, ошибка при отправке электронной почты: эти ошибки, к сожалению, являются частью любой системы. Если вы отвечаете за то, чтобы система работала хорошо, это все равно холодный комфорт. Более того, я уверен, что у вас уже есть все данные, необходимые для их решения, которые хранятся в ваших лог-файлах.

Но доступ к этим данным на самом деле не поможет, если у вас нет способа хранить, обрабатывать и анализировать эти данные. В этой статье я объясню, как более эффективно использовать эти данные, используя библиотеку журналов PHP с соответствующим решением для управления журналами (в данном случае, Loggly). Я также покажу пример того, как использовать сервис управления журналами для упрощения их хранения и анализа.

PHP логирование

При входе в систему с помощью PHP мы склонны использовать функции error_log и trigger_error , или мы можем использовать обработчик ошибок, чтобы сделать процесс регистрации более общим. Если вы решите сделать это таким образом, вам нужно будет обернуть свои функции внутри какого-либо объекта, чтобы сделать вещи более чистыми и гибкими. Вы также можете переслать ваши журналы непосредственно в вашу систему для их обработки, используя функцию syslog .

openlog('php', LOG\_CONS | LOG\_NDELAY | LOG\_PID, LOG\_USER | LOG\_PERROR); syslog(LOG\_ERR, 'Error!'); syslog(LOG\_INFO, 'Hello World!'); closelog();

Но что бы вы сделали, если бы вам приходилось регистрироваться в нескольких местах одновременно или вы отправляли журналы в определенный сервис в зависимости от уровня ошибки? Вместо использования встроенных инструментов часто проще использовать библиотеки журналов.

Почему я использую монолог

Хотя некоторые рекомендуемые библиотеки, такие как log4php , KLogger и Monolog пытаются решить эти распространенные проблемы, у них есть несколько ограничений, и Monolog имеет много преимуществ перед ними.

Обязательно ознакомьтесь с документацией для получения более подробной информации о пакете. Самые популярные фреймворки включают Monolog из коробки, поэтому проверьте полный список в документации . Если у вас не установлен Monolog, вы можете добавить его в проект с помощью Composer.

 composer require monolog/monolog

Проблемы лесозаготовок в масштабе

Поскольку ведение журнала требует записи на диск, создания резервных копий и поиска файлов, некоторые компании создают отдельный сервис для обработки задания (обычно набор скриптов или приложений для поиска файлов в поиске информации при возникновении какой-либо ошибки). По мере расширения вашей компании или службы это может быстро стать кошмаром для ваших разработчиков и аналитиков. Другой, более качественный, альтернативный вариант — облачный сервис для хранения и анализа журналов, и это имеет много преимуществ, о чем мы поговорим далее в этой статье.

Что такое Loggly?

Существует несколько служб управления журналами, которые облегчат хранение и анализ журналов. Loggly является самым популярным и имеет несколько способов интеграции с PHP. Как только Loggly получит ваши журналы, вы сможете искать, группировать и визуализировать ваши данные действительно впечатляющим образом. Вы можете попробовать это бесплатно . Вы платите, только если у вас есть значительный трафик на вашем сайте. Давайте начнем с рассмотрения того, как установить его на свой сервер, чтобы отслеживать системные журналы.

Использование Loggly с Monolog

Если вы решили использовать библиотеку пакетов Monolog для процесса регистрации, очень легко интегрировать ее с любой службой управления журналами, включая Loggly.

По умолчанию он поставляется с LogglyHandler для Loggly.

 $logger = new \Monolog\Logger('local_test_app'); $logger->pushHandler(new \Monolog\Handler\LogglyHandler('YOUR_TOKEN/tag/monolog'));

После создания экземпляра Monolog мы добавим наш обработчик в список зарегистрированных обработчиков, и вам нужно будет предоставить свой токен, как упоминалось ранее. Часть тега необязательна, но всегда полезно отделить записи журнала, пометив их соответствующим образом. Теперь мы готовы начать входить в наш сервис, используя Monolog.

 $logger->addInfo("Info test from monolog"); //$logger->addWarning("Warning test from monolog");

Логгли и Монолог

Loggly с Laravel

Поскольку Laravel использует Monolog для процесса регистрации, мы можем легко привязать к нему наш обработчик.

 $handler = new \Monolog\Handler\LogglyHandler('YOUR_TOKEN/tag/monolog'); $logger = Log::getMonolog(); $logger->pushHandler($handler); // using the Log facade Log::info("Test from Laravel"); Log::warning("Test from Laravel");

Настройка Loggly на Heroku

Когда вы перемещаете свое приложение в производство, вы хотите убедиться, что отслеживание журналов работает правильно. В этом разделе мы собираемся присоединить Loggly к нашему приложению Heroku. Heroku использует Log Drains, чтобы помочь вам перенаправить ваши журналы во внешнюю службу ведения журналов. Вы можете проверить документацию для более подробной информации о процессе установки.

 heroku drains:add https://logs-01.loggly.com/bulk/TOKEN/tag/heroku --app HEROKU_APP_NAME

Вам необходимо обновить токен, TOKEN HEROKU_APP_NAME

URL-адрес стока заканчивается tag/heroku

Loggly и Heroku

Loggly может быть легко интегрирован с любым внешним сервисом, таким как Heroku. Проверьте документацию Loggly для обзора методов передачи журналов и доступных сценариев или библиотек .

Анализ журналов с Loggly

Теперь, когда мы обсудили, как отправлять ваши журналы в Loggly, мы можем приступить к анализу и работе с нашими данными. Страница поиска предоставляет набор инструментов для фильтрации, анализа и визуализации наших журналов.

Страница поиска Loggly

Панель инструментов показывает график ваших событий вместе со списком журналов внизу. В верхней части страницы находятся окно поиска и диапазон дат для фильтрации событий. Вы можете выбрать последние 30 минут или указать настраиваемый диапазон дат, например, и щелкнуть поиск для подтверждения.

Фильтрация журналов

Вы можете использовать входные данные поиска для фильтрации данных, используя определенный термин, например «электронная почта» или «событие_ *». Loggly будет искать внутри тела ваших записей журнала и отображать результат в нижней части страницы. Вы также можете использовать поля для поиска, например «tag: monolog», чтобы отфильтровать события, отправленные ранее из Monolog. Левое боковое меню называется Dynamic Field Explorer, и оно может помочь вам определить доступные фильтры полей.

Полевой исследователь Loggly

Давайте рассмотрим следующие примеры, чтобы лучше понять, как анализировать журналы.

Внутренние ошибки сервера

Внутренняя ошибка сервера выдается, когда вашему серверу не удалось обработать действительный запрос от пользователя. В PHP подробности об этой ошибке можно найти в ваших журналах Apache. Если вы зарегистрируете обработчик ошибок с помощью PHP, вы можете сгруппировать свои собственные файлы журналов, чтобы вы могли анализировать их и исправлять ошибки в соответствии с сообщением журнала.

Вы можете использовать виджет Field Explorer в левой части страницы, чтобы отфильтровать журналы, используя код состояния apache 5XX Поиск может быть конкретным, например «apache.status: 500», или вы можете сделать его более общим, например «apache.status: [500–599]».

Внутренние оповещения об ошибках сервера

Фатальные ошибки

В PHP при возникновении фатальной ошибки программа останавливает выполнение и регистрирует ошибку в вашей системе. Поскольку в работе не должно возникать фатальных ошибок, Loggly предоставляет простой способ отслеживать серьезность ошибок из разных источников. Термин «syslog.appName: php» будет отображать только журналы PHP, теперь нам нужно отображать ошибки определенной серьезности, используя термин syslog.severity: Error, мы также можем указать диапазон, например «syslog.severity: [Warning TO Error» ]». Вы можете прочитать больше о списке доступных полей в документации .

 syslog.appName:php AND syslog.severity:Error

В большинстве случаев мы отображаем результаты в виде списка, но вы можете использовать другой график из списка диаграмм внизу страницы.

Круговая диаграмма, показывающая серьезность оповещения

Оповещения

Одна из моих любимых функций в Loggly — это инструмент оповещений. Вы можете настроить Loggly на отправку уведомлений на вашу электронную почту или другую службу всякий раз, когда в вашем приложении происходит какое-либо действие. Давайте рассмотрим процесс подробно.

Сначала вам нужно создать новый поиск и сохранить его. Давайте возьмем такой поиск, например: «syslog.appName: php AND php.level:« Fatal Error »»

Это покажет нам список фатальных ошибок PHP в нашей системе. Далее нам нужно сохранить критерии поиска. Нажмите на маленькую звездочку в правом верхнем углу страницы панели инструментов, выберите пункт «Сохранить этот поиск как…» и назовите поиск.

Фатальные ошибки

Добавление уведомления о фатальных ошибках

Теперь мы можем перейти к списку предупреждений и нажать «Добавить новый», чтобы создать новый. После того, как вы дадите имя и описание своему предупреждению, вы можете выбрать сохраненный поиск из списка и условие (Предупреждение, если число>> 1 в течение 5 минут). Для моего примера я отправлю уведомление по электронной почте, но если у вас есть служба, которая автоматически передает ошибку вашей команде для проверки, вы можете настроить ее для отправки на конечную точку. Вы можете прочитать больше об оповещениях в документации .

Уведомление о фатальной ошибке

Вывод

Loggly может изменить способ ведения ваших журналов, от поиска регулярных выражений до архивирования. Сервис также имеет отличный UX, и документация очень проста, покрывая большинство возможностей. Вы можете начать с бесплатной пробной версии, чтобы протестировать все функции. Если у вас есть какие-либо вопросы, не стесняйтесь размещать их ниже, и я сделаю все возможное, чтобы ответить на них.

Как вы делаете логирование PHP проще?