2017-04-07 1 views
0

Je copiécomment filtrer {"foo": "bar", "bar": "foo"} avec grok pour obtenir seulement le champ foo?

{"name":"myapp","hostname":"banana.local","pid":40161,"level":30,"msg":"hi","time":"2013-01-04T18:46:23.851Z","v":0} 

de https://github.com/trentm/node-bunyan et l'enregistrer comme mon logs.json. J'essaye d'importer seulement deux champs (nom et message) à ElasticSearch par l'intermédiaire de LogStash. Le problème est que je dépends d'une sorte de filtre que je ne suis pas capable d'accomplir. Eh bien, j'ai réussi à importer une ligne comme un seul message, mais certainement il ne vaut pas dans mon cas réel. Cela dit, comment puis-je importer uniquement le nom et le message dans ElasticSearch? J'ai testé plusieurs alternatives en utilisant http://grokdebug.herokuapp.com/ pour atteindre un filtre utile sans succès du tout. Par exemple,% {GREEDYDATA: message} affichera la ligne entière comme un message unique, mais comment la diviser et ignorer tous les champs autres que le nom et le msg?

A la fin, je suis de rabotage à utiliser ici:

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

Répondre

0

Je viens de parcourir la liste des available Logstash filters. Le prune filter devrait correspondre à votre besoin.

Supposons que vous avez installé le prune filter, votre fichier de configuration devrait ressembler à:

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

S'il vous plaît noter que vous voulez garder type pour ElasticSearch l'indexer dans un type correct. @timestamp est requis si vous souhaitez afficher les données sur Kibana.