Сервер Log Error Handler

В этой статье будет рассмотрен  Log Error Handler, мощный инструмент, разработанный командой EasyQA, для обнаружения и работы с багами на сервере.

Что такое Log Error Handler

Log Error Handler - это гем для выявления и обработки ошибок на вашем сервере.

Гем - это система управления пакетами для языка программирования Ruby, которая обеспечивает стандартный формат для программ и библиотек Ruby, инструменты, предназначенные для легкого управления установкой гемов, и сервера для их распространения.

Файл расширения .gem является общим архивом, внутри которого находятся файл спецификации и исходный код библиотеки в состоянии на момент выпуска.

Основные преимущества Log Error Handler:

  • Вы получаете установленную и интегрированную библиотеку Ruby on Rails со всеми необходимыми зависимостями.
  • Отстутствует операционнная зависимость платформы.
  • Экономия времени.
  • У вас есть возможность выполнять постоянный мониторинг активности ваших серверов.
  • Сообщение об уведомлении отправляется автоматически после обнаружения бага.

В настоящее время существует 3 варианта действий для выявления ошибок:

  • Ввести через консоль.
  • Записать в отдельный файл.
  • Отправить HTTP-запрос на веб-сайт.

LogErrorHandler

Инсталлирование Log Error Handler

1. Добавьте эту строчку в Gemfile вашего приложения:

gem 'log_error_handler'

И после этого, исполните:

$ bundle

2.  Инсталлируйте самостоятельно:

$ gem install log_error_handler

Использование Log Error Handler

Для того, чтобы гем начал работать, ему необходимо обеспечить непрерывный поток входных данных. Это можно сделать двумя способами:

1.Провести pipe к гему.Например:

$ rails s | log_error_handler

Это обеспечит вывод stdout вашей программы в stdin гема. Минус такого подхода заключается в том, что вы можете применить его только при запуске своей программы, в которой вы хотите отслеживать лог-файлы.

2. Указать путь к лог файлу вашей программы. Например:

$ log_error_handler -l log/development.log

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

Для корректного вывода лога, гему нужен уникальный идентификатор каждого запроса на сервер. Поскольку большинство веб серверов являются многопоточными, и каждый новый запрос обрабатывается в другом потоке, то для этого лучше всего подойдет thread identificator (tid). Для того, чтобы добавить этот уникальный идентификатор, например, в фреймворке Ruby on Rails нужно добавить только одну строку:

config.log_tags = [:object_id]

После этого в каждой строке выведенных логов выводится tid. Это выглядит примерно так:

Log Error Handler

Вы можете использовать RegEx, чтобы найти tid гема:/^\[\d+\]/.

Но если путь вывода tid отличается, вы можете задать его сами:

image

Например, если  tid находится в фигурных скобках, а не в начале строки:

$ log_error_handler -t /\\{\\d+\\}/

Если же RegEx набрано в консоли, нам нужна версия с двойным экраном. Гем обнаруживает, что запрос имеет ошибку, когда находит строку, которая соответствует RegExp ошибки:

image

Например, нам нужно определить не только ошибку 500, но и 404:

$ log_error_handler -e "/(500)|(404).*error/i"

Что бы проверить все значения по умолчанию следует ввести:

image

Время в настройках по умолчанию указывается в секундах.

Основные временные опции:

  • Опция «--not_modify_timeout» означает время, когда поток завершает запись логов в этот файл, если истекает время ожидания, и в течение этого времени файл не будет изменен, по крайней мере, один раз, файл будет отправлен на выход, а также файл будет удалён, еслив нём есть некоторые ошибки.
  • Опция «--log_file_tracker_waiting» показывает, как часто будет проходить цикл проверки временных файлов в каждом потоке.
  • Опция «--debug_mode»  обеспечивает вывод информации о считывании с stdin в stdout.

Ввод данных Log Error Handler

Как уже упоминалось выше, существует 3 способа ввода данных:

1. В stdout. Выполняется по умолчанию, если не указан ни один из других параметров вывода.

2. В файл, если был указан параметр:

image

Например:

$ log_error_handler -f error.log

3. В сеть. Для этого необходимо указать параметр:

image

Например:

$ log_error_handler -u https://app.geteasyqa.com/projects/upload_crashes

HTTP-post метод  используется для отправки данных по умолчанию, но его можно легко заменить:

image

Например:

$ log_error_handler -u https://app.geteasyqa.com/projects/upload_crashes -m put

Message по умолчанию является ключом, в котором находится баг, поэтому такой параметр отвечает за это значение:

image

Например:

$ log_error_handler -u https://app.geteasyqa.com/projects/upload_crashes -m put -k error

Если вместе с багом, вам нужно отправлять некоторые дополнительные параметры то их можно задать с помощью опций:

image

Или:

image

Например:

$ log_error_handler -u https://app.geteasyqa.com/projects/upload_crashes -m put -k error -a "{\"token\":\"uQF7ZYtHh9VDMXBaJojq\"}"

Перед отправкой все баги кодируются в Base64.

Итак, Вы узнали больше об этом инструменте. Почему бы не попробовать его использовать? Надеемся, Log Error Handler поможет вам в разработке и тестировании программного обеспечения. Было бы здорово узнать, что Вы думаете о нашем инструменте. Вы можете оставить свои замечания и пожелания на GitHub https://github.com/thinkmobiles/log_error_handler, или здесь ниже в комментариях.