powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Парсер логов
31 сообщений из 31, показаны все 2 страниц
Парсер логов
    #40010952
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В продолжение топика Нетривиальная задача анализа текстовых сообщений

Поскольку автор слился а тема провисла в воздухе считаю своим долгом ее продолжить здесь.

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

Вот так я его себе вижу.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public class GenericLogMessageParser implements Closable {

 ....

 public GenericLogMessageParser(Reader reader, String dateformat) {
   ...
 }

 public String nextMessage() {
   ...
 }

}



Здесь dateformat - это некая регулярка которая проверяет что строка начитается именно с timestamp
в нужном нам формате.

Надо также исходить из предположения что лог может быть очень большим. До терабайтов.
...
Рейтинг: 0 / 0
Парсер логов
    #40010956
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поясни в чём задача и в чём сложность?

И вообще зачем парсить логи вручную?
...
Рейтинг: 0 / 0
Парсер логов
    #40010959
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO "парсер много-строчных месседжей" - в общем виде не решаемо
...
Рейтинг: 0 / 0
Парсер логов
    #40010960
dakeiras
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
IMHO "парсер много-строчных месседжей" - в общем виде не решаемо

строго говоря да.
...
Рейтинг: 0 / 0
Парсер логов
    #40010969
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте не вобщем. Решим в частных случаях.
...
Рейтинг: 0 / 0
Парсер логов
    #40010973
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Давайте не вобщем. Решим в частных случаях.

А в чем проблема?
Считываем, если первое таймстемп - новое сообщение
Если нет - продолжение предыдущего

Но если в тексте сообщения затясался перевод строки и нечто похожее на таймпстемп - ой
...
Рейтинг: 0 / 0
Парсер логов
    #40010975
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
mayton
Давайте не вобщем. Решим в частных случаях.

А в чем проблема?
Считываем, если первое таймстемп - новое сообщение
Если нет - продолжение предыдущего

Но если в тексте сообщения затясался перевод строки и нечто похожее на таймпстемп - ой

Это - принимается как нормально. Тоесть парсер отработал хорошо. Без претензий.
...
Рейтинг: 0 / 0
Парсер логов
    #40010976
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

Дурной топик. Т.к. если "исключения и java stacktrace", то "Во первых - медленно, т.к. сравнение схожести имеет сложность O(n * m) где n,m длина сообщений" полный бред, т.к. вполне можно проидексировать по исключению и методу, где оно возникает.

Читать всю галиматью, которую там могли понаписать - не интересно.

Ставьте более-менее логичную задачу, которую хотя бы теоретически, можно в реальном мире где-то применить.
...
Рейтинг: 0 / 0
Парсер логов
    #40010977
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Другими словами если ошибка существует, то за день можно сотни тысяч сообщений в логах поиметь и каждое уникально

Что у них за говно система такая?

Сотни тысяч сообщений в логах.... т.е. сотни тысяч клиентов НЕ смогли выполнить функционал/задачу - и всем на это в течении дня пофиг?
...
Рейтинг: 0 / 0
Парсер логов
    #40010996
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Топик дурной. Но когда ентерпрайз дорастает до неприличных размеров - админы и девопсы ведут
базу знаний по извесным дефектам. И для них на прод-саппорте очень часто стоит тайм-критичная
задача - проанализировать если ERROR уже известный - то принять решение по таблице и действовать.
Если дефекто новый и неизвестный - то на установление его истинности уходит время. Я частично
был связан с прод-саппортом лет 10 назад и я примерно понимаю себе тот уровень ужаса который
бывает продуктовых логах.

По поводу формата логов и формата сообщений. Не со стороны log4j а со стороны программиста.
Там фиксить никто никогда ничего не будет. Всё - minor tech debt. Поэтому часто девопсы брошены
сами разбираться с дефектом.

Сегодня с этим чуть лучше. Помогает Kibana с которой я работал и Splunk с которым мне не приходилось
работать а также Графит и Графана. Но я честно не помню есть там подобный функционал для Fuzzy
группировки ошибок по степени схожести.
...
Рейтинг: 0 / 0
Парсер логов
    #40011010
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

а просто триггеры из регулярок на логи уже не модны?
...
Рейтинг: 0 / 0
Парсер логов
    #40011011
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы не можем написать регулярку на новый тип ошибки которой еще не было.

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

Грубо говоря речь идет о системе которая обучается.
...
Рейтинг: 0 / 0
Парсер логов
    #40011028
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Занафига ей обучаться, если рядом с системой на 100 тысяч (!) ошибок явно должен находится админ и не один (!) ?

Максимум о чем может идти речь, это отсеять известные (ранее встречавшиеся ошибки), возможно с указанием ID таска в Jira по которой они фиксились и с именами людей которым нужно дать пизьдюлей депримировать за то, что эти ошибки возникли вновь. А такого по ISO 9000 быть не должно В ПРИНЦИПЕ.

Т.е. ошибка по определению (ISO 9000) или новая или у нее есть имя и должность, кого нужно уволить (т.е. она в уже базу занесена _руками_ и обучаться там нечему).

Ну и опять таки, повторюсь... видел я интерпрайзы... но 100 тыс. ошибок... вокруг этого интерпрайза уже ночью будет толпа привезенных из кроватей разработчиков, которых пинками разбудили и заставили ошибку искать/править. А на утро, после починки, все причастные еще и бесплатный секас без вазелина получат.

А если у кого-то нормально по 100 тысяч (!) ошибок в сутки - то в общем, все хорошо! Расслабиться, получать удовольствие и продолжать пилить российский бюджет. Одной сотней ошибок меньше, одной сотней ошибок больше - ему (бюджету) не страшно.
...
Рейтинг: 0 / 0
Парсер логов
    #40011034
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

...есть там подобный функционал для Fuzzy группировки ошибок по степени схожести.

И что эта "группировка по степени схожести может дать" ?

В прошлый раз был Null Pointer Exception - разработчики его исправили за 15 минут, а в поза-прошлый раз, еп#$^ полторы недели, пока нашли причину...

Сейчас у нас опять Null Pointer Exception ! УРА ! Не страшно ! Это уже наша любимая и знакомая ошибка с высокой степенью схожести.

Так что ли?
...
Рейтинг: 0 / 0
Парсер логов
    #40011139
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то так наверное яснее будет. Месседж с признаком уровня. И там выше я ошибся. Заменил на AutoClosable.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
import java.io.File;
import java.util.Iterator;

public class GenericLogMessageParser implements AutoCloseable, Iterable<GenericLogMessageParser.Message> {
    
    enum Level { INFO, WARNING, ERROR, DEBUG, TRACE }
    
    public static class Message {
        public final String message;
        public final Level level;

        public Message(String message, Level level) {
            this.message = message;
            this.level = level;
        }
    }

    public GenericLogMessageParser(File file, String dateformat) {
        // TODO:
    }

    public String nextMessage() {
        // TODO:
        return null;
    }

    @Override
    public void close() throws Exception {
        // TODO:
    }

    @Override
    public Iterator<Message> iterator() {
        // TODO:
        return null;
    }
}
...
Рейтинг: 0 / 0
Парсер логов
    #40011143
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
mayton

...есть там подобный функционал для Fuzzy группировки ошибок по степени схожести.

И что эта "группировка по степени схожести может дать" ?

В прошлый раз был Null Pointer Exception - разработчики его исправили за 15 минут, а в поза-прошлый раз, еп#$^ полторы недели, пока нашли причину...

Сейчас у нас опять Null Pointer Exception ! УРА ! Не страшно ! Это уже наша любимая и знакомая ошибка с высокой степенью схожести.

Так что ли?

Твой вопрос звучит так. Mayton - задлянафига тебе сдалась эта тема?
...
Рейтинг: 0 / 0
Парсер логов
    #40011151
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Твой вопрос звучит так. Mayton - задлянафига тебе сдалась эта тема?

примерно да.

Т.к. с логами я в первую очередь вижу совершенно другую проблему

1) В распределенной системе - понять какие связанные действия с других серверов породили данную ошибку. Т.е. у нас 20 нод типа A и 20 нод типа B. Нода типа A вызывает ноду типа B, в логах 17 ноды B обнаружено странное сообщение. Возникает проблема, связать ее с соответствующим трейсом на соответствующей (какой?) нодой A.

2) Онлайн обработка и оперативное реагирование - скорее должен быть не паттер Parser - Interator, а что-то типа Parser - Listener. Т.к. файл логов хочется все же мониторить в режиме близком к online.

Опять таки, сильно удивлюсь, если нет стандартных средств/пакетов для обработки анализа логов. По крайне мере в компании в которой работал, логи явно зашкаливали за террабайты (некоторые подсистемы на AWS хостились на _сотни_ инстансев), но у админов/старших разработчиков проблем с их поиском, анализом и обработкой не было.

Но там и 100 тыс. ошибок в сутки не было. Такое просто не допускалось и было не вообразимо . Были "странный" ошибки, возможно десяток в неделю (при нескольких сотнях тысяч реальных пользователей, х.з. сколько миллионов реквестов), причина которых была не установленна. Но и они как-то мониторились, т.е. руководство знало, что они появляются и сколько их было ))) переодически подходило и говорило "на этой недели опять на проде 2-а раза сообщение о разрыве связи было - надо с этим что-то делать".

А массовое возникновение ошибок и их классификация - мне такое представить сложно. Т.к. если такое после рестарта (апдейта) сервера возникло, то тут же админы сервер остановят и откатят софт на предыдущию версию.

IMHO & AFAIK

p.s. ну а написать парсер - это же дело 30 минут. Только не очень понятно, какой в нем толк. Т.к. без осмысленной аналитики логов (что уже зависит от конкретной прикладной системы) это совершенно бысмысленное перекладывание логов из файлов в логи в БД.

p.p.s. ну и в нормальных логах нужно: таймстемп, реквест (если Web/REST) где произошла проблема, прикладной юзер где произошла проблема, ID актора (если AKKA), поток (если многопоточка) ... и т.д. и т.п. Без этого востановить последовательность событий и __первопричину__ IMHO не возможно.
"Голая" ошибка - вообще никакой информации не несет.
...
Рейтинг: 0 / 0
Парсер логов
    #40011170
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я надеялся что этому топику посвятим 2 часа. Напишем парсер и переключимся на более интересную задачу.
Тоесть где - то так. 0.5 sp на парсер и 13 sp на кластеризацию.

По поводу интересов. В продолжение Архивариусов. Задачи текстовой кластеризации
я считаю интересны но мало изученны. И алгоритмы по имплементации - более заточены на физику и математику
чем на текст. Даже в org.apache.commons.math3.ml.* в роли обучающего вектора выступает вовсе не текст
вектор вещественных чисел. Вот провести аналогию между текстом и безразмерным вектором - вот инженерная
задача. И я именно над ней думаю. А парсер - просто инструмент. У меня есть много идей как это сделать
но нужны "живые" данные. Логи например.

Из других полезных кейсов.
- Определение авторстава статьи-документа.
- Выявление спама и рекламы в форумах (хотя для спама используют Байес)
- Ну и биологии генетике еще много чего можно придумать.

Интересна также оптимизация. Я хотел пощупать JNI + команды современных процессоров SSE/AVX
и умножение вещественных толстых векторов друг на друга - тоже хороший повод. Java - медленно
умножает и я хотел посмотреть какое ускорение получится.

(вот здесь https://stackoverflow.com/questions/529457/performance-of-java-matrix-math-libraries
один господин измерял матричные операции и увидел что разница от 4 секунд до 150)

Вобщем для меня было 2 повода занятся логами.
...
Рейтинг: 0 / 0
Парсер логов
    #40011178
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если так, то могу предложить более интересную задачу для AI

Разбор назначения платежа в банковской выписке

Заполняется человеком (поэтому всегда неточно), но часто повторяются определенные паттерны:

Оплата счета N 12345 за воду
Оплата счета за фев. N 12345 за воду
Аванс за февраль по счету N 12345
Предоплата за фев. по счету N 12345
Предоплата за янв. за воду счет N 12345
Оплата аванса по счету N 12345 за воду за фев.
и так далее... и так по десятку тысяч строк в день

С одной стороны, есть типовые фразы (паттерны) которые можно вычлинить и по ним раскидывать. С другой стороны, все время что то новое и нужен некоторый интерфейс поиска и заведения новых паттернов.
...
Рейтинг: 0 / 0
Парсер логов
    #40011181
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да тоже можно. Но ввиду того что автор родительского топика не дал больше никаких inputs,
(более того, он позорно сбежал, ругая нас) я решил перенести дискуссию в другое место.
Здесь мы можем уже расширить постановку.

Логи и назначения платежей - просто частные случаи текстового вектора для некой обобщенной системы
поиска кластеров.

Код: java
1.
2.
3.
abstract class GenericTextVector {};
class LogMessage extents GenericTextVector {};
class PurposeOfPayment extents GenericTextVector {};
...
Рейтинг: 0 / 0
Парсер логов
    #40011188
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И при этом и для логов и для реквизитов платежей у нас будет система - нечеткая. Со множеством
настроечных параметров. Тоесть сразу она не взлетит. Ее придется обучать. И долго запускать
на разных настройках.
...
Рейтинг: 0 / 0
Парсер логов
    #40011191
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Главная идеологическая проблема обучающийся системы - кто будет отвечать за ошибки ?
...
Рейтинг: 0 / 0
Парсер логов
    #40011196
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой вопрос задают ко всем нечетким системам. Пускай бизнес сам решает кто ответит.
Тоже самое что спрашивать гугл, кто ответит за то что сайт не был найден в топе.
...
Рейтинг: 0 / 0
Парсер логов
    #40011226
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я с ИИ дел не имел (одно время смотрел /безуспешно/ OpenCV, хотел сделать бота для игры, задачу не реализовал, ИИ обучить не смог)

есть у меня массив данных за 2 месяца
строка == счет на который отнесен, тип счета (обычный, аванс), месяц

нужно:
1) научится вычленять из строки номер счета (сейчас сделано дубово, 10 цифр подрят номер счета, хотя может встречаться и ИНН, как разделяют номер счета от ИНН - не знаю)
2) желательно определять, что это аванс за какой-то период
3) что-то еще )))

на какие либы смотреть, как их обучать
...
Рейтинг: 0 / 0
Парсер логов
    #40011228
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev, я тоже не делал ИИ системы за деньги.

Но ты доволен качествов вычленения номера счета? Может для этой задачи это - нормально реализовано?
...
Рейтинг: 0 / 0
Парсер логов
    #40011246
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Leonid Kudryavtsev, я тоже не делал ИИ системы за деньги.

Но ты доволен качествов вычленения номера счета? Может для этой задачи это - нормально реализовано?


Пока не было авансов и номер счета ровно 10 символов - нормально

1) Но теперь по закону должны быть еще авансы / предоплаты - а там человек может до получения счета оплатить ((( Просто "аванс за февраль" или "предопл. за фев." или "предопл. за февраль по счету N 01234"

Предоплаты разумеется могли быть и раньше (минимальное кол-во). Но теперь они обязательны. Узаконненная думой (хотя по факту противозаконная) обдираловка потребителей в пользу ресурсоснабжающих организаций.

2) Потенциально могут быть частные лица. А они могут платить не по счет-фактуре, а просто по номеру лицевого счета. Пока их не очень много, их обрабатывают вручную. Ну или если интернет платежи (кредитные карты), то там формат единообразный.

p.s. такая задачи передо мной пока не стоит, но сама по себе задача разбора назначения платежа - в природе существует. AFAIK
...
Рейтинг: 0 / 0
Парсер логов
    #40011532
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
mayton
Leonid Kudryavtsev, я тоже не делал ИИ системы за деньги.

Но ты доволен качествов вычленения номера счета? Может для этой задачи это - нормально реализовано?


Пока не было авансов и номер счета ровно 10 символов - нормально

1) Но теперь по закону должны быть еще авансы / предоплаты - а там человек может до получения счета оплатить ((( Просто "аванс за февраль" или "предопл. за фев." или "предопл. за февраль по счету N 01234"

Предоплаты разумеется могли быть и раньше (минимальное кол-во). Но теперь они обязательны. Узаконненная думой (хотя по факту противозаконная) обдираловка потребителей в пользу ресурсоснабжающих организаций.

2) Потенциально могут быть частные лица. А они могут платить не по счет-фактуре, а просто по номеру лицевого счета. Пока их не очень много, их обрабатывают вручную. Ну или если интернет платежи (кредитные карты), то там формат единообразный.

p.s. такая задачи передо мной пока не стоит, но сама по себе задача разбора назначения платежа - в природе существует. AFAIK

Я думаю что сочетания фраз которые легко и очень сильно обрабатывает спам-фильтр
здесь очень подходит. Тоесть приспособить фильтры наподобие спамовских для этой
задачи - будет более органично чем для кластеризации лог-сообщений которую
решаю я параллельно. Аргументация такая. Вы можете вручную указать что учебная
выборка является счетом к оплате и таким образом обучить систему. В классификаторе
логов это лишено смысла т.к. новый класс заведомо не известен.
...
Рейтинг: 0 / 0
Парсер логов
    #40011536
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу логов. Некрасиво получается. Так и эдак. Если рассматривать функцию как итератор то внутри
получается логика которая должна реагировать на 4 типа событий. 1) Начало лога 2) Принята строка
3) Принята строка с меткой времени 4) Конец лога.

И если делать это с точки зрения ГЕНЕРАЦИИ событий message то логика ПРОСТАЯ. А с точки зрения
обработки событий 4х типов которые я просто обязан реализовать чтоб корректно отпарсить получается
много писанины.

Я тут вспомнил про co-routines. Волшебные функции которые даны нам уже в Kotlin/GoLang и которые
по моему мнению позволят реализовать этот кусок кода изящнее. И мне как перфекционисту кодирования
конечно интересен именно изящный подход.
...
Рейтинг: 0 / 0
Парсер логов
    #40011768
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
По поводу логов. Некрасиво получается. Так и эдак. Если рассматривать функцию как итератор то внутри
получается логика которая должна реагировать на 4 типа событий. 1) Начало лога 2) Принята строка
3) Принята строка с меткой времени 4) Конец лога.

И если делать это с точки зрения ГЕНЕРАЦИИ событий message то логика ПРОСТАЯ. А с точки зрения
обработки событий 4х типов которые я просто обязан реализовать чтоб корректно отпарсить получается
много писанины.

Я тут вспомнил про co-routines. Волшебные функции которые даны нам уже в Kotlin/GoLang и которые
по моему мнению позволят реализовать этот кусок кода изящнее. И мне как перфекционисту кодирования
конечно интересен именно изящный подход.


Мне кажется, что с точки зрения обработки логика не будет сильно сложная.
Просто её не надо делать в одном месте.
Т.е. в рамках одного потока сообщений/событий создаются обработчики для n-типов обработчиков, которые обрабатывают строго один свой тип.
Как их разделять, в виде корутин и/или микросервисов зависит, от предыдущих архитектурных решений.

ИМХО может быть вообще посмотреть в сторону Spark+Hadoop.
Хотя лично я бы начал c Kafka.
...
Рейтинг: 0 / 0
Парсер логов
    #40011771
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коробочное решение - это плагин для ELK.
Но я не хочу связываться с elk, т.к упор все таки хочу сделать не на логи а на некий fuzzy text processing

Spark-hadooop это тоже хорошо, но они вторичны по отношению к модельке. Будет модель и набор параметров - тогда можно и написать mapper-reducer.
...
Рейтинг: 0 / 0
Парсер логов
    #40011827
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Коробочное решение - это плагин для ELK.
Но я не хочу связываться с elk, т.к упор все таки хочу сделать не на логи а на некий fuzzy text processing

Spark-hadooop это тоже хорошо, но они вторичны по отношению к модельке. Будет модель и набор параметров - тогда можно и написать mapper-reducer.


Т.к. на вход у вас идет не "чистые модельки", а сырые данные, формат которых может быть какой угодно, ибо строка.
То из этой "руды", нужно выцепить какой-то смысл.
Поэтому её пропускаем через кучу фильтров.
Причем для одного и того же "типа" может быть несколько фильтров, в зависимости от исходных данных.
Так что map-reduce вполне норм.
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Парсер логов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]