Ich kopiertewie filter {"foo": "bar", "bar": "foo"} mit grok um nur foo field zu bekommen?
{"name":"myapp","hostname":"banana.local","pid":40161,"level":30,"msg":"hi","time":"2013-01-04T18:46:23.851Z","v":0}
von https://github.com/trentm/node-bunyan und es als meine logs.json speichern. Ich versuche, nur zwei Felder (Name und Nachricht) zu ElasticSearch über LogStash zu importieren. Das Problem ist, dass ich auf eine Art Filter angewiesen bin, den ich nicht erreichen kann. Nun, ich habe erfolgreich solche Zeile als eine einzelne Nachricht importiert, aber sicherlich ist es nicht in meinem Fall wert.
Wie gesagt, wie kann ich nur Name und Nachricht in ElasticSearch importieren? Ich habe mehrere Alternativen mit http://grokdebug.herokuapp.com/ getestet, um einen nützlichen Filter ohne Erfolg zu erreichen.
Zum Beispiel bringt% {GREEDYDATA: message} die gesamte Zeile als eine eindeutige Nachricht, aber wie teilt man sie und ignoriert alle anderen als name und msg Felder?
Am Ende ist mir die Planung hier verwenden:
input {
file {
type => "my_type"
path => [ "/home/logs/logs.log" ]
codec => "json"
}
}
filter {
grok {
match => { "message" => "data=%{GREEDYDATA:request}"}
}
#### some extra lines here probably
}
output
{
elasticsearch {
codec => json
hosts => "http://127.0.0.1:9200"
index => "indextest"
}
stdout { codec => rubydebug }
}