У меня есть два связанных вопроса. Во-первых, как лучше всего проверять журналы, которые имеют «беспорядочный» интервал и т. Д., А второй, который я попрошу отдельно, - это как обращаться с журналами, которые имеют произвольные пары атрибут-значение. (См: 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, поэтому также ценятся указатели на полезные ресурсы.
Вы можете помочь мне написать фильтр 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? –
@SoundaryaThiagarajan Вы должны создать новый вопрос с этим. – Val
http://stackoverflow.com/questions/40381173/writing-grok-filter –