Автоматический мониторинг ошибок¶
Ошибки, возникающие при работе приложения, регистрируются в журналах:
-
ошибки при выполнении смарт-автоматизаций — в Журнале выполнения автоматизаций,
-
ошибки в работе почты — Журнале сессий почтовых джобов,
-
другие ошибки — в общем Журнале ошибок.
ℹ️ Логирование смарт-автоматизаций зависит от Общих настроек приложения.
Для эффективного администрирования мы рекомендуем настроить автоматический мониторинг повторяющихся ошибок с помощью смарт-расписаний.
Порядок действий¶
1. В БД приложения "Первая Форма" выполните файл1 и файл2 (при необходимости предварительно измените название БД). При этом в БД будут созданы две функции, которые будут выделять в журналах три самые часто повторяющиеся ошибки за день:
-
tc_ExceptionLogStatistics_DailyTop3 — в журнале ошибок,
-
tc_EmailJobSessionLogStatistics_DailyTop3 — в журнале сессий почтовых джобов.
Для журнала выполнения автоматизаций отдельная процедура не требуется.
- Создайте категорию, в которую будут ставиться задачи с оповещением о повторяющихся ошибках.
Предоставьте права на просмотр и выполнение задач в категории группе администраторов приложения. Подпишите администраторов на получение уведомлений при создании задачи в категории или настройте автоматические назначение их исполнителями.
Добавьте в категорию ДП "Дата последнего появления ошибки" (с типом "Дата") и ДП "Тип лога" (с типом "Выпадающий список") и возможными значениями: ExceptionsLog, EmailsLog, SmartLog.
3. В созданной категории настройте три смарт-расписания. Режим запуска может быть индивидуальным, но рекомендуется запускать расписания каждый рабочий день последовательно одно за другим, в 7:00, 7:05 и 7:10 соответственно.
Для журнала ошибок
select t.TaskID from TasksInSubcatNNDenormalized as t
where t.IsClosed = 0 and
left (dbo.cm_StripHTML(dbo.cm_ReplaceHTML( t.TaskText)),250) in
(
SELECT left (dbo.cm_StripHTML(dbo.cm_ReplaceHTML( 'Автоанализ лога ошибок. Текст ошибки: <br/>' + REPLACE(exc.Exception, CHAR(13), '<br/>') + '<br/><br/> Найдено <b>' + CAST(exc.ExcCount as varchar(32)) + '</b> ошибок')),250)
FROM tc_ExceptionLogStatistics_DailyTop3 exc
)
SELECT 'Автоанализ лога ошибок. Текст ошибки: <br/>' + REPLACE(exc.Exception, CHAR(13), '<br/>') + '<br/><br/> Найдено <b>' + CAST(exc.ExcCount as varchar(32)) + '</b> ошибок'
FROM tc_ExceptionLogStatistics_DailyTop3 exc
WHERE NOT EXISTS(
SELECT t.TaskID
FROM Tasks t WITH (NOLOCK)
WHERE substring('Автоанализ лога ошибок. Текст ошибки: <br/>' + REPLACE(exc.Exception, CHAR(13), '<br/>'), 0, 160) = substring(t.Description, 0, 160)
AND t.IsClosed = 0 and t.subcatid = NN)
Для журнала сессий почтовых джобов
select t.TaskID from TasksInSubcatNNDenormalized as t
where
t.IsClosed = 0 and
left (dbo.cm_StripHTML(dbo.cm_ReplaceHTML( t.TaskText)),250) in
(
SELECT left (dbo.cm_StripHTML(dbo.cm_ReplaceHTML( 'Автоанализ лога почты. Текст ошибки: <br/>' + REPLACE(exc.Log, CHAR(13), '<br/>') + '<br/><br/> Найдено <b>' + CAST(exc.LogCount as varchar(32)) + '</b> ошибок')),250)
FROM tc_EmailJobSessionLogStatistics_DailyTop3 exc
)
SELECT 'Автоанализ лога почты. Текст ошибки: <br/>' + REPLACE(exc.Log, CHAR(13), '<br/>') + '<br/><br/> Найдено <b>' + CAST(exc.LogCount as varchar(32)) + '</b> ошибок'
FROM tc_EmailJobSessionLogStatistics_DailyTop3 exc
WHERE NOT EXISTS(
SELECT t.TaskID
FROM Tasks t WITH (NOLOCK)
WHERE substring('Автоанализ лога почты. Текст ошибки: <br/>' + REPLACE(exc.Log, CHAR(13), '<br/>'), 0, 160) = substring(t.Description, 0, 160)
AND t.IsClosed = 0 and t.SubcatID = NN)
Для журнала выполнения автоматизаций
SELECT 'Автоанализ лога smart.<br/>Smart расписание в категории:<b> ' + ISNULL(CAST(SubcatID as varchar(32)),'Не в категории') +'</b><br/>ID расписания:<b> ' + CAST(ID as varchar(32)) + ' </b><br/>ID пакета действий:<b> ' + CAST(ActionsPackID as varchar(32)) + '</b><br/>Ошибок выполнения: <b>' + CAST(FailedAttemptsCounter as varchar(32))+'</b>' FROM SmartRecurrence
where FailedAttemptsCounter >= AttemptsToSuspend and Enabled=1 and NOT EXISTS(
SELECT t.TaskID
FROM Tasks t WITH (NOLOCK)
WHERE (CAST(ID as varchar(32)) + ' ') = substring(SUBSTRING(t.Description, CHARINDEX('ID расписания', t.Description), len(t.Description)), 19, 4)
AND t.IsClosed = 0 and t.subcatid = NN)
Полезные ссылки¶
Настройки логирования в Общих настройках приложения
Журнал выполнения автоматизаций