2017-01-13 12 views
0

座標をgeo_pointとして保存する際に問題があります。私の目標は、JSON形式で受け取ったLogstashパイプラインを使ってElasticSearchに文書を追加することです。座標をgeo_pointとして保存する際の問題

{ 
    "text": "hello", 
    "location": { 
    "lat": "42.5064128", 
    "lon": "1.52069438894224" 
    } 
} 

私はELKスタックに新しいですので、私は、最小限の完全かつ検証可能な例を作成しました::

の/ etc/logstash/confのフィールドのほとんどを省略JSONは次のようになります。 D/mycompanyの - つぶやき - demo.conf:

input { 
    tcp { 
     port => 10000 
     codec => "json" 
    } 
} 

filter {  
    mutate { 
     # this "works", however the location in no way matches the coordinates when displayed via tile map in Kibana 
     #add_field => { "mylocation" => 52 } 
     #add_field => { "mylocation" => 8 } 

     # this yields "illegal latitude value [268.76953125] for mylocation" 
     add_field => { "mylocation" => 51.9 } 
     add_field => { "mylocation" => 7.9 } 

     # this yields "illegal latitude value [269.1322946548462] for mylocation" for the demo JSON 
     #add_field => { "mylocation" => "%{[location][lat]}" } 
     #add_field => { "mylocation" => "%{[location][lon]}" } 
    } 
} 

output { 
    elasticsearch { 
     hosts => "http://localhost:9200" 
     index => "mycompany-tweet-demo" 
     document_type => "tweet" 

     template => "/etc/logstash/templates/mycompany-demo-template.json" 
     template_overwrite => true 
    } 
} 

/etc/logstash/templates/mycompany-demo-template.json:

{ 
    "template": "mycompany-*", 
    "mappings": { 
     "_default_": { 
      "properties": { 
       "mylocation" : { 
        "type" : "geo_point" 
       } 
      } 
     } 
    } 
} 

〜/ one.json:

{"text":"hello","location":{"lat":"42.5064128","lon":"1.52069438894224"}} 

cat〜/ one.json | geo_pointのドキュメントと、私が読んだのstackoverflow上でいくつかの記事に基づいて10000

[2017-01-13T17:41:38,504][WARN ][logstash.outputs.elasticsearch] Failed action. {:status=>400, :action=>["index", {:_id=>nil, :_index=>"mycompany-tweet-demo", :_type=>"tweet", :_routing=>nil}, 2017-01-13T16:41:38.458Z 0:0:0:0:0:0:0:1 %{message}], :response=>{"index"=>{"_index"=>"mycompany-tweet-demo", "_type"=>"tweet", "_id"=>"AVmYtLvEovM5deO5CNpA", "status"=>400, "error"=>{"type"=>"mapper_parsing_exception", "reason"=>"failed to parse", "caused_by"=>{"type"=>"illegal_argument_exception", "reason"=>"illegal latitude value [269.1322946548462] for mylocation"}}}}} 

をlocalhostのNC、私は仕事に0と90の間の値を持つ私の例を期待したいです。誰かが間違っていることを指摘できますか?

答えて

1

あなたは何をする必要があるか、ほとんどそこにいるが、これは次のとおりです。

add_field => { "[mylocation][lat]" => "%{[location][lat]}" } 
    add_field => { "[mylocation][lon]" => "%{[location][lon]}" } 
+0

ありがとう!私たちはある時点でこれを試しましたが、実際には 'mylocation'を' geo_point'として設定していたに違いありません。 – oschlueter

+0

素晴らしい、嬉しい助けて! – Val