Использование 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С v8.3 Платные (руб)

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

9000 руб.

28.08.2019    33180    19    21    

71

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

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

1500 руб.

01.12.2020    15792    38    0    

55

Мониторинг Сервера Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

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

1 стартмани

18.07.2024    718    6    moolex    0    

5

Мониторинг Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

13.06.2024    4749    34    Garilia    3    

35

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

Подсистема мониторинга ПДЕ 1С (далее ПМ) предназначена для отображения бизнес-показателей прикладных решений на платформе 1С Предприятие 8.3 в виде динамичных графических изображений диаграмм, графиков, таблиц.

24000 руб.

31.05.2024    1421    0    0    

0

Мониторинг Системный администратор Бесплатно (free)

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

24.05.2024    3966    AdepTcs    3    

19

Мониторинг Сервера Системный администратор Программист Платформа 1С v8.3 Управляемые формы Абонемент ($m)

Размер, имя информационной базы из реестра кластера (файл 1CV8Clst.lst), дата последнего изменения файлов в каталоге баз (srvinfo\reg_*\uuid) центрального сервера. Отдельно показан размер индекса ППД (полнотекстовый поиск данных) и его актуальность. Полезна в случае, если у вас удалялись базы 1С и никто не озаботился удалением журналов регистрации.

1 стартмани

15.05.2024    1334    20    MaximSh    0    

7

Мониторинг Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Расширение, в котором поправил несколько багов и неудобств, присутствующих в ЦКК. Пригодится для разработчиков, использующих ЦКК.

1 стартмани

13.05.2024    523    2    Дмитрий74Чел    0    

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

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

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


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

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

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

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


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

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

Тоже используем у себя Sentry через пост-обработку ЖР.
В эскплуатации выявили особенность, что нужно формировать свой отпечаток(fingerprint), чтобы Sentry дополнительно не пытался группировать похожие ошибки (но по сути разные)
16. BlizD 1041 18.06.22 13:30 Сейчас в теме
(15)еще видимо, из за особенностей настройки нашего сервера, у нас ошибка в Sentry автоматически удаляется через 14 дней если по ней больше не приходило новых событий
17. BlizD 1041 18.06.22 14:04 Сейчас в теме
18. malikov_pro 1327 18.06.22 23:31 Сейчас в теме
(16) из https://forum.sentry.io/t/automatic-deletion-of-issues/6664/2, при отсутствии событий удаляется тикет, при повторном событии после срока очистки получается новый тикет а не регресс текущего.

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

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