x
 
Василий
12 апреля 2018
Советы почтой каждую неделю
Пожалуйста, получите наше письмо, чтобы подтвердить свой адрес:
Вы подписаны на «Советы за неделю»:

Как бороться с багами? Часть третья: логи


Логи — это днев­ник при­ло­же­ния, в кото­рый запи­сы­вают что, где и когда про­изо­шло. В при­ло­же­ниях на Рель­сах каж­дый ХТТП‑запрос зано­сится в лог с допол­ни­тель­ной инфор­ма­цией: айпи‑адрес, урл, тайм­штамп, пара­метры, выпол­нен­ные SQL‑запросы и общее время выполнения.

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

В Школьном кабинете

Пре­по­да­ва­тель выстав­ляет оценки за зада­ние. Ста­вит чет­вёрку за логику, чет­вёрку за идею. Меняет мне­ние и исправ­ляет оценку за идею на тройку. Каби­нет счи­тает сред­нее и вме­сто 3,5 пока­зы­вает 3,66.

В логах видно, что за идею при­шли две оценки: зату­пил интер­нет, оценки при­шли одно­вре­менно. Сер­вер начал одно­вре­менно обра­ба­ты­вать обе оценки в отдель­ных тран­зак­циях. Когда сер­вер закон­чил, оце­нок стало три: две за логику и одна за идею.

Также логи помо­гают полу­чить недо­ста­ю­щую инфор­ма­цию о труд­но­уло­ви­мых багах:

В Издательстве бюро

В чер­но­ви­ках книг про­ис­хо­дит мистика: ино­гда книга откры­ва­ется и начи­нает пере­пры­ги­вать между раз­во­ро­тами, при скролле раз­во­роты мигают и не обнов­ляют урл. Про­блема появ­ля­ется только в Сафари, после реф­реша всё встает на место.

Пыта­емся повто­рить и изо­ли­ро­вать про­блему: локально про­блема не повто­ря­ется, вруч­ную повто­рить не полу­ча­ется. Раз­ра­бот­чики на две недели пере­хо­дят на Сафари, чтобы повто­рить баг — ни одного случая.

Пони­маем, что нам не хва­тает инфор­ма­ции о про­блеме. Добав­ляем в книги внут­рен­ний лог: в каком порядке и когда книга загру­жает‑выгру­жает раз­во­роты. Про­сим помощи у авто­ров: если автор встре­чает «прыжки», соби­рает и отправ­ляет лог нам.

Даже спу­стя два десятка таких отчё­тов не пони­маем, в чём про­блема. Добав­ляем ещё инфор­ма­ции в лог: когда книга запу­сти­лась, в каких коор­ди­на­тах были раз­во­роты, меня­лись ли раз­меры окна.

В новом логе обна­ру­жи­ваем, что книга ини­ци­а­ли­зи­ру­ется два­жды: одно­вре­менно рабо­тают две книги в одном окне. Это объ­яс­няет прыжки и мига­ния: книги сде­лали рас­чёты в раз­ных коор­ди­на­тах и борются за загрузку раз­во­ро­тов, кото­рые, как им кажется, должны быть сей­час видимы.

За ини­ци­а­ли­за­цию книг отве­чает скрипт, дожи­да­ю­щийся загрузки шриф­тов. Когда скрипт не дожи­дался загрузки шриф­тов в разум­ное время, он насильно запус­кал книгу, не отме­няя преды­ду­щих инструк­ций. Когда шрифты догру­жа­лись, книга запус­ка­лась ещё раз.

Кроме того, логи можно исполь­зо­вать для аудита и предот­вра­ще­ния ошибок:

В Издательстве бюро

В книж­ном билинге все опе­ра­ции, собы­тия и пла­тежи по под­писке чита­теля запи­сы­ва­ются в лог в БД. Инфор­ма­цию о пла­те­жах исполь­зует Ауди­тор — внут­рен­ний сер­вис, ничего не зна­ю­щей о логике билинга и не зави­ся­щий от его багов.

Ауди­тор ищет подо­зри­тель­ные пат­терны в логе списаний:

  • под­писка активна, а послед­ний пла­теж несколько меся­цев назад;
  • с послед­него спи­са­ния с поль­зо­ва­теля про­шло меньше 20 дней;
  • послед­ний пла­теж — больше месяца назад, и дру­гих попы­ток нет;
  • слиш­ком много неудач­ных спи­са­ний в месяц;
  • слиш­ком много неудач­ных спи­са­ний, а под­писка активна.

Если Ауди­тор обна­ру­жи­вает про­блему, он бло­ки­рует пла­тежи, оста­нав­ли­вает оче­редь спи­са­ний и бьёт тревогу.

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

Рельсы поме­чают все сооб­ще­ния, свя­зан­ные с запро­сом, тегом — уни­каль­ным иден­ти­фи­ка­то­ром запроса

Ещё по теме

P. S. Это был совет о веб‑разработке. Хотите знать всё о коде, тестах, фронтенд‑разработке, цеэсэсе, яваскрипте, рельсах и джейде? Присылайте вопросы.
Вёрстка и прототипирование — дисциплина Школы дизайнеров. Набор закрыт. Оставьте почту, и мы напишем вам, когда откроется следующий набор.
 

Поделиться
Отправить

Цель рубрики — обсуждение вопросов дизайна всех видов, текста в дизайне и взаимоотношений дизайнеров с клиентами.

Мы публикуем комментарии, которые добавляют к уже сказанному новые мысли и хорошие примеры. Мы ожидаем, что такие комментарии составят около 20% от общего числа.

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

Вот такой веб 2.0.

Как следить за качеством кода? Часть вторая: метрики Что такое СВГ и как его использовать в ХТМЛ-вёрстке? 1 Джанго или Рельсы? Как следить за качеством кода? Часть первая: зачем




Недавно всплыло

Хочу научиться сторителлингу 12 В бюро есть таймтрекинг для сотрудников? 5 2 Как совместить информационный стиль и текст для поисковиков? 7