2016-02-23 3 views
0

I ma new для Grok и logstash.Применить grok для logfiles

2016/02/18 - 03:52:08|service|Info|some message in different format 
2016/02/18 - 03:52:08|service|Info|Time to process "tweet_name" is 40.1081357 second(s) 

У меня будут сообщения, подобные вышеуказанному формату. То, что я хочу, я хочу, чтобы извлечь следующие вещи,

  1. DateTime
  2. сервис
  3. LogLevel
  4. сообщение
  5. tweetname
  6. timetoprocess

Пункт 5 и 6 будет доступна, только если сообщение начинается с Time to process

Я написал grok, но я не уверен, как извлечь элементы 5 и 6. Потому что # 5 и # 6 будут доступны только в определенной строке сообщения журнала.

filter {grok { match => { "message" => "(?<datetime>(([0-9]+)\/*)+ - ([0-9]+:*)+)\|%{WORD:service}\|%{WORD:loglevel}\|%{GREEDYDATA:message}" }}} 

Как я могу получить товар №5 и №6 и применить grok?

ответ

1

Я бы предложил использовать две грозовые строфы. Во-первых, вытащите общий материал (ваш # 1- # 3). Поместите оставшийся материал обратно в [сообщение], используя параметр «переписать», чтобы grok {}. Это в значительной степени то, что у вас есть в grok, который вы предоставили, но будет более понятным, если вы используете встроенные шаблоны, такие как% {YEAR}

Затем используйте вторую строфу grok с шаблонами соответствия для обработки других типов оставшихся значений. Что-то вроде этого:

grok { 
    match => { "message" => "Time to process \"%{DATA:tweet_name}\" is %{NUMBER:tweet_sec} second\(s\)" } 
} 

Если у вас есть другие сообщения, на которые вы хотели бы сделать поля, добавить больше моделей в ГРКАХ строфы. Он будет обрабатывать их, пока не найдет совпадение, а затем выйдет.

0

Вы должны добавить новый grok для другого сообщения. Он будет обрабатывать их последовательно, после сопоставления правильного шаблона он выйдет.