2017-02-06 21 views
0

В моем приложении у меня есть журнал fromat следующим образом-Logstash Grok фильтр для моего приложения

logFormat: '%-5level [%date{yyyy-MM-dd HH:mm:ss,SSS}] [%X{appReqId}] [%X{AppUserId}] %logger{15}: %m%n' 

и выход такого формата как

INFO [2017-02-03 11:09:21.792372] [b9c0d838-10b3-4495-9915-e64705f02176] [ffe00000000000003ebabeca] r.c.c.f.r.MimeTypeResolver: [Tika MimeType Detection]: filename: 'N/A', detected mime-type: 'application/msword', time taken: 2 ms 

Теперь я хочу каждое поле лога в быть запрошенным в kibana, и для этого я хочу, чтобы logstash анализировал входное сообщение журнала, и кажется, что фильтр grok там помогает нам. Если фильтр grok способен фильтровать мое сообщение, должно быть правильно выход должен быть равен

"message" => "INFO [2017-02-03 11:09:21.792372] [b9c0d838-10b3-4495-9915-e64705f02176] [ffe00000000000003ebabeca] r.c.c.f.r.MimeTypeResolver: [Tika MimeType Detection]: filename: 'N/A', detected mime-type: 'application/msword', time taken: 2 ms", 
"appReqId" => "b9c0d838-10b3-4495-9915-e64705f02176", 
"timestamp" => "2017-02-03 11:09:21.792372", 
"AppUserId" => "ffe00000000000003ebabeca", 
"logger" => "r.c.c.f.r.MimeTypeResolver", 

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

filter { 
grok { 
match => { "message" => "%{LOGLEVEL:severity}* %{YEAR:year}-%{MONTHNUM:month}-%{MONTHDAY:day} %{TIME:time} %{JAVACLASS:class}\.%{JAVAFILE:file}" } 
} 

}

и проверены на grok patter varifier и он не был бы оценен work.Any вид помощи.

ответ

1

Вы можете найти что-то, как это работает лучше:

^%{LOGLEVEL:security}%{SPACE}\[%{TIMESTAMP_ISO8601:timestamp}\]%{SPACE}\[%{DATA:appReqId}\]%{SPACE}\[%{DATA:AppUserId}\]%{SPACE}%{HOSTNAME:logger}:%{DATA:app_message}$ 

проникновения в суть здесь:

  • Используйте %{SPACE} обрабатывать один или-больше пространства экземпляров, которые могут произойти в некоторых форматах журналов , * в вашем синтаксисе также может это сделать, но это делает это более явно в выражении grok.
  • Используйте специальный формат временной отметки, %{TIMESTAMP_ISO8601}, а не пытайтесь разбить его и собрать позже. Это позволяет использовать фильтр-блок date { match => [ "timestamp", ISO8601 ] } позже, чтобы превратить его в настоящую временную метку, которая будет полезна в Kibana.
  • Захват атрибутов в квадратных скобках непосредственно в выражении grok.
  • Якорь выражение grok (^ и $ символов), чтобы дать подсказки движку регулярных выражений, чтобы сделать выражение менее дорогостоящим процессом.
+0

спасибо @ sysadmin1138, он отлично работал для меня – RIPAN