regex - mutate - ¿Cómo emparejo una nueva línea en grok/logstash?
logstash grok regex (2)
Tengo una máquina remota que combina eventos multilínea y los envía a través del protocolo de leñador.
Lo que viene es algo que se parece a esto:
{
"message" => "2014-10-20T20:52:56.133+0000 host 2014-10-20 15:52:56,036 [ERROR ][app.logic ] Failed to turn message into JSON/nTraceback (most recent call last):/n File /"somefile.py", line 249, in _get_values/n return r.json()/n File /"/path/to/env/lib/python3.4/site-packages/requests/models.py/", line 793, in json/n return json.loads(self.text, **kwargs)/n File /"/usr/local/lib/python3.4/json/__init__.py/", line 318, in loads/n return _default_decoder.decode(s)/n File /"/usr/local/lib/python3.4/json/decoder.py/", line 343, in decode/n 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_decode/n raise ValueError(errmsg(/"Expecting value/", s, err.value)) from None/nValueError: Expecting value: line 1 column 1 (char 0), Failed to turn message into JSON"
}
Cuando intento hacer coincidir el mensaje con
grok {
match => [ "message", "%{TIMESTAMP_ISO8601:timestamp} /[%LOGLEVEL:loglevel}%{ SPACE}/]/[%{NOTSPACE:module}%{SPACE}/]%{GREEDYDATA:message}" ]
}
El GREEDYDATA
no es tan codicioso como me gustaría.
Entonces intenté usar gsub:
mutate {
gsub => ["message", "/n", "LINE_BREAK"]
}
# Grok goes here
mutate {
gsub => ["message", "LINE_BREAK", "/n"]
}
pero ese no funcionó en lugar de
The Quick brown fox
jumps over the lazy
groks
tengo
The Quick brown fox/njumps over the lazy/ngroks
Asi que...
¿Cómo puedo volver a agregar la nueva línea a mis datos, hacer que el GREEDYDATA
coincida con mis nuevas líneas, o de alguna otra manera captar la parte relevante de mi mensaje?
Al agregar el indicador de expresiones regulares al principio se permiten nuevas líneas coincidentes:
match => [ "message", "(?m)%{TIMESTA...
Todo GREEDYDATA
es .*
, Pero .
no coincide con la nueva línea, por lo que puede reemplazar %{GREEDYDATA:message}
con (?<message>(.|/r|/n)*)
y hacer que sea verdaderamente codicioso.