Цикл наших статей по идеальному месту администратора продолжается. Сначала давайте вспомним, про что мы писали до этого:
В предыдущей статье мы познакомились с утилитами, с помощью которых можно анализировать логи. В данной статье мы разберём несколько примеров с анализом логов системы DIRECTUM.
Наверное, каждому администратору знакома ситуация, когда в логах обнаруживаешь ошибку, но спросить у работника, получившего ошибку, ничего не можешь. Это может случиться, когда работник, например, находится в отпуске в другой стране. Поэтому задача работы с логами усложняется: администратору нужно самостоятельно воспроизвести действия пользователя, не спрашивая об этом самого пользователя. Существует довольно простой способ разобраться с лог-файлами системы, именно этим мы и займёмся.
В предыдущей статье мы выделили 9 шагов в пункте «Порядок анализа»:
В статье будет подробно рассмотрен 8 шаг анализа логов.
Чтобы проанализировать лог-файл ошибки, необходимо знать его структуру. Поэтому сначала рассмотрим структуру записи в лог на примере утилиты SBLogViewer. Её мы рассматривали в предыдущей статье – это утилита от наших разработчиков, которая парсит лог-файл. Ссылки на скачивание есть в предыдущей статье.
Открываем лог в Notepad ++ и применяем к нему стандартный синтаксис Ada (Синтаксисы -> A -> Ada). Делаем перенос по строкам, чтобы строки умещались в экран (Вид -> Перенос строк) и получаем примерно то, что представлено на скрине ниже.
Смотрим на нижнюю строчку и видим, что всё происходило в процессе SBRte.exe в компоненте REPORTS#ctReference (написано снизу). Это значит, что ошибка возникла при работе пользователя в компоненте "Разработка отчётов". Пользователь ошибку видел. Класс исключения (сверху) – EInvalidOp. Какая-то операция выполнилась неправильно (Invalid Operation).
Теперь, узнав полезную информацию об ошибке, можно проанализировать её стек, чтобы попытаться воспроизвести действия пользователя. Правильно начинать анализировать стек вызовов снизу-вверх, потому что он имеет структуру дерева: чем выше по нему поднимаемся – тем меньше происходящие события, чем ниже – тем крупнее. Процессы, записанные внизу стека имеют в себе много составляющих - поэтому они считаются крупными. Чем выше мы поднимаемся по стеку, тем лучше понимаем, из-за какого конкретного процесса произошла запись в лог. Для чтения логов не обязательно разбираться в структуре ООП: что такое модули, классы, пространства имён, сборки, методы и т.д. Достаточно просто разбираться в английском языке, т.к. названия событий обычно говорят сами за себя. Ремарка: если запись начинается с нескольких заглавных букв, то, вероятно, это действие происходит в нашей платформе IS-Builder, именно их и стоит анализировать в логах. Анализируем:
В нижней части не найдутся конкретные процессы, в которых происходили ошибки, но можно примерно понять, в какой части системы они были. В данном случае всё начинается с записейи Forms, которая несёт смысл визуальных форм, далее исобытия переходят в Controls – понимаем, что это контроли на визуальных формах (может быть, кнопки на ленте или записи в списке – это не так важно), видим запись DblClick – пользователь дважды нажал мышкой по какому-то из контролей.
После предыдущих действий запустились системные операции (System) – их мы пропускаем, т.к. системные ошибки вряд ли встретятся в наших логах. Можно дважды кликнуть по надписи System, и Notepad ++ подсветит данное слово во всём лог-файле – тогда будет визуально понятно, до какого момента можно не смотреть запись лога (или же можно с комбинацией Ctrl+F выделить слово и найти его во всем документе - удобно, если лог не помещается в экран).
После системных процессов встречается ошибка действия «RunAction» в справочнике – это действие содержит некий код, в третьей строке которого вызывается сам отчёт. А выше в логе, почти сразу встречается другая ошибка уже внутри отчета, в строке 539. Она же встречается в самом конце лога (то есть вверху).
После первого повторения конечной ошибки очень много действий связано с SBInter (на рисунке подсвечено слово SBInter, и Notepad ++ сам его подсветил) – это интерпретатор кода ISBL. Понимаем, что запускаются и проводятся какие-то вычисления на ISBL. Доходим до верха и теперь становится понятно, что после вычислений в отчёте "MBAnAccRpt@PUMAnnualPurchaseFromSME" (подсвечено серым цветом на рисунке) возникла ошибка (Invalid floating point operation), связанная с операцией с плавающей точкой.
Можно восстановить события: пользователь кликнул по кнопке (RunAction) в справочнике «Отчёты», чтобы сформировать отчёт (MBAnAccRpt@PUMAnnualPurchaseFromSME). Запустился расчет отчёта, начали выполняться вычисления, которые привели к ошибке в операции с плавающей точкой в 539 строке. Администратору понятно, что пользователь всё делал правильно. Следующим шагом будет открыть этот отчёт, найти в нём строку с ошибкой, разобраться, какие вычисления происходят в ней и какая может быть ошибка в операции с числами.
Как видите, для чтения логов не обязательно быть специалистом в области разработки, достаточно быть просто внимательным администратором, который в случае чего может воспользоваться простым Google-переводчиком, чтобы понять значение указанных событий. Качественный анализ лог-файлов позволяет разбираться в важных деталях, строить верные гипотезы. Благодаря этому сильно экономится время на устранение инцидентов.
По традиции ждём ваших комментариев с best practice по анализу логов.
Авторизуйтесь, чтобы написать комментарий