Использование Sentry в контексте розничной сети

17.06.22

Администрирование - Мониторинг

В статье опишу свой опыт использования sentry.

Вводные

Розничная сеть 10+ магазинов, конфигурация Розница 2.3, доработки за счет расширений и дополнительных обработок.

Обычно обратную связь по ошибкам по рознице получают из заявок кассиров, что зачастую эмоционально и не структурированно. Часть ошибок "замалчивается", часть ошибок "терпится".

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

 

Вариант решения

Решил собрать информацию о происходящем по данным журнала регистрации (ЖР), отобрал по уровню "ошибка" и "предупреждение". В качестве инструмента агрегации и анализа выбрал Sentry https://sentry.io/welcome/, это не сборщик логов, а агрегатор ошибок, с упором на работу в клиентских приложениях к которому у разработчиков нет доступа. В обычном режиме при появлении ошибки сразу идет отправка сообщения в сервис. В контексте 1С централизовано обработать исключения проблематично, поэтому с определенной периодичностью выгружаю данные из журнала регистрации.

Базовая информация о Sentry описана в статьях:

Варианты работы с сервисом:

  • облачная версия, не бесплатном тарифе есть ограничение на количество событий в минуту, и общее ограничение на количество в месяц.
  • локальная версия, разворачивается с использованием Docker https://develop.sentry.dev/self-hosted/, пытаться собирать "руками" для первого захода не рекомендую, архитектура: https://develop.sentry.dev/architecture/.

В рамках данного проекта развернул локально. Добавил обработчики выгрузки в расширение, запуск по расписанию организовал через внешнюю обработку.

После загрузки "в лоб":

  • Увидел что присутствуют "лишние" записи, например ошибки обмена РИБ (номер сообщения) - правка типового функционала, перевод в уровень "информация", состояние обмена проще мониторить через опрос состояния и сбора количества конфликтов.
  • Формат сообщений "кто в лес кто по дрова", дополнение на уровне выгрузки, изменение кода. Посмотрев поиском по "ЗаписьЖурналаРегистрации", добрым словом вспомнил //infostart.ru/public/671835/ и с пониманием что типовые до подобного уровня дорастут не скоро по необходимости делаю правки.

Агрегатор начинает быть полезен при соблюдении формата описания ошибки, пример когда программист свалил все в кучу (блок обмена с внешней системой):

 

 

Работать с таким вариантом неудобно, но чуть легче, чем руками перебирать ЖР на магазинах.

Из полезного получил распределение ошибок по магазинам, но для нормальной работы сервера нужно нормально подписать, выделил красным "обычное состояние" из которого непонятно где произошла ошибка. На проекте сделали за счет централизованной настройки DNS перенаправлением по поддоменам https://habr.com/ru/post/505064/.

 
 распределение по ПК

 

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

 
 скриншот

 

Правило писать в названии {ИмяМодуля}.{ИмяФункции} позволяет более точно группировать ошибки, но уровень "подфункций" так же нужен. На скриншоте ниже обе ошибки из за проблемы с DNS при подключении по FTP, но пока откроешь каждую не поймешь.

 
 ошибки обмена

 

Полезная информация о подходе к форматам логирования https://www.youtube.com/watch?v=DlLBH5QW9Ng.

 

Контекст ошибки

При разборе ошибок нужен контекст, формат сообщений https://develop.sentry.dev/sdk/event-payloads/

  • Параметры системы взял из "Новый СистемнаяИнформация".
  • При ошибках выполнения имеем стектрейс, коллеги его записывали в "Breadcrumbs Interface", что неверно, записал в "Stack Trace Interface".
  • Из "РасширенияКонфигурации.Получить()" получил список расширений, записал их в "modules".
  • Из стектрейса можно получить название расширения, его зафиксировал в extension и release, более корректно будет маршрутизировать ошибки каждого расширения в отдельный проект.
  • Если это не ошибка выполнения а просто запись в журнал, то дополняю комментарий названием расширения.
  • Если ошибка связана с HTTP запросом то дополняю комментарий описанием запроса, конвертируя его из формата КоннекторHTTP //infostart.ru/1c/articles/709325/

Дополнительно, к работе:

  • В Breadcrumbs по идее можно добавить порядок выполнения транзакции, как хранить его во время выполнения пока не придумал.
  • Возможно из "Детального описания ошибки" можно получить большее количество информации чем просто из "Описание ошибки"
  • В описание ошибки можно добавить значения ключевых переменных
  • формировать запись ЖР сразу с описанием контекста, тогда можно забирать данные и напраямую из файлов без потери качества.

 

Отправка данных

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

Из админки адрес получаю в формате "https://{host}/api/{project}/security/?sentry_key={key}", преобразую его к формату отправки сообщений.

 

Код

 
 общий модуль хк_Sentry
 
 модуль внешней обработки

 

Вывод

Данным инструментом можно собрать ошибки и распределить их по тикетам, которые передать ответственному.

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

 

Благодарю за внимание.

См. также

Мониторинг баз и серверов 1С

Журнал регистрации Мониторинг Платформа 1С v8.3 Платные (руб)

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

9000 руб.

28.08.2019    28507    10    21    

58

Конфигурация Session Monitor

Мониторинг Инструменты администратора БД Платформа 1С v8.3 Россия Платные (руб)

Конфигурация Session Monitor предназначена для мониторинга сервера 1С с целью отслеживания чрезмерной нагрузки от конкретных сеансов и скорости реакции рабочих процессов.

1500 руб.

01.12.2020    12508    25    0    

41

tempdb, почему она всё время растет?

Администрирование СУБД Мониторинг Бесплатно (free)

С проблемами распухания tempdb при работе с базой данных 1С регулярно сталкиваются и админы, и разработчики. О том, как мониторить, диагностировать и решать такие проблемы, на конференции Infostart Event 2021 Moscow Premiere рассказал Александр Криулин.

14.06.2023    7049    AlexKriulin    8    

78

Первый день архитектора 1С на новой работе

Мониторинг Сервера Администрирование СУБД Бесплатно (free)

Как быстро познакомиться с системой на новой работе или если вас пригласили провести аудит контура на 1С? О том, какие инструменты использовать для быстрой проверки настроек сервера 1С, сервера MS SQL и общей оценки инфраструктуры на производительность, на конференции Infostart Event 2021 Post-Apocalypse рассказал архитектор 1С Юрий Былинкин.

01.06.2023    9013    ardn    18    

71

Может, все-таки включим мониторинг?

Мониторинг Бесплатно (free)

Если с системой что-то может случиться, это рано или поздно случится. О том, как научиться узнавать о проблемах не только от пользователей, а, возможно, и прогнозировать их заранее, на конференции Infostart Event 2021 Moscow Premiere рассказал системный архитектор ООО «Серебряная пуля» Артем Кузнецов.

19.05.2023    6280    ktb    5    

59

Мобильный помощник эксперта 1С (приложение android, позволяющее строить отчеты на СКД по логам технологического журнала и не только)

Технологический журнал Мониторинг Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Приложение на мобильной платформе 1С Предприятие, позволяющее разбирать все, что может быть разобрано в командной строке linux, и выводить полученный результат типовыми методами системы компоновки данных. По мотивам направления Эксперт по технологическим вопросам

16.05.2023    2085    capitan    0    

18

Как я мониторинг разворачивал

Мониторинг Россия Абонемент ($m)

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

1 стартмани

10.05.2023    9651    andreysidor4uk    43    

134

Контроль расхода памяти сервера 1С:Предприятие 8

Мониторинг Платформа 1С v8.3 Россия Платные (руб)

Обработка позволяет использовать подобные КОРП-функциональности механизмы контроля расхода памяти (сеансом на 1 вызов и рабочими процессами), реагируя завершением "тяжелых" вызовов, перезапуском рабочих процессов при чрезмерном потреблении этого важного ресурса.

3600 руб.

03.05.2023    3921    2    0    

3
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. artbear 1437 17.06.22 12:27 Сейчас в теме
(0) Спасибо, интересная статья.
мы также юзаем Sentry, очень удобно выполнять анализ.
2. artbear 1437 17.06.22 12:47 Сейчас в теме
(0) только мы не используем анализ ЖР, используем механизм авто-отправки событий в сервис регистрации ошибок, штатный от 1С.

правда, 1С-ники в релизах 8.3.21 сломали авто-отправку клиентских ошибок, ждем правки в 22, ошибка зарегистрирована.
- но и полезное в 21 релизе сделали - авто-отправка ошибок сразу с сервера, например, из регл.заданий

так что подход с пост-анализом ЖР уже не имеет особого смысла )
22. genayo 05.08.22 08:57 Сейчас в теме
(2) А что за типовой механизм, что-то не гуглится...
3. ardn 579 17.06.22 13:12 Сейчас в теме
Спасибо за идею, попробую у себя!
5. artbear 1437 17.06.22 13:18 Сейчас в теме
(3) по Sentry на сайте уже несколько полезных статей
4. malikov_pro 1260 17.06.22 13:18 Сейчас в теме
(2) "механизм авто-отправки событий" - посмотрю как состыковать, дополню статью, у меня больше рег задания по обмену с сервисами, подключение торгового оборудования, пользователь по сути ошибок не видит. Почта России как то отключала свой сервис, а у меня не было корректной обработки ошибок, было "весело" наблюдать за 10к ошибок и желание исправить ошибку в выходной резко появилось.
6. artbear 1437 17.06.22 13:19 Сейчас в теме
(4) у нас есть ошибка с 60К срабатываний, которая живет уже 2 года )
7. malikov_pro 1260 17.06.22 13:36 Сейчас в теме
(6) Добавляйте ли в поток ошибок бизнесовые ошибки (пользователь ввел данные которые от него не ожидались или не в нужном формате)? Пробовали связать с Git? на сколько понимаю нужна правка путей в трассировке для сопоставления с форматом выгрузки.
9. artbear 1437 17.06.22 13:40 Сейчас в теме
(7) -
1 Добавляйте ли в поток ошибок бизнесовые ошибки (пользователь ввел данные которые от него не ожидались или не в нужном формате)?


Расшифруй. у нас отправка через сервис, в этот момент все, что есть, это ошибка от 1С.
какие еще бизнес-данные можно добавить и откуда их взять в авто-режиме?

2 Пробовали связать с Git? на сколько понимаю нужна правка путей в трассировке для сопоставления с форматом выгрузки.

не пробовали. я даже не знал, что есть такая интеграция )
ее цель какая? какие плюсы можно получить от интеграцией с Гит?
8. malikov_pro 1260 17.06.22 13:37 Сейчас в теме
(3) Критично наличие сборки в виде расширения или хватит примера кода в статье?
10. malikov_pro 1260 17.06.22 13:56 Сейчас в теме
(9) "Расшифруй."
Например, у меня кассир 2 раза считывает одну и туже маркировку, что есть ошибка, фиксирую в ЖР, после собираю и передаю логисту и директору магазина на рассмотрение.
В дисконтной карте вводят телефон в неверном формате, аналогичные действия, цель собрать как часто возникает ошибка, при превышении порога думать о системном изменении.

"ее цель какая?" - https://docs.sentry.io/product/integrations/source-code-mgmt/github/
В случае проблем, когда файлы в трассировке стека совпадают с файлами, включенными в коммиты, отправленные в Sentry, вы увидите подозрительную коммит со ссылкой на сам коммит.
Сильно зависит от версионирования (при любом изменении в хранилище изменять версию продукта/расширения).
11. artbear 1437 17.06.22 14:11 Сейчас в теме
(10)
Например, у меня кассир 2 раза считывает одну и туже маркировку, что есть ошибка, фиксирую в ЖР, после собираю и передаю логисту и директору магазина на рассмотрение.
В дисконтной карте вводят телефон в неверном формате, аналогичные действия, цель собрать как часто возникает ошибка, при превышении порога думать о системном изменении.


т.е. это обычная ошибка в ЖР, только какое-то спец.событие, да?
а далее обычный пост-анализ ошибок человеком и передача ошибок бизнес-пользователям или команде разработки, если количество ошибок перестает выходить за рамки случайных или неважных ошибок?

или что-то более автоматизированное?
12. akR00b 22 17.06.22 14:31 Сейчас в теме
Спасибо! Интересно, однозначно +
13. malikov_pro 1260 17.06.22 18:04 Сейчас в теме
(11) Верно описали. Без доп. автоматизации.
Пока административно борюсь с ответственными, просто игнорируют наличие ошибок, которые могут решить.
14. papami 55 18.06.22 13:26 Сейчас в теме
Во времена "затишья" можно и нужно такими штуками позаниматься. Узнаешь много интересного.
Я пару лет назад начал тоже встраивать сбор метрик в то, что дописывал. Только у меня нет задачи частотности.
Например, для всяких обменов, которые работают по регламенту, интересует последний удачный проход, и последняя ошибка (дата время). Для каких-то вещей - последнее использование.
Все это в регистр сведений локально, и что-то важное можно себе отправить. Пилю "дашборд" на smart watch.
Согласен с тем, что пользователи не всё озвучивают)
15. BlizD 1005 18.06.22 13:28 Сейчас в теме
Спасибо за статью.

Тоже используем у себя Sentry через пост-обработку ЖР.
В эскплуатации выявили особенность, что нужно формировать свой отпечаток(fingerprint), чтобы Sentry дополнительно не пытался группировать похожие ошибки (но по сути разные)
16. BlizD 1005 18.06.22 13:30 Сейчас в теме
(15)еще видимо, из за особенностей настройки нашего сервера, у нас ошибка в Sentry автоматически удаляется через 14 дней если по ней больше не приходило новых событий
17. BlizD 1005 18.06.22 14:04 Сейчас в теме
(15)
fingerprint

18. malikov_pro 1260 18.06.22 23:31 Сейчас в теме
(16) из https://forum.sentry.io/t/automatic-deletion-of-issues/6664/2, при отсутствии событий удаляется тикет, при повторном событии после срока очистки получается новый тикет а не регресс текущего.

(15) "пытался группировать похожие ошибки (но по сути разные)" - здесь бы теории/контекста поболее что является одной или разными ошибками. В документации по этому поводу прилично информации, думаю переведу.
19. malikov_pro 1260 18.06.22 23:53 Сейчас в теме
(14) "Только у меня нет задачи частотности." - думаю сильно зависит от требований по отказоустойчивости и процессов разбора ошибок
"интересует последний удачный проход" - тогда вариант с привязкой по допустимому времени отказа https://infostart.ru/1c/articles/1258466/, из неудобств сервиса то что нельзя указать график работы (на ночь в магазинах ПК выключают), настройку через cron еще не пробовал. Если прилетел алерт, то идем смотреть в логи. А данный вариант вписывается доступность РМК, на клиентской части раз в 15 мин отправлять запрос, чтобы быть уверенным что клиент активен и у него есть доступ в инет.
Но для ошибок обмена этот вариант не подходит, выше писал про 10к+ ошибок, на выходные ПочтаРоссии ушла в обслуживание и моя подсистема начала "спамить" запросами, в пн "все норм", но в бан со стороны сервиса могли попасть легко.

Есть еще один блок, накопительные ошибки, пример конфликты данных при обмене РИБ, логировать каждый безсмысленно, но посмотреть динамику количества очень даже, пример: добавили внешнюю систему дисконтных карт архитектура которой генерит конфликты, оператор следит за "чистотой" и решает вопросы п документам, а ДК начинают захламлять. Буду поднимать prometeus и делать опросы узлов.
21. papami 55 19.06.22 11:59 Сейчас в теме
(19) универсального инструмента, думаю, нет. Порой функциональность избыточна под конкретные задачи. Я привык "шить под себя" костюм, а не покупать)
Но вот идея мониторить то, что уже работает, а не "написал - бросил" мне нравится.
20. malikov_pro 1260 19.06.22 06:35 Сейчас в теме
23. malikov_pro 1260 05.08.22 19:53 Сейчас в теме
Оставьте свое сообщение