Я пытаюсь определить наилучший способ анализа файла журнала и подсчета всех ошибок в нем по типу. В настоящее время я открываю журнал в текстовом редакторе, удаляю дату и идентификатор потока, затем сортирую файл. Это объединяет все ошибки по типу, который я затем могу посчитать (используя функцию подсчета в редакторе, а не вручную). Я ищу способ сделать это автоматически и, возможно, использовать это как возможность выучить новый язык (я знаю минимальные Perl и Ruby, которые, кажется, могут работать для этой задачи). Файл журнала выглядит следующим образом (элементы в угловых скобках являются переменными для каждой строки, а каналы - это действительные символы в журнале):
<Datetime stamp> | <Thread ID> | ERROR | Foo.Bar: Backend error
<Datetime stamp> | <Thread ID> | ERROR | Foo.Bar: InvalidUserException
<Datetime stamp> | <Thread ID> | ERROR | Foo.Com: Timeout error
<Datetime stamp> | <Thread ID> | ALWAYS | Foo.Bar: Login Transaction [584] executed in [400] milliseconds
<Datetime stamp> | <Thread ID> | ALWAYS | Foo.Bar: Login Transaction [585] executed in [500] milliseconds
<Datetime stamp> | <Thread ID> | ALWAYS | Foo.Bar: Login Transaction [586] executed in [500] milliseconds
<Datetime stamp> | <Thread ID> | ALWAYS | Biz.Dee: Logout Transaction [958] executed in [630] milliseconds
<Datetime stamp> | <Thread ID> | ERROR | Foo.Bar: Backend error
Я не хочу использовать серию команд grep, потому что мне нужно будет знать, что искать - если в журнале появится новая ошибка, без добавления новой команды она не будет засчитана.
Вывод, который я ищу, выглядит примерно так:
Foo.Bar: Backend error: 2 occurrences
Foo.Com: Timeout error: 1 occurrence
В идеале было бы неплохо также рассчитать среднее время транзакции:
Foo.Bar: Login Transaction: 3 occurrences with an average of 466 milliseconds
Biz.Dee: Logout Transaction: 1 occurrence with an average of 630 milliseconds
Я видел некоторые инструменты, упомянутые в других потоках SO ( Анализатор журнала SMTP , Анализатор журнала Microsoft , Zabbix и Splunk ), но я также хотел бы узнать что-то новое без ненужного дублирования существующего инструмента. Будет ли Perl или Ruby хорошим выбором для этой задачи? Я не ищу рабочий сценарий, но несколько указателей в правильном направлении или хороший инструмент для использования.