2015-01-17 2 views
1

У меня есть PHP журнал этого форматаусловное соответствие с Grok для logstash

[Day Mon DD HH:MM:SS YYYY] [Log-Type] [client <ipv4 ip address>] <some php error type>: <other msg with /path/of/a/php/script/file.php and something else> 
[Day Mon DD HH:MM:SS YYYY] [Log-Type] [client <ipv4 ip address>] <some php error type>: <other msg without any file name in it> 
[Day Mon DD HH:MM:SS YYYY] [Log-Type] [client <ipv4 ip address>] <some msg with out semicolon in it but /path/of/a/file inside the message> 

Это я пытаюсь отправить Graylog2 после обработки через logstash. Используя this post here, я смог начать. теперь я хотел бы получить дополнительные поля, так что моя окончательная версия будет выглядеть примерно так.

{ 
     "message" => "<The entire error message goes here>", 
     "@version" => "1", 
    "@timestamp" => "converted timestamp from Day Mon DD HH:MM:SS YYYY", 
      "host" => "<ipv4 ip address>", 
     "logtime" => "Day Mon DD HH:MM:SS YYYY", 
     "loglevel" => "Log-Type", 
     "clientip" => "<ipv4 ip address>", 
     "php_error_type" => "<some php error type>" 
     "file_name_from_the_log" => "/path/of/a/file || /path/of/a/php/script/file.php" 
     "errormsg" => "<the error message after first colon (:) found>" 
} 

У меня есть выражение для отдельной линии, или по крайней мере я думаю, что они должны быть в состоянии разобрать, используя grokdebugger. что-то вроде этого:

%{DATA:php_error_type}: %{DATA:message_part1}%{URIPATHPARAM:file_name}%{GREEDYDATA:errormsg} 
%{DATA:php_error_type}: %{GREEDYDATA:errormsg} 
%{DATA:message_part1}%{URIPATHPARAM:file_name}%{GREEDYDATA:errormsg} 

Но почему-то мне очень сложно заставить его работать для всего файла журнала.

Любое предложение пожалуйста? Кроме того, не уверен, что в файле журнала будут какие-либо другие сообщения об ошибках. но цель состоит в том, чтобы получить одинаковый формат для всех. Любые предложения, как решить эти журналы, чтобы получить вышеупомянутый формат?

+0

Что значит «очень сложно»? Один из ваших шаблонов не работает в отладчике, или? –

+0

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

ответ

7

grok filter может быть сконфигурирован с несколькими шаблонами:

grok { 
    match => [ 
    "message", "%{DATA:php_error_type}: %{DATA:message_part1}%{URIPATHPARAM:file_name}%{GREEDYDATA:errormsg}", 
    "message", "%{DATA:php_error_type}: %{GREEDYDATA:errormsg}", 
    "message", "%{DATA:message_part1}%{URIPATHPARAM:file_name}%{GREEDYDATA:errormsg}" 
    ] 
} 

(вместо одного фильтра с несколькими шаблонами, вы можете иметь несколько фильтров ГРОК, но тогда вы, вероятно, хотите, чтобы отключить _grokparsefailure мечения с tag_on_failure => [] .)

+0

Я пришел сюда, чтобы написать то же самое. На самом деле, я действительно видел [этот пост] (http://stackoverflow.com/questions/20849583/how-to-handle-non-matching-logstash-grok-filters), но не понял. Сегодня я смог. так что теперь я получил это, чтобы работать. Тем не менее, спасибо. супер счастливый logstash + graylog2 пользователь :). – Abhinav

+0

Привет @Magnus Для меня я столкнулся с неправильной конфигурацией –

+0

@feelgoodandprogramming Правильный синтаксис grok {match => { "message" => ["% {DATA: php_error_type}:% {DATA: message_part1}% {URIPATHPARAM: имя_файла }% {GREEDYDATA: errormsg} ", "% {DATA: php_error_type}:% {GREEDYDATA: errormsg} ", "% {DATA: message_part1}% {URIPATHPARAM: имя_файла}% {GREEDYDATA: errormsg} ",] } } –

3

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

(?:%{PATTERN1}|%{PATTERN2}) 

или

(?:%{PATTERN1}|) 

Чтобы сказать, что это PATTERN1 OR ''. (Пусто)

Используя это, вы можете иметь иметь только один шаблон для управления:

grok { 
    match => [ 
     "message", "(?:%{DATA:php_error_type}: |)(?:%{DATA:message_part1}:)(?:%{URIPATHPARAM:file_name}|)%{GREEDYDATA:errormsg}", 
    ] 
} 

Если у вас возникли проблемы, возможно, заменить %{DATA} на более ограничительный рисунок.

Для отладки сложного рисунка ГРОК, я рекомендую: