Какие проблемы поможет решить интеграции с Sentry:
- Сбор информации об ошибках, с детализацией как часто, у кого и когда она происходила. У нас будет статистика по каждой ошибке.
- Уведомление о всех новых выявленных ошибках. Появилась ошибка в системе, sentry нас об этом уведомляет (один раз, а не заваливает сообщениями каждый раз, когда ошибка произошла)
- Моментальный поиск, отбор информации по ошибкам
- Интеллектуальная группировка сообщений об ошибках.
Sentry это бесплатный инструмент, благодаря которому мы можем не нервничать при запуске очередного релиза, быстро находить причины возникших проблем, устранять проблемы, которые портят жизнь пользователям раньше, чем о них вам сообщат тестировщики, или helpdesk
Настоятельно рекомендую для начала ознакомиться со статьей Андрея Крапивина (https://infostart.ru/1c/articles/1178723/), в которой он рассказывает о его преимуществах перед остальными решениями для сбора и анализа ошибок.
При своей первой попытке подружить Sentry с 1C, столкнулся с рядом трудностей, одна из которых это отсутствие какой-либо инструкции как это сделать. Как правильно использовать их api, какие параметры устанавливать и откуда их вообще брать.
Всю эту информацию пришлось собирать по кусочкам из документаций самой Sentry, из stackoverflow, сидеть и методом проб и ошибок стучаться по API и пытаться отправить хоть какие-нибудь данные.
Чтобы упростить задачу вам, я собрал все свои грабли, и постараюсь подробно рассказать о них.
Прим. Описанное решение не идеальное, но дает отправную точку для разработчиков, которые решили заняться анализом и сбором ошибок.
Я не буду рассказывать о том, как установить Sentry, подобной информации в интернете хватает. Приведенный ниже пример сделан с использованием облачного сервера Sentry - sentri.oi
1. Создаем свой проект и команду
Я предполагаю, что с регистрацией на Sentri.io проблем возникнуть не должно. После того как мы это сделали, можно приступить к созданию своего проекта.
При создании нового проекта, нас будут настоятельно просить выбрать платформу, на которой мы ведем его разработку. Как вы догадались 1С здесь нет, но не беда, мы вообще нечего не выбираем (это влияет только на инструкцию, которую нам предложат по завершению.)
Указываем имя, и указываем команду которая им занимается. Людей из созданной команды мы можем назначать ответственным по выявленным проблемам, так же все участникам команды будут приходить письменное уведомление по новым ошибкам.
Далее мы переходим в настройки нашего проекта. В них нам необходимо получить наш public key
Теперь внимание, там мы увидим строку DSN примерно следующего содержания:
https://0cded76306854a4fb615685e1dcf9cfa@o390533.ingest.sentry.io/5449917
В этой строке содержаться 3 нужных нам параметра:
1. 0cded76306854a4fb615685e1dcf9cfa - это public key
2. https://0cded76306854a4fb615685e1dcf9cfa@o390533.ingest.sentry.io - а это адрес сервера на который мы будем стучаться. В случае с сервером развернутым у себя, обычно адрес следующий - sentry.<companydomain.ru>
3. 5449917 - номер нашего проекта
Копируем их куда-нибудь
2. Устанавливаем параметры подключения
Теперь устанавливаем http подключение к серверу sentry из 1С
Разберем параметры подключения
В качестве значения для "X-Sentry-Auth" в документации нам предлагают указать следующие данные как в примере ниже:
Sentry sentry_version=7,
sentry_timestamp=1329096377,
sentry_key=b70a31b3510c4cf793964a185cfe1fd0,
sentry_secret=b7d80b520139450f903720eb7991bf3d,
sentry_client=sentry-python/1.0
Подробнее:
Sentry sentry_version - (обязательный) - текущая используемая версия sentry
sentry_timestamp - (не обязательный) - время в формате timestamp которое представляем время в которое произошло наше событие
sentry_key - (обязательный) - тот самый public key который мы скопировали ранее
sentry_secret - (не обязательный) - Секретный ключ. Этот параметры не используется и будет удален в будущих версиях sentry
sentry_client - (не обязательный) - произвольная строка в формате имя_клиента/версия_клиента которая идентифицирует платформу на которой ведется разработка (например python/1.0)
Для работы нам достаточно указать только "Sentry sentry_version=7,sentry_key=bd945ed6d56e401da41a1f9262efc20e"
В качестве ресурса к которому идет обращение используется строка /api/<НомерПроекта>/store/
В моем случае это /api/5449900/store/. Напоминаю, что номер проекта мы скопировали чуть ранее
На этом настройка параметров закончена.
3. Формируем сообщение в Sentry
Теперь приступим к разбору свойств сообщения которое мы отправляем в Sentry
timestamp - дата в формате timestamp, определяет в какое время событие было создано в sentry
logger - имя логгера который создал текущее событие
platform - платформа на которой возникло событие. Оставляем по умолчанию Other
lever - аналог уровеня журнала регистрации, имеет два значения - error, warning
transaction - номер транзакции в которой возникла ошибка
server_name - имя рабочего сервера
release - версия релиза (версия конфигурации)
dist - имя дистрибутива (имя базы)
environment - в моем примере это режим совместимости. Но я бы тут указал версию платформы под которой был запущен сеанс.
message - комментарий. Текстовое описание ошибки
tags - произвольные теги, для удобства поиска и анализа ошибок
extra - любая доп. информация о событии на наш вкус.
exception - место в котором возникла ошибка. Группировка ошибок происходит по полю exception. Если ошибка произошла в конкретной строке кода, конкретного объекта, то она будет объединена с такими ошибкам, а не выделена в отдельную ошибку.
context - конктекст при котором возникла ошибка. Оборудование, операционная система, браузер, версия приложения, номер сеанса, соединения и т.п. Подробней тут https://develop.sentry.dev/sdk/event-payloads/contexts
breadcrumbs - Перечень вызывов которые предшевствовали месту возникновения ошибки. Начиная с платформы с версии 8.3.15 мы можем получать полный стек вызовов перед возникновением ошибки. В моем примере этот функционал не используется.
https://develop.sentry.dev/sdk/event-payloads/breadcrumbs/
user - Собственно сам пользователь под которым произошло событие
4. Profit
Вот и все. Вишенкой на торте остается только создать регламентное задание, которое будет на постоянной основе отправлять данные в Sentry.
Теперь у нас имеется более чем полная информация по ошибкам, местам их возникновения и прочая статистика. А также уведомления о новых ошибках.
Ссылка на пример интеграции на github - https://github.com/hexhoc/Sentry_1C
Надеюсь данная статья поможет сделать ваш рабочий процесс чуточку приятней и полезней
Тестировалось на платформе 8.3.16.1148.