Как сопоставить новую строку в grok / logstash?
у меня есть удаленная машина, которая объединяет многострочные события и отправляет их по протоколу лесоруба.
то, что входит, выглядит следующим образом:
{
"message" => "2014-10-20T20:52:56.133+0000 host 2014-10-20 15:52:56,036 [ERROR ][app.logic ] Failed to turn message into JSONnTraceback (most recent call last):n File "somefile.py", line 249, in _get_valuesn return r.json()n File "/path/to/env/lib/python3.4/site-packages/requests/models.py", line 793, in jsonn return json.loads(self.text, **kwargs)n File "/usr/local/lib/python3.4/json/__init__.py", line 318, in loadsn return _default_decoder.decode(s)n File "/usr/local/lib/python3.4/json/decoder.py", line 343, in decoden obj, end = self.raw_decode(s, idx=_w(s, 0).end())n File "/usr/local/lib/python3.4/json/decoder.py", line 361, in raw_decoden raise ValueError(errmsg("Expecting value", s, err.value)) from NonenValueError: Expecting value: line 1 column 1 (char 0), Failed to turn message into JSON"
}
когда я пытаюсь сопоставить сообщение с
grok {
match => [ "message", "%{TIMESTAMP_ISO8601:timestamp} [%LOGLEVEL:loglevel}%{ SPACE}][%{NOTSPACE:module}%{SPACE}]%{GREEDYDATA:message}" ]
}
на GREEDYDATA
не так жаден, как хотелось бы.
поэтому я попытался использовать gsub:
mutate {
gsub => ["message", "n", "LINE_BREAK"]
}
# Grok goes here
mutate {
gsub => ["message", "LINE_BREAK", "n"]
}
но это не сработало, а не
The Quick brown fox
jumps over the lazy
groks
I got
The Quick brown foxnjumps over the lazyngroks
так...
как мне добавить новую строку обратно в мои данные, сделать GREEDYDATA
соответствовать моим новым строкам или каким-то другим способом захватить соответствующую часть моего сообщения?
2 ответов
все GREEDYDATA
Это .*
, а .
не соответствует новой строке, поэтому вы можете заменить %{GREEDYDATA:message}
С (?<message>(.|\r|\n)*)
и заставить его быть по-настоящему жадным.
добавление флага regex в начало позволяет сопоставлять новые строки:
match => [ "message", "(?m)%{TIMESTA...