Comment puis-je faire correspondre une nouvelle ligne dans grok/logstash?

j'ai une machine distante qui combine des événements multilignes et les envoie à travers le protocole lumberjack.

Ce qui vient est quelque chose qui ressemble à ceci:

{
     "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"
}

quand j'essaie de faire correspondre le message avec

grok {         
    match => [ "message", "%{TIMESTAMP_ISO8601:timestamp} [%LOGLEVEL:loglevel}%{    SPACE}][%{NOTSPACE:module}%{SPACE}]%{GREEDYDATA:message}" ]
}

GREEDYDATA n'est pas aussi gourmand que je le voudrais.

alors j'ai essayé d'utiliser gsub:

mutate {
    gsub => ["message", "n", "LINE_BREAK"]
}
# Grok goes here
mutate {
    gsub => ["message", "LINE_BREAK", "n"]
}

mais celle-ci n'a pas fonctionné plutôt que

The Quick brown fox
jumps over the lazy
groks

je obtenu

The Quick brown foxnjumps over the lazyngroks

...

Comment puis-je soit ajouter la nouvelle ligne de nouveau à mes données, faire le GREEDYDATA correspondent à mes nouvelles lignes, ou d'une autre façon de saisir la partie pertinente de mon message?

19
demandé sur Wayne Werner 2014-10-21 01:04:03

2 réponses

GREEDYDATA.*, mais . ne correspond pas à newline, donc vous pouvez remplacer %{GREEDYDATA:message}(?<message>(.|\r|\n)*)et qu'il soit vraiment gourmand.

58
répondu Alcanzar 2014-10-20 21:33:42

L'ajout du drapeau regex au début permet d'apparier les nouvelles lignes:

match => [ "message", "(?m)%{TIMESTA...
17
répondu Wayne Werner 2014-10-20 21:45:45