2017-04-07 7 views
0

나는 https://github.com/trentm/node-bunyan에서foo 필드 만 얻으려면 어떻게 필터 { "foo": "bar", "bar": "foo"}를 사용합니까?

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

를 복사하여 내 logs.json로 저장합니다. LogStash를 통해 ElasticSearch로 두 필드 (이름 및 메시지) 만 가져 오려고합니다. 문제는 내가 수행 할 수없는 일종의 필터에 의존한다는 것입니다. 글쎄 단일 메일처럼 성공적으로이 라인을 가져 왔지만 실제로는 그렇지 않습니다.

그렇다면 이름과 메시지 만 ElasticSearch로 가져올 수 있습니까? http://grokdebug.herokuapp.com/을 사용하여 몇 가지 대안을 테스트하여 유용한 필터에 도달하지 못했습니다.

예를 들어, % {GREEDYDATA : message}는 전체 행을 고유 메시지로 가져 오지만이를 분할하고 이름 및 msg 필드 이외의 모든 것을 무시하는 방법은 무엇입니까? 끝에

, 나는 여기에 사용하는 기획입니다 : 난 그냥 available Logstash filters의 목록을 갈

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

답변

0

. prune filter은 귀하의 필요와 일치해야합니다.

당신이 prune filter 설치 한 가정, 설정 파일이 같아야합니다 :

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

당신이 올바른 유형으로 인덱스를에 Elasticsearch에 대한 type을 유지하려는 것을 주목하시기 바랍니다. 에서 데이터를 볼 경우 @timestamp이 필요합니다.