Ho una macchina remota che combina eventi multilinea e li invia attraverso il protocollo del boscaiolo.Come abbinare una nuova riga in grok/logstash?
Che cosa viene in è qualcosa che assomiglia a questo:
{
"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"
}
Quando provo ad abbinare il messaggio con
grok {
match => [ "message", "%{TIMESTAMP_ISO8601:timestamp} \[%LOGLEVEL:loglevel}%{ SPACE}\]\[%{NOTSPACE:module}%{SPACE}\]%{GREEDYDATA:message}" ]
}
il GREEDYDATA
non è così avido come vorrei.
Allora ho provato ad usare gsub:
mutate {
gsub => ["message", "\n", "LINE_BREAK"]
}
# Grok goes here
mutate {
gsub => ["message", "LINE_BREAK", "\n"]
}
ma che non ha funzionato piuttosto che
The Quick brown fox
jumps over the lazy
groks
ho ottenuto
The Quick brown fox\njumps over the lazy\ngroks
Quindi ...
Come posso aggiungere newline torna ai miei dati, fai in modo che lo GREEDYDATA
corrisponda alle mie newline, o in qualche altro modo prendi la parte rilevante del mio messaggio?
Sembra un duplicato di http://stackoverflow.com/questions/24307965/logstash-grok-multiline-message. –
@ MagnusBäck fondamentalmente sì, anche se quella domanda non interessa le nuove righe ma I * do * richiedono che le nuove linee esistano nel messaggio risultante. –