2015-08-07 6 views
1

У меня есть два связанных вопроса. Во-первых, как лучше всего проверять журналы, которые имеют «беспорядочный» интервал и т. Д., А второй, который я попрошу отдельно, - это как обращаться с журналами, которые имеют произвольные пары атрибут-значение. (См: logstash grok filter for logs with arbitrary attribute-value pairs)logstash grok фильтр для пользовательских журналов

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

14:46:16.603 [http-nio-8080-exec-4] INFO METERING - msg=93e6dd5e-c009-46b3-b9eb-f753ee3b889a CREATE_JOB job=a820018e-7ad7-481a-97b0-bd705c3280ad data=71b1652e-16c8-4b33-9a57-f5fcb3d5de92 

Использование http://grokdebug.herokuapp.com/ я смог в конце концов прийти со следующим рисунком ГРОК, который работает для этого линия:

%{TIME:timestamp} %{NOTSPACE:http} %{WORD:loglevel}%{SPACE}%{WORD:logtype} - msg=%{NOTSPACE:msg}%{SPACE}%{WORD:action}%{SPACE}job=%{NOTSPACE:job}%{SPACE}data=%{NOTSPACE:data} 

с следующий конфигурационный файл:

input { 
     file { 
       path => "/home/robyn/testlogs/trimmed_logs.txt" 
       start_position => beginning 
       sincedb_path => "/dev/null" # for testing; allows reparsing 
     } 
} 
filter { 
     grok { 
       match => {"message" => "%{TIME:timestamp} %{NOTSPACE:http} %{WORD:loglevel}%{SPACE}%{WORD:logtype} - msg=%{NOTSPACE:msg}%{SPACE}%{WORD:action}%{SPACE}job=%{NOTSPACE:job}%{SPACE}data=%{NOTSPACE:data}" } 
     } 
} 
output { 
     file { 
       path => "/home/robyn/filteredlogs/trimmed_logs.out.txt" 
     } 
} 

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

{"message":"14:46:16.603 [http-nio-8080-exec-4] INFO METERING - msg=93e6dd5e-c009-46b3-b9eb-f753ee3b889a CREATE_JOB job=a820018e-7ad7-481a-97b0-bd705c3280ad data=71b1652e-16c8-4b33-9a57-f5fcb3d5de92","@version":"1","@timestamp":"2015-08-07 T17:55:16.529Z","host":"hlt-dev","path":"/home/robyn/testlogs/trimmed_logs.txt","timestamp":"14:46:16.603","http":"[http-nio-8080-exec-4]","loglevel":"INFO","logtype":"METERING","msg":"93e6dd5e-c009-46b3-b9eb-f753ee3b889a","action":"CREATE_JOB","job":"a820018e-7ad7-481a-97b0-bd705c3280ad","data":"71b1652e-16c8-4b33-9a57-f5fcb3d5de92"} 

Это довольно много, что я хочу, но я чувствую, что это действительно запутано модель, в частности, с необходимостью использовать% {пробел} и% {NOSPACE} так много. Это говорит мне о том, что я не делаю этого наилучшим образом. Должен ли я создавать более конкретный шаблон для hex-идентификаторов? Я думаю, мне нужен% {SPACE} между loglevel и logtype из-за дополнительного пространства между INFO и METERING в журнале, но это также чувствует kludgy.

Также как получить временную метку журнала, чтобы заменить @timestamp, которая, как представляется, является журнальной таблицей времени, которая нам не нужна/нужна.

Очевидно, что я только начинаю с ELK и grok, поэтому также ценятся указатели на полезные ресурсы.

ответ

1

Существует существующий шаблон, который вы можете использовать вместо NOTSPACE, это UUID. Также, когда есть одно место, нет необходимости использовать шаблон SPACE, вы можете его оставить. Я также использую шаблон USERNAME (возможно, неправильно названный) только для захвата поля http.

Таким образом, это будет похоже на это, и у вас будет только один шаблон SPACE, чтобы захватить несколько пробелов.

Пример лаглинь:

14:46:16.603 [http-nio-8080-exec-4] INFO METERING - msg=93e6dd5e-c009-46b3-b9eb-f753ee3b889a CREATE_JOB job=a820018e-7ad7-481a-97b0-bd705c3280ad data=71b1652e-16c8-4b33-9a57-f5fcb3d5de92 

Grok картина:

%{TIME:timestamp} \[%{USERNAME:http}\] %{WORD:loglevel}%{SPACE}%{WORD:logtype} - msg=%{UUID:msg} %{WORD:action} job=%{UUID:job} data=%{UUID:data} 

Grok плюнет это:

{ 
    "timestamp": [ 
    [ 
     "14:46:16.603" 
    ] 
    ], 
    "HOUR": [ 
    [ 
     "14" 
    ] 
    ], 
    "MINUTE": [ 
    [ 
     "46" 
    ] 
    ], 
    "SECOND": [ 
    [ 
     "16.603" 
    ] 
    ], 
    "http": [ 
    [ 
     "http-nio-8080-exec-4" 
    ] 
    ], 
    "loglevel": [ 
    [ 
     "INFO" 
    ] 
    ], 
    "SPACE": [ 
    [ 
     " " 
    ] 
    ], 
    "logtype": [ 
    [ 
     "METERING" 
    ] 
    ], 
    "msg": [ 
    [ 
     "93e6dd5e-c009-46b3-b9eb-f753ee3b889a" 
    ] 
    ], 
    "action": [ 
    [ 
     "CREATE_JOB" 
    ] 
    ], 
    "job": [ 
    [ 
     "a820018e-7ad7-481a-97b0-bd705c3280ad" 
    ] 
    ], 
    "data": [ 
    [ 
     "71b1652e-16c8-4b33-9a57-f5fcb3d5de92" 
    ] 
    ] 
} 
+0

Вы можете помочь мне написать фильтр grok для этого рисунка: [2016-10-28T12: 13: 20,388] [INFO] [o.e.p.PluginsService] [hTYKFFt] загруженный модуль [ingest-common] Я пробовал вот так: {\ [% {TIME: TIMESTAMP} \]% {SPACE}% [% {WORD: loglevel}]% {SPACE} % [% {WORD: data}% {SPACE}% {WORD: data}% {data: message}% [{WORD: message}]} Можете ли вы помочь мне с этим grok? –

+0

@SoundaryaThiagarajan Вы должны создать новый вопрос с этим. – Val

+0

http://stackoverflow.com/questions/40381173/writing-grok-filter –

0

Существует также возможность использовать \ с * вместо шаблон SPACE.

Для удаления полей, которые вы можете использовать плагин мутировать есть метод, называемый «remove_field» ->https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html#plugins-filters-mutate-remove_field

Если удалить это поле, вы должны добавить новый индекс в kibana. Потому что kibana сортирует события с полем @timestamp, если ничего не выбрано.

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