Автоматическая классификация ошибок технологического журнала

25.06.20

База данных - Технологический журнал

В статье обсудим пример практической настройки конфигурации «Мониторинг производительности» для автоматической классификации ошибок по группам/кластерам на данных текстов описания ошибок. Используем механизм векторной модели текстов и косинусное сходство между ними.

Промо:

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

Описание проблемы:

  • Сложность анализа и постоянный контроль - При анализе текстов записей технологического или регистрации журналов Вам требуется оперативный анализ по категориям/классам: блокировка, ошибка доступа, программного кода или еще что-то. Вычленить понятие события из текста содержащего кучи GUID, стека вызовов и всяких там технических терминов – сложная и трудоемкая задача. Просмотреть (часто большой текст сообщения) можно вручную (не оперативно) если этих событий 10 или 100, но вот если их более чем 1000, да еще и каждый час, то этот набор сырых данных превращается в китайскую грамоту, и мы быстро начинаем уставать – терять сосредоточенность, что-то пропускать, игнорировать и т.д. 
  • Оперативность реагирования - Требуется максимально оперативно узнать, что появилось критическое сообщение в журнале и поставить алармы/ярлычки на какие-то определенно встречающиеся опасные события/сообщения в технологическом журнале. К примеру, новая неизвестная ошибка (особенно уместно после обновления конфигурации) или сообщения падения хостов, агента, СУБД – типа «На сервере 1С:Предприятия не найдена лицензия. Не обнаружен ключ защиты программы или полученная программная лицензия!», «Процесс завершается. Исходящий вызов запрещен» или «Сервер недоступен (Не отвечает, завершается аварийно или порт занят другим приложением)».

Если все это Вам требуется - то эта статья с практикой применения для Вас.

Небольшой флешбек:  

Вопрос автоматической классификации ошибок был поставлен у нас еще до появления самой конфигурации. Однако основная и первичная задача стояла в автоматическом мониторинге состояния системы в облаке и сообщении о проблемах производительности. Эти задачи на текущий момент решены и улучшаются время от времени. Теперь поговорим о варианте выполнения автоматической классификации ошибок. Информацию по данной тематике мы преподнесем в двух публикациях. В первой и текущей публикации мы кратко коснемся вопроса теории, а во второй более подробно остановимся на этом важном, на взгляд авторов аспекте.
Скажем сразу фактически никаких иных инструментов, кроме 1С, т.е. никакого зоопарка из кучи инструментов типа python и т.п. мы не использовать не будем) 

Задача

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

В качестве математики будем использовать механизм преобразования текстов в векторное пространство и косинусное сходство.

Структура статьи:

  1. Настройки и порядок выполнения работ
  2. Видео-урок
  3. Замечания, советы, ссылки.

 

I) Практика

 

1 Шаг. Скачиваем необходимые ресурсы

А) Скачиваем обновленную конфигурацию «Мониторинг производительности» и обработку «АвтоматическаяКлассификацияОшибокВекторноеПространство.epf». Устанавливаем конфигурацию, если еще не стоит.

Б) Добавляем обработку в дополнительные отчеты и обработки. Подсистему выбираем «Замеры». 

В) Выполняем настройку загрузки логов ошибок технологического журнала (если не делали ранее) - 5 простых шагов и 15 минут на разворачивание инструмента мониторинга проблем производительности базы 1С

2 Шаг. Заполняем классификатор ошибок.

Открываем справочник "Известные ситуации" в подсистеме "Замеры". Создаем корневой элемент и называем его "Классификатор ошибок ТЖ". А далее создаем набор справочников в соответствии с примером ниже.

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

  1. Доступ – ошибка доступа, права и роли. Нижняя граница сходства > 0.1
     

     

  2. Запись/проведение – ошибки записи документов, справочников, регистров и проведения документов. Нижняя граница сходства > 0.1
     

     

  3. Блокировки – блокировка документов, действий, форм. Нижняя граница сходства > 0.1
     

     

  4. СУБД – ошибки взаимодействия сервера 1С с базой данных. Нижняя граница сходства > 0.1
     

     

  5. Работа с отчетами – ошибки, связанные с формированием, выполнением отчетов. Нижняя граница сходства > 0.2
     

     

  6. Программные – ошибки, связанные с выполнением различного кода. Нижняя граница сходства > 0.08
     

     

  7. Работа с интернет – не удалось получить данные, превышено ожидание и др. Нижняя граница сходства > 0.2
     

     

  8. Критические ошибки авария (элемент группы) – падение хостов, отсутствие лицензий, отказ служб и т.п.
    1. Авария служб 1С. Нижняя граница сходства > 0.2 
       

       

    2. Лицензии. Нижняя граница сходства > 0.2
       

       

    3. Разрывы соединения. Нижняя граница сходства > 0.2
       

       

  9. Разное – все остальные ошибки, не вошедшие в предыдущие классы
     

     

3 Шаг. Выполняем настройку обработки

А) Открываем форму "Настройка 'Автоматическая классификация ошибок ТЖ'" дополнительной обработки.

Б) Указываем параметры обработки текстов. Это так называемая процедура подготовки данных для анализа. Настройки можно выполнить согласно рисунку ниже.


В) Указываем стоп слова/ стоп фразы/ синонимы (можете пропустить, если не знаете как и зачем)
Г) Указываем источники для получения данных и выполнения обработки (вкладка 'Данные из базы'/'Выбрать данные из базы'). Обычно это ссылка на замер и свойство 'Descr'.
Д) Используем текстовые данные с текстовым корпусом ошибок из файла или на основе данных базы. Это вкладка "Данные из базы"/"Выбрать данные из классификатора". Жмем кнопку "Выбрать данные из классификатора".
Е) Переходим к формированию базиса и векторного пространства ошибок технологического журнала. Вкладка "Базис".


Ж) Формируем базис данные для классификации. Последовательно нажимаем кнопки "Получить частотность", "Сформировать вектора", "Рассчитать векторное пространство". 

З) Сохраняем настройки в замер.

4 Шаг. Выполняем проверку и настройку.

Выполняем оценку качества классификации.

А) Выбираем набор проверочных данных (вкладка 'Данные из базы'/'Выбрать данные из базы'). Жмем "Выбрать данные" (используем период и первые - иначе будет очень долго и тяжело).

Б) После на вкладке "Обработка текста" жмем кнопки последовательно - "Обработать текст", "Заполнить таблицу корпуса слов по текущему тексту".

В) Формируем вектора текстов. На вкладке "Базис". Жмем последовательно кнопки - "Сформировать вектора", "Рассчитать векторное пространство по классификатору".

Г) Переходим на вкладку "Проверка"/"Автоклассификация" формы настройка и выполняем авто классификацию - жмем кнопку "Выполнить автоматическую классификацию по классификатору".

Д) Вычисляем количество верных оценок, принимаем решение о дальнейшей настройки или завершении настроек.

Качество результата обработки можно получить по формуле:

Качество классификации = 100% * Количество правильных классификаций / Количество примеров.

Настройку необходимо производить  до уровня не менее 95%. Оптимально - 98-99%.

5 Шаг. Запуск в работу!

Запускаем регламентное задание автоматической классификации. На вкладке замера загрузки логов можно увидеть результаты классификации в колонке "decision"

Открываем форму "Монитор 'Классификация ошибок'" анализа данных или журнал замеров и смотрим результат.

II) Видео-урок.

 

III) Замечания:

 

  1. Чем качественнее составлен базовый вектор (базис слов), тем лучше будет результат. Т.е. если вы поленитесь убирать мусорные слова типа имен пользователей, комментариев и т.п. тем хуже будут результаты. 
  2. При появлении новых ошибок вам понадобится перестроить словарь – дополнить. Критерием этого будут служить появление новых не классифицированных ошибок.
  3. Аккуратно пользуйтесь важностью слов, т.к. этот критерий будет увеличивать влияние данных слов на результат.
  4. Формирование классификатора на основании текстов можете использовать для общей группировки, а далее формируйте руками.
  5. Рекомендуем граничный критерий схожести установить в диапазоне от 0,8-0,86 до 1 (это соответствует радиусу между векторами от 36-30 до 0). При значении косинуса близком к 1 можно сказать, что вектора одинаково направлены на 100% - это максимальное подобие. При значениях в районе 0 или отсутствии – означает, что совсем различны.
  6. Уточните и заполните Стоп-слова и Синонимы фраз. Это позволит очистить результат от шума и сделать результат классификации гораздо лучше. 
  7. Анализировать данные по темам можно для любой текстовой информации, которую можно добавить в замеры – данные об инцидентах пользователей, письмах на поддержку и т.п.
  8. Советуем не делать большой базис слов – не более 800-1000 слов. Если у Вас получилось больше, значит у вас много лишних понятий. Проведите чистку. 
  9. Для классификатора корпус текстов ошибок тоже не должен быть большим. Оптимально 5-15. К примеру: «Отчеты», «Проведение/запись документов/справочников», «Доступ», «Блокировки», «Ошибки сервисов»...

Ссылки:

  1. Фреймворк «Монитор производительности»
  2. Руководство по эксплуатации.
  3. АвтоматическаяКлассификацияОшибокВекторноеПространство.epf
  4. Готовую конфигурацию можно скачать из приложения статьи: Решение проблемы быстродействия в ERP на рабочем примере

 

производительность мониторинг технологический журнал классификация

См. также

Магия преобразований Vector, часть 2: технологический журнал

Технологический журнал Мониторинг Абонемент ($m)

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

1 стартмани

15.11.2023    726    4    AlexSTAL    0    

8

Магия преобразований: ЖР, ТЖ, RAS/RAC, логи - универсальное решение Vector

Мониторинг Журнал регистрации Технологический журнал Абонемент ($m)

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

1 стартмани

13.11.2023    2880    4    AlexSTAL    0    

42

«Монитор» – простой анализ производительности

Администрирование СУБД Технологический журнал Бесплатно (free)

Для расследования проблем производительности недостаточно просто проанализировать технологический журнал. Нужен парсинг контекста событий, его сопоставление с информацией из Extended Events и логов, агрегация огромного количества информации.

21.09.2023    5661    Andreynikus    14    

79

Экспорт технологического журнала 1С в Elastic с помощью Logstash

Технологический журнал Платформа 1С v8.3 Абонемент ($m)

Целью данного решения является организация хранения и анализа данных из технологического журнала 1С с использованием стека Elasticsearch + Logstash + Kibana.

5 стартмани

18.09.2023    3190    huxuxuya    3    

22

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

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

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

16.05.2023    3235    capitan    0    

20

Разбор технологического журнала без боли и страданий

Технологический журнал Абонемент ($m)

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

1 стартмани

12.12.2022    8080    37    Segate    26    

86

Выполняем в СУБД запрос из ТЖ

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

Обработка для подстановки или нумерации параметров в тексте запроса из технологического журнала.

1 стартмани

24.11.2022    2845    3    VKislitsin    1    

17
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Yashazz 4707 28.06.20 12:11 Сейчас в теме
Блестяще. Отличная публикация, подробное, понятное изложение, готовые примеры. Серьёзное решение серьёзной проблемы. Солидно. Полезно. Большое спасибо!
gortol; NavnccpS7; muskul; ivanov660; +4 Ответить
2. ivanov660 4325 28.06.20 14:43 Сейчас в теме
(1)Спасибо, такой отзыв очень приятно читать )
Будет полезно, если кто-то настроет у себя такой функционал и поделется результатами.

Что самое замечательное в этом механизме - используем только возможности 1С Платформы.
6. Yashazz 4707 29.06.20 10:54 Сейчас в теме
(2)
Что самое замечательное в этом механизме - используем только возможности 1С Платформы.
Именно. Это одно из несомненных достоинств.
3. Артано 759 29.06.20 07:15 Сейчас в теме
Отличная работа, коллеги. Если не возражаете, то вставлю вашу прикладную статью как иллюстрацию для моей теоретической, чтобы жаждущие смогли сразу увидеть как теория реализуется в практике.
4. ivanov660 4325 29.06.20 08:22 Сейчас в теме
5. Артано 759 29.06.20 09:01 Сейчас в теме
(4) Об ошибках, просто вопрос парсинга журнала у меня лишь в двух предложениях описан, а здесь прекрасная иллюстрация.
7. kiset 03.07.20 09:49 Сейчас в теме
Отличный проект. Довольно легко настраивается, и адекватный результат.

Вопрос: это так и задумано, что при подключении замера через произвольный тип, нигде не прописана загрузка самих логов по этому замеру, или я до чего-то не докопался?
8. ivanov660 4325 03.07.20 10:04 Сейчас в теме
(7)Если вы выбираете произвольный тип, то должны указать дополнительную обработку. Эта дополнительная обработка должна содержать в себе код для загрузки/обработки данных.
Добавлю в инструкцию.
Т.е. ТЖ и Performance Monitor из коробки, остальные подключаются дополнительными обработками - плагинами.
ДУмаю, что должен ответить на вопрос.
9. kiset 03.07.20 10:15 Сейчас в теме
(8)
Эта дополнительная обработка должна содержать в себе код для загрузки/обработки данных.

Собственно, про это и вопрос. Обработка "АвтоматическаяКлассификацияОшибокВекторноеПространство.epf" не содержит такого кода, по крайней мере, я пока его не нашёл.

В общем-то допилить это не составляет труда, но может мало ли, я слепой и плохо искал? :)
10. ivanov660 4325 03.07.20 11:58 Сейчас в теме
(9)
1 Содержит код обработки данных. Это вам я как автор говорю). Чтобы обрабатывать данные Вам требуется обязательно создать отдельный замер загрузки ТЖ. Данный пункт инструкции в тексте статьи и есть ссылка в ролике.
Если вы хотите в одном флаконе: загрузку лога ТЖ, обработку лога ТЖ, оповещения по результатам обработки и т.п. тогда "напильник вам в руки".
"Загрузки/обработки" - я написал потому, что функционал в рамках обобщенного замера различный. А в случае текущей обработки - выполняется только обработка данных (классификация)
2. Если у вас что-то не работает или работает не так, то значит вы что-то не верно делаете или не внимательно посмотрели пример настройки (такое бывало уже не раз, всем нам свойственно).
3. Возможно вы выполняете не регламентированную последовательность действий или настроек окружения. Напишите если это так, тогда нам стоит, исправить или ограничить такую возможность.
11. kiset 03.07.20 12:56 Сейчас в теме
(10)
Вам требуется обязательно создать отдельный замер загрузки ТЖ. Данный пункт инструкции в тексте статьи и есть ссылка в ролике.

Спасибо за разъяснение. Ответ на вопрос получен, так и задумано. :)
12. ivanov660 4325 03.07.20 13:58 Сейчас в теме
(11) Принцип - собираем из "кубиков" необходимую конструкцию.
13. user612295_death4321 06.02.21 22:44 Сейчас в теме
Вашу разработку конечно не использовал, но идея парсинга ТЖ на предмет программных ошибок мне очень понравилась)

Предлагаю дополнить "Значение не является значением объектного типа"
Оставьте свое сообщение