2015-10-21 2 views
0

У меня возникли некоторые проблемы с разбором логина.Фильтр Logstash Regex в поле

У меня есть thousends из loglines и каждый лаглинь содержит имя хоста, как ABC123DF I Have прописан регулярное выражение, и я хочу, чтобы применить его к лаглиню и поставить имя хоста в поле «жертвы» Как это:

add_field => [ "victim", "/[a-z][a-z][a-z][0-9][0-9][0-9].." 

Я использовал мутировать фильтр, но результат

жертва/[аз] [аз] [аз] [0-9] [0-9] [0-9] ..

Я бы как видно:

жертва ABC123DF

как это сделать?

ответ

1

Для достижения этого вам даже не требуется сложное регулярное выражение. Вы можете использовать several filters для извлечения полей. В вашем случае grok filter - хороший выбор.

Давайте предположим, что ваши строки логов выглядеть следующим образом:

20:20:20 ABC123DF 192.168.1.1 

Затем Grok фильтр, как это было разобрать имя хоста правильно:

grok { 
    match => { "message" => "%{TIME:timestamp} %{HOST:host} %{IP:srcip}" } 
} 

Вы также можете использовать регулярное выражение внутри grok (docs). Пример:

%{GREEDYDATA} (?<host>.*) %{GREEDYDATA} 

Однако я бы рекомендовал избежать регулярного выражения в grok. Это лучший подход к включенным шаблонам. Используйте grok debugger, чтобы найти правильные шаблоны для вас.

0

Так что в моем случае лаглинь является:

2015-10-20 14: 45: 42156 [бассейн-3-нитка-1] INFO аудит Отменено abc123df из группы LLDS2Cassandra [LOCAL] с NetworkCorruption

grok { 
    match => { "message" => "%{TIME:timestamp} %{LOGLEVEL} %{VICTIM:victim} " } 
} 

И в шаблонах grok я разместил следующую строку: VICTIM [a-z][a-z][a-z][0-9][0-9][0-9].

Чтобы получить следующий результат:

поле: TIMESTAMP ЗНАЧЕНИЕ: 2015-10-20 14: 45: 42156

ПОЛЕ: ЖЕРТВА ЗНАЧЕНИЕ: abc123df

ПОЛЕ: LOGLEVEL
VALUEE: INFO

2

Я пользуюсь этим сайтом, http://grokconstructor.appspot.com/do/match#result, чтобы проверить мое регулярное выражение.

В моем журнале MongoDB, у меня есть этот текст:

2016-05-17T16: 26: 07.018-0300 я запрашиваю [conn50628097] getmore dataBaseName.collectionName запроса: {Empresa: «*** ***** "} cursorid: 443889850763 ntoreturn: 0 keyUpdates: 0 writeConflicts: 0 numYields: 69 nerturned: 8886 reslen: 1184746 locks: {Global: { purchaseCount: {r: 140}}, База данных: {приобретатьCount : {r: 70}, purchaseWaitCount: {r: 66}, timeAcquiringMicros: {r: 98046}}, Коллекция: {приобретатьCount: {r: 70}}} 178ms

Для ПОЛУЧИТЬ запроса и времени, в конфигурационном файле, я делаю этот фильтр:

filter { 
     if [source] == "/var/log/mongodb/mongod.log" { 
     grok { 
      match=> { 
      "message" => [ 
       "(getmore|query)\s(?<mongo_database>[a-zA-Z_]+)\.(?<mongo_collection>[a-zA-Z_.]+)\s?query:\s(?<mongo_query>\{.*?\})\s(cursorid|planSummary).*?\s(?<mongo_totaltime>[0-9]+ms)" 
      ] 
      } 
     } 
     } 
    } 

Использование:

(?<you_new_field_name>you_regex)you_regex(?<you_new_field_name>you_regex)(?<you_new_field_name>you_regex) 

после этого, вы можете сделать:

add_field => [ "tag_text_optional%{you_new_field_name}", "%{you_new_field_name}" ] 
+0

Logstash использовать ** oniguruma ** для expreg https://github.com/kkos/oniguruma/blob/master/doc/RE –

Смежные вопросы