Logsta sh фильтр для журналов весенней загрузки, чтобы захватить уровень журнала, имя класса - PullRequest
1 голос
/ 26 января 2020

Я пытаюсь отфильтровать журналы приложений с весенней загрузкой, используя logsta sh, используя приведенную ниже конфигурацию в блоке фильтра

filter {

 grok {
    match => [ "message",
               "(?<timestamp>%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME})  %{LOGLEVEL:level} %{NUMBER:pid} --- \[(?<thread>[A-Za-z0-9-]+)\] [A-Za-z0-9.]*\.(?<class>[A-Za-z0-9#_]+)\s*:\s+(?<logmessage>.*)",
               "message",
               "(?<timestamp>%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME})  %{LOGLEVEL:level} %{NUMBER:pid} --- .+? :\s+(?<logmessage>.*)"
             ]
  }


  date {
    match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss.SSS" ]
  }
}

, но он не показывает уровень, pid, имя класса в KIbana. enter image description here

Несколько строк из файла журнала

2020-01-23 12:08:51.468 ERROR 13216 --- [http-nio-8085-exec-1] com.poc.SampleLog.DemoController         : java.lang.NullPointerException

java.lang.NullPointerException: null
    at com.poc.SampleLog.DemoController.exception2(DemoController.java:36) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]

Что следует изменить в фильтре grok для захвата уровня журнала, имени класса и т. Д. c. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 27 января 2020

Попробуйте:

ВХОД:

2020-01-23 12:08:51.468 ERROR 13216 --- [http-nio-8085-exec-1] com.poc.SampleLog.DemoController         : java.lang.NullPointerException

java.lang.NullPointerException: null
    at com.poc.SampleLog.DemoController.exception2(DemoController.java:36) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]

РИСУНОК GROK:

(?<timestamp>%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME}) %{LOGLEVEL:level} %{NUMBER:pid} --- \[%{GREEDYDATA:thread}\] %{GREEDYDATA:class}: %{GREEDYDATA:exception}%{SPACE}(?<stacktrace>(.|\r|\n)*)

ВЫХОД:

{
  "timestamp": [
    [
      "2020-01-23 12:08:51.468"
    ]
  ],
  "YEAR": [
    [
      "2020"
    ]
  ],
  "MONTHNUM": [
    [
      "01"
    ]
  ],
  "MONTHDAY": [
    [
      "23"
    ]
  ],
  "TIME": [
    [
      "12:08:51.468"
    ]
  ],
  "HOUR": [
    [
      "12"
    ]
  ],
  "MINUTE": [
    [
      "08"
    ]
  ],
  "SECOND": [
    [
      "51.468"
    ]
  ],
  "level": [
    [
      "ERROR"
    ]
  ],
  "pid": [
    [
      "13216"
    ]
  ],
  "BASE10NUM": [
    [
      "13216"
    ]
  ],
  "thread": [
    [
      "http-nio-8085-exec-1"
    ]
  ],
  "class": [
    [
      "com.poc.SampleLog.DemoController         "
    ]
  ],
  "exception": [
    [
      "java.lang.NullPointerException"
    ]
  ],
  "SPACE": [
    [
      "\n\n"
    ]
  ],
  "stacktrace": [
    [
      "java.lang.NullPointerException: null\n    at com.poc.SampleLog.DemoController.exception2(DemoController.java:36) ~[classes/:na]\n    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]\n    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]\n    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]\n    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]"
    ]
  ]
}
0 голосов
/ 27 января 2020

Поскольку ваши сообщения занимают несколько строк (как это обычно делается в стековых трассах), вам необходимо добавить многострочный флаг m в шаблон регулярных выражений / grok (см. Этот учебник например).

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

Но, по моему мнению, вам определенно нужно использовать многострочный флаг.

...