Нужны входные данные для обработки многострочных журналов javastack в стеке ELK

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

Thread #1: t@-1680123584, lwp=22843, ref=0x1b0f8550, session=9F0071A66D89544155D149CCE2453E9A:mx2135649930e123d964:(WebServiceFacade.java:84), ms=0x78714bc0
<Start Stack Trace>
  <1 - ADK Verbose Trace Entry>
  stateless dispatch for invokeClass.bosInterface executing
  Active: 37 minutes  0.00 seconds 
  User:
    ServiceUser1
  Tenant:
    
  Session:
    9F0071A66D89544155D149CCE2453E9A:mx2135649930e123d964:(WebServiceFacade.java:84)
  Parameters:
    bosContext _cntx:
      user:
        ContextUser1
      depth:
        3
      session id:
        9F0071A66D89544155D149CCE2453E9A:mx2135649930e123d964:(WebServiceFacade.java:84)
    bosUTF _className:
      TestClassName1
    bosStringList _construct:
      2 entries
          $$MXRIP$$|java.util.HashMap
          1
    bosUTF _methodName:
      TestMethodName1
    bosStringList _params:
      2 entries
          $$MXRIP$$|java.util.HashMap
          16
    uint8 _local:
      1

  Error Stack:
  
Thread #2: t@-1686439616, lwp=22837, ref=0x1b7a81c0, session=2FF1BFBFCC010E7815678741BB95907F:mx115420087975768b5:(WebServiceFacade.java:84), ms=0x78caa910
<Start Stack Trace>
  <1 - ADK Verbose Trace Entry>
  stateless dispatch for invokeClass.bosInterface executing
  Active: 34 minutes  45.00 seconds 
  User:
    ServiceUser2
  Tenant:
    
  Session:
    2FF1BFBFCC010E7815678741BB95907F:mx115420087975768b5:(WebServiceFacade.java:84)
  Parameters:
    bosContext _cntx:
      user:
        ContextUser2
      depth:
        2
      session id:
        2FF1BFBFCC010E7815678741BB95907F:mx115420087975768b5:(WebServiceFacade.java:84)
    bosUTF _className:
      ClassName2
    bosStringList _construct:
      2 entries
          $$MXRIP$$|java.util.HashMap
          7
    bosUTF _methodName:
      TestMethodName2
    bosStringList _params:
      2 entries
          $$MXRIP$$|java.util.HashMap
          6
    uint8 _local:
      1

 Error Stack:

Если кто-то может помочь мне понять общую стратегию, как я могу получить ниже информацию из этих журналов, например: Для Thread1:

Active => 37 minutes  0.00 seconds
User => ServiceUser1
Tenant => 
Session => 9F0071A66D89544155D149CCE2453E9A:mx2135649930e123d964:(WebServiceFacade.java:84)
Parameters:
user => ContextUser1
bosUTF _className => TestClassName1
bosUTF _methodName => TestMethodName1

И аналогичная информация для следующих потоков, которые будут в том же файле журнала.


person Ankit Sachan    schedule 18.02.2021    source источник


Ответы (1)


Вам нужно понять многострочный синтаксический анализ для разделения каждого потока как одного события журнала.

input{
    file{
        path => "/home/test_logs.log"
        tags => ["samplelog"]
        sincedb_path => "/dev/null"
        start_position => "beginning"
        codec => multiline {
                pattern => "^\s"
                negate => true
                what => "previous"
        }

    }

}

Затем вы продолжите фильтрацию

filter{

  if "samplelog" in [tag]{

        grok{

         break_on_match => false

         #log parsing

         match => { "message" => "<grok pattern here>"}

        }
        
        #For possibly using the date from log
        date{

         match => ["Timestamp", "UNIX_MS"]

         target => "@time"

        }

     }

}
person Ankit    schedule 21.02.2021
comment
Спасибо, Ankit, у меня уже есть аналогичный файл logstash.conf, но проблема в том, что в моих файлах журналов есть множество пробелов и символов новой строки между значениями, и помещать все это в шаблон grok действительно запутанно. - person Ankit Sachan; 22.02.2021
comment
Итак, вам нужно получить правильный шаблон журнала? - person Ankit; 22.02.2021
comment
(?‹сообщение›(.|\r|\n)*)Активный: %{GREEDYDATA:Active}\n.*Пользователь:\n(?‹Пользователь›(.|\r|\n)*)Арендатор: \n(?‹Тенант›(.|\r|\n)*)Сеанс:\n(?‹Сеанс›(.|\r|\n)*)Параметры:\n%{GREEDYDATA:param1}\n .*пользователь:\n(?‹пользователь›(.|\r|\n)*)\n.*глубина:\n(?‹глубина›(.|\r|\n)*)\n.* идентификатор сеанса:\n(?‹идентификатор сеанса›(.|\r|\n)*))\n.*bosUTF\s_className:\n(?‹bosUTF _className:›(.|\r|\n)* )\n.*bosStringList((.|\r|\n)*)bosUTF\s_methodName.*\n(?‹bosUTF _methodName›(.|\r|\n)*)\n.*bosStringList _params.* \n%{GREEDYDATA} Это грубая попытка, но она может дать вам представление об этом. - person Ankit; 22.02.2021