Использование 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
 
 модуль внешней обработки

 

Вывод

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

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

 

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

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Работа с интерфейсом Анализ учета Мониторинг 1С:Предприятие 8 1С 8.3 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)

Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения Infostart Dashboard. Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Узнайте возможность внедрения подсистемы у себя в конфигурации с помощью бесплатной обработки "Анализ внедрения подсистемы 1С Infostart Dashboard"!

31720 руб.

27.03.2025    90646    67    44    

77

Инструменты администратора БД Корректировка данных Мониторинг Учет документов 1С 8.3 1С:Управление торговлей 10 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Розница 3.0 Платные (руб)

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

6100 руб.

11.06.2026    802    2    0    

4

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

Неделю мы искали, почему задание отрабатывает вхолостую, и всё это время оно вообще не запускалось. В истории механизма 580 записей, и все до одной поставлены руками: автоматических нет ни за один день с апреля 2025-го. Ошибок при этом ноль, потому что ошибке негде было возникнуть. Первую версию - задание пропускает запуск, увидев недавний успех - убил замер: четыре дня молчания после того, как мы расчистили состояние. Показываю весь перебор причин, ложную улику с расписанием, из-за которой расследование ушло в сторону на несколько дней, и то поле карточки, которое всё это время решало. Перебор собран списком по порядку проверки, так что по нему можно пройти свою базу.

18.09.2026    286    nedomolkov.ivan    0    

0

HighLoad оптимизация Мониторинг Системный администратор Программист 1С 8.3 Бесплатно (free)

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

16.09.2026    479    nedomolkov.ivan    0    

0

HighLoad оптимизация Мониторинг Системный администратор Программист 1С 8.3 Бесплатно (free)

Код не меняли год, а операция, которая раньше шла секунду, стала идти минуту. Виноват в таком обычно не код, а то, что данные перешли порог: у квадратичного алгоритма удвоение объёма стоит четырёхкратного роста работы, поэтому поломка не подкрадывается постепенно, а наступает сразу. В разборе - случай коллеги, где сервис деградировал месяц. Три объяснения закрыли замером, а развязку дал профиль на 16 642 снимках: 80,0 % процессорного времени в одной функции, которую при этом нельзя было чинить. Разогнали её 20 копий одного документа по 443 581 байту, наплодил их собственный экспортёр сервиса. Дальше - как отличить квадратичный рост от линейного двумя замерами, где такие места прячутся в коде 1С и что делать, если урезать боевую базу вдвое нельзя.

27.08.2026    1186    nedomolkov.ivan    2    

0

DevOps и автоматизация разработки Мониторинг Тестирование QA Программист 1С:Предприятие 8 Бесплатно (free)

Платформа 1С давно вышла за рамки учетных систем. Сегодня это полноценная среда для создания сложных, высоконагруженных и распределенных приложений. А значит, и стек технологий современного разработчика кардинально изменился. Систематизируем весь инструментарий, который превращает 1С-программиста в инженера: от EDT и Git до автотестов на YAxUnit, контейнеризации приложений в Docker, мониторинга в Prometheus и организации шины данных на Kafka. Разберемся, зачем каждый инструмент нужен, как он вписывается в жизненный цикл разработки и с чего начать его внедрение.

25.08.2026    21483    mrXoxot    53    

83

Технологический журнал Мониторинг Мессенджеры и боты Системный администратор Программист 1С 8.3 1С 8.5 Россия Абонемент ($m)

Лёгкое расширение для 1С, которое ловит ошибки — включая упавшие внутри транзакции проведения и не замеченные типовыми средствами — и сразу шлёт алерты в Telegram и на почту. Не заимствует ни одного объекта конфигурации, ставится на любую базу (типовую или самописную, с БСП или без) за 5 минут. Дедуплицирует повторы, не спамит при шторме ошибок, маскирует персональные данные перед отправкой наружу. Работает даже при отключённом администратором штатном Журнале регистрации — у расширения есть собственный независимый журнал самодиагностики.

3 стартмани

25.08.2026    551    1    KonMa    0    

2

HighLoad оптимизация Мониторинг Системный администратор Программист 1С 8.3 Бесплатно (free)

Мониторинг блокировок сам оказался старейшей открытой транзакцией в базе: сеанс спит, блокировок по нему ноль, транзакция висит четверо с половиной суток. Порог в его собственном запросе - пять секунд, свою транзакцию он продержал порядка восьмидесяти тысяч таких порогов и себя ни разу не заметил. Ни в один отчёт "кто кого блокирует" такой сеанс не попадает: никто никого не ждёт. Это четвёртый из четырёх механизмов, разобранных в статье. Остальные три: один текст ошибки на две совершенно разные причины, из-за которого уходят в разбор графов вместо одной правки обработчика; кольцевой буфер диагностики, обнуляемый переключением основного узла; события, записанные под чужим именем базы, из-за чего запрос отдаёт ноль строк там, где данные лежат. По каждому разобрано, как он выглядит, чем отличается от настоящей пустоты и что с ним делать.

21.08.2026    1307    nedomolkov.ivan    0    

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

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

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


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

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

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

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


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

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

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

(15) "пытался группировать похожие ошибки (но по сути разные)" - здесь бы теории/контекста поболее что является одной или разными ошибками. В документации по этому поводу прилично информации, думаю переведу.
19. malikov_pro 1403 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 1403 19.06.22 06:35 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация