|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
Есть небольшая база где собираются сообщения из логов одной энтерпрайзной системы. Это или чистые сообщения (редко) об ошибках или (часто) исключения и java stacktrace. В базе собранны не все сообщения а так сказать только представители каждого типа ошибок. Другими словами если ошибка существует, то за день можно сотни тысяч сообщений в логах поиметь и каждое уникально - меняются id и со своим timestamp, но в базе (в идеале) есть только одна запись. Теперь сама проблема: в какой то момент на радаре появляется новое сообщение и стоит задача, найти наиболее похожие сообщения из уже зарегистрированы в базе. Для этих целей есть некая функция, которая вычисляет степень схожести сообщений. Максимальное значение результата функции - мин длина одного из сообщений. «Очевидное» решение в лоб — сравнить новое сообщение с сообщениями в базе и взять наиболее «схожее» не приводит к желаемому результату по двум причинам. Во первых - медленно, т.к. сравнение схожести имеет сложность O(n * m) где n,m длина сообщений. И шаблонов в базе около 50 тысяч. Вторая причина менее очевидна. Пусть ошибка находится в методе CustomerService.getDeliveryAddress. (Пример надуманный). Этот метод может вызываться из разных мест, в разном контексте. Stacktrace для этого метода вызванный как сервис в контексте JBoss имеет приличную (10+) глубину, и большинство стековых фреймов идентичны с другими ошибками в этом же контексте, т.е. например CustomerService.getAddress вызванным как сервис в JBoss и как следствие эти два сообщения очень «похожи». В то же время та же функция вызванная в каком-нибудь отчёте имеет ту же ошибку но имеет очень отличительный stacktrace и контекст и как результат сравнения «не похожа». Первый вопрос: как бы вы определяли схожесть сообщений? Моё понимание проблемы - не все строчки сообщений имеют одинаковую значимость для сравнения. Как следствие подзадача вычислить или строчки, которые «уникальны» или вычислить строчки которые «шумят». Второй вопрос: как бы вы выделили эти «значимые/шумовые» строчки в сообщениях. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2020, 12:46 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
Тут надо на формат сообщений смотреть. Как вариант, если можно почистить сообщение так чтобы его начало было постоянным, то тогда по индексу можно искать с наибольшим совпадающим началом. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2020, 12:58 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
Ну и второй вариант - использовать полнотекстовый поиск, искать сообщение где больше слов слов совпадет. Посложнее, но не полный перебор. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2020, 13:02 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
mikron Первый вопрос: как бы вы определяли схожесть сообщений? Никак. Каждое сообщение заносится в багтрекер как есть и система сбора телеметрии блокируется до его исправления. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2020, 13:45 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
Очевидно, нужно смотреть на структуру сообщений, пока что не очень всё понятно. Самое универсальное (и самое трудозатратное в реализации) решение, которое тут можно придумать выглядит примерно так. Пытаемся определить структуру каждого типа лога, потом каждый лог парсим в "синтаксическое дерево". Потом деревья и сравниваем. Соответственно, для разных типов деревьев применяются разные сравнения. В вашем примере, мы при сравнении логов JBoss сравниваем те ветви дерева, которые отображают стектрейс, но не метод, вызванный в сервисе. А при сравнении лога сервиса с логом отчетов, сравниваем тип ошибки, но не обращаем внимания на стектрейс и контекст. Ну и т.д. В зависимости от вашей конкретной ситуации решение может упроститься до выпаршивания из лога меток, отвечающих за тип лога и ошибки и их сравнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2020, 15:48 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
mikron Второй вопрос: как бы вы выделили эти «значимые/шумовые» строчки в сообщениях. Мы то откуда знаем, не видя ваши логи, что у вас значимо, а что нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2020, 15:50 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
Dima T Тут надо на формат сообщений смотреть. Как вариант, если можно почистить сообщение так чтобы его начало было постоянным, то тогда по индексу можно искать с наибольшим совпадающим началом. Почистить сообщение в общем случае это как-раз то в каком направлении я думаю. Но как чистить тут и есть самый ключевой момент. Я предпологаю расчитать что есть муссор. Просто выделить верхние фреймы (или начало собщений) не всегда даст желаемый результат т.к. текствое сообщение и текст исключения параметризованы. т.е. будут отличатся SomeAppException: Unable detect delivery address for customer XXXXXXX XXXXXXX / order #### on May 12 2020. SomeAppException: Unable detect delivery address for customer YYYYY YYYYY YYYYY YYYYY / oder ##### on Dec 21 2019. А последующие 2 строчки stecktrace идентичны. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2020, 17:13 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
Dima T Ну и второй вариант - использовать полнотекстовый поиск, искать сообщение где больше слов слов совпадет. Посложнее, но не полный перебор. А это ни чем не лутче первого варианта. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2020, 17:15 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
Ржавый гвоздь mikron Второй вопрос: как бы вы выделили эти «значимые/шумовые» строчки в сообщениях. Мы то откуда знаем, не видя ваши логи, что у вас значимо, а что нет? В том и дело, что решение должно быть универсальным. Я тоже не могу просматривать все сообщения и определять что в каждом из них значимо. И даже склоняюсь к мнению, человек без опыта не сможет выделить значимую часть, значит только статистика может дать ответ на этот вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2020, 19:12 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
mikron Dima T Ну и второй вариант - использовать полнотекстовый поиск, искать сообщение где больше слов слов совпадет. Посложнее, но не полный перебор. А это ни чем не лутче первого варианта. Это на случай когда первый вариант невозможен. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2020, 20:25 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
mikron SomeAppException: Unable detect delivery address for customer XXXXXXX XXXXXXX / order #### on May 12 2020. SomeAppException: Unable detect delivery address for customer YYYYY YYYYY YYYYY YYYYY / oder ##### on Dec 21 2019. вы что их прямо так и держите в БД? они же типовые у вас все, как я понял (и вижу) ну так справочники юзайте, накой ляд так базу нагружать? exception = err_t Unable detect delivery address for customer = msg_t получится как-то так: 1 | 1 | XXXXXXX XXXXXXX / order #### on May 12 2020 далее, если дата в каждом сообщении, её тоже в отдельную колонку с типом date order #### - тоже, если можно. при такой архитектуре их совсем просто найти будет ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2020, 22:14 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
Алексей Роза, Вы не поняли совсем. Перечитайте внимательно самое первое сообщение. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2020, 22:49 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
Ну... если Kibana с этим не справилась то наверное эта постановка выходит далеко за рамки анализа логов. Надо-бы в студию образец такого сообщения. Я думаю и тогда у нас мысли появятся как искать "значимые и шумовые" строчки. Похожесть можно вычислять по разному. Тут и Левенштейн. И декартово расстояние между ключевыми словами и частотами. И бит-карта Блума. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2020, 23:12 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
mikron Алексей Роза, Вы не поняли совсем. Перечитайте внимательно самое первое сообщение. всё прочитано и понято именно так, как написано. Там именно то, что я написал. Также и в примере вашем именно это. Значит вы либо в примере выдали левак, либо мысль доносить не умеете и сбиваете с толку. Показывайте конкретно, где у вас там "не так". ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 00:04 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
mayton, Вы хитрец, подливаете масла. Кибану оставим в покое — она из другой оперы. Давайте разберём методы оценки схожести. Но прежде вопрос. вы считаете что метод оценки схожести безотносителен к статистике шаблонных сообщений? Другими словами, оценка схожести двух сообщений есть функция двух переменных и независит от всего набора шаблонных сообщений? Я правильно понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 01:46 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
Я не знаю. Я пока мало понимаю вашу проблему. Покажите образец лога и что надо найти. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 09:24 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
mayton, показать настоящий лог я не могу, могу только напеть. И потом, одного сообщения будет недостаточно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 10:16 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
mayton что надо найти. Первый вопрос: как бы вы определяли схожесть сообщений? Второй вопрос: как бы вы выделили эти «значимые/шумовые» строчки в сообщениях? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 10:26 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
Как я вижу эту тему. ТС: Хочу найти то, не знаю что. Как это искать и где? Участники темы: Так мы же не знаем, что ты ищешь, может расскажешь нам, что тебе нужно? ТС: Я не знаю. Но вы мне скажите, как искать и где? Участники: Так а что ищешь то? ТС: Не могу сказать. Но как искать, и где? ... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 10:29 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
mikron показать настоящий лог я не могу, могу только напеть. И потом, одного сообщения будет недостаточно. Обфусцируйте и покажите. Без этого какой либо содержательный совет дать вам невозможно, сколько бы раз вы свои вопросы не повторяли. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 10:30 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
Ржавый гвоздь, Мои вопросы возможно не всем доступны но вполне конкретны - как бы вы определяли схожесть сообщений? Какой ваш ответ? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 11:06 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
mayton, имеем: 1.) набор P из ~50K "разнотипных" сообщений - представители каждого типа сообщений. 2.) сообщение M, про которое ничего не известно заранее. Hайти: Наиболее "схожие" сообщение из набора (1) в порядке убывания схожести. Или другими словами определить функцию схожести S(M, Pi), для 0 < i < N. Простор для полёта мысли не ограничен. Предлагайте, я могу опробовать и сообщу о результатах. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 12:43 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
Я понял. По смыслу это похоже на кластеризацию векторов с автоматическим выделением новых центров в признаках. Тоесть мы не задаём жестко N центров а просто ищем следующий вектор который наиболее ДАЛЕКО остоит от N уже известных. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 13:36 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
Нам нужен образец логов. Хотя-бы 3 разных месседжа. Понимаю что у тебя NDA и все такое. Но дальше не двинемся никуда без семплов. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 13:58 |
|
Нетривиальная задача анализа текстовых сообщений
|
|||
---|---|---|---|
#18+
mikron Я тоже не могу просматривать все сообщения и определять что в каждом из них значимо. А почему, собственно? Прочитал сообщение, увидел, что оно незначимо - пошёл и убрал его вывод из модуля, чтобы в логе оно больше никогда не появлялось. Обычная работа программиста. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2020, 14:02 |
|
|
start [/forum/topic.php?fid=16&fpage=4&tid=1339719]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
85ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
others: | 371ms |
total: | 566ms |
0 / 0 |