2017-04-07 5 views
0

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

Antwort

0

ich gerade habe durch die Liste der available Logstash filters gegangen. Die prune filter sollte Ihrem Bedarf entsprechen.

Angenommen, Sie die prune filter installiert haben, sollten Sie Ihre Konfigurationsdatei wie folgt aussehen:

input { 
    file { 
    type => "my_type" 
    path => [ "/home/logs/logs.log" ] 
    codec => "json" 
    } 
} 

filter { 
    prune { 
    whitelist_names => [ 
     "@timestamp", 
     "type", 
     "name", 
     "msg" 
    ] 
    } 
} 

output { 
    elasticsearch { 
    codec => json 
    hosts => "http://127.0.0.1:9200" 
    index => "indextest" 
    } 

    stdout { codec => rubydebug } 
} 

Bitte zu beachten, dass Sie es in einen richtigen Typ type für Elasticsearch indizieren behalten möchten. @timestamp ist erforderlich, wenn Sie die Daten unter Kibana anzeigen.

Verwandte Themen