# 緯度経度をkibanaの世界地図にマッピングする方法について

**URL:** <https://discuss.elastic.co/t/kibana/155867>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [November 8, 2018, 10:42am UTC](https://discuss.elastic.co/t/kibana/155867 "2018-11-08T10:42:18Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![TK1](https://avatars.discourse-cdn.com/v4/letter/t/96bed5/32.png) [@TK1](https://discuss.elastic.co/u/TK1)\
**Post date:** [November 8, 2018, 10:42am UTC](https://discuss.elastic.co/t/kibana/155867/1 "2018-11-08T10:42:18Z")

</div>

csvファイルの緯度経度の情報からkibanaで世界地図上に可視化したいのですが上手くいきません．  
logstashのconfファイルをどのように改善すればよいかアドバイスもらえませんか．

[http://onthesoup.hatenablog.com/entry/2018/02/11/061500](http://onthesoup.hatenablog.com/entry/2018/02/11/061500)  
上記のサイトを参考にしているのですが，ipアドレスからelasticsearchに入力する際にgeoipを入力するのでは処理に時間が掛かるので，あらかじめ，緯度，経度を与えたcsvファイルを作成し入力にしています．

データの入力自体は出来ていますが，世界地図上へのマッピングが上手くいきません．

ELKのversionは以下の通りです  
logstash:6.4.2  
elasticsearch:6.4.2  
kibana:6.4.2

```auto
input {
  file {
    path => "<抽出したログへのパス>.csv"
    type => "miraivariant"
    start_position => "beginning"
  }
}
filter {
  csv {
    columns => ["timestamp","source_ip","source_port","dist_port","latitude","longitude"]
    separator => "	"
    convert => {
      "timestamp" => "date"
    }
  }
  date {
    match => ["timestamp", "UNIX"]
    timezone => ["Asia/Tokyo"]
    target => "@timestamp"
  }
  mutate {
    convert => { "source_port" => "integer" }
    convert => { "dist_port" => "integer" }
    convert => { "source_ip" => "string" }     
  }
  mutate { 
	convert => {"lat" => "float"} 
	convert => {"lan" => "float"} 
  }
  mutate { rename => {"latitude" => "[location][lat]"} }
  mutate { rename => {"longitude" => "[location][lon]"} } 
  mutate { convert => { "[location]" => "float" } }
  
}
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "logstash-miraivariant-scan"
  }
  stdout { codec => rubydebug }
}

```

---

<div class="post-metadata">

**Author:** ![johtani](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/johtani/32/44956_2.png) [@johtani](https://discuss.elastic.co/u/johtani)\
**Post date:** [November 12, 2018, 2:48pm UTC](https://discuss.elastic.co/t/kibana/155867/2 "2018-11-12T14:48:32Z")

</div>

カテゴリーに「日本語」コーナーがあるので、そちらに変更しました。

Elasticsearchに緯度経度情報を登録する場合は、[geo-pointというフィールドタイプ](https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html)をマッピングで指定しないといけないかと。  
マッピングの指定などはありますでしょうか？  
少しわかりにくいのですが、Logstashがデフォルトの場合、"logstash-"で始まるインデックスについては、次の[ElasticsearchのMappingテンプレート](https://github.com/logstash-plugins/logstash-output-elasticsearch/blob/master/lib/logstash/outputs/elasticsearch/elasticsearch-template-es6x.json)を使用しています。  
ですので、リンク先のブログでは「geoip. latitude」などを使用しているために緯度経度が地図上にマッピングできる形に暗黙的になっています。

こちらのブログなどを読んでいただくとよりわかりやすいかと。

> **[GeoIP in the Elastic Stack - Elasticsearch, Logstash, Ingest API](https://www.elastic.co/blog/geoip-in-the-elastic-stack)**
>
> Discover what browsers access your site. See where your end users are logging in from. Put your IP addresses or hostnames to work with geoip filtering.

---

<div class="post-metadata">

**Author:** ![tsgkdt](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tsgkdt/32/39151_2.png) [@tsgkdt](https://discuss.elastic.co/u/tsgkdt)\
**Post date:** [November 12, 2018, 4:15pm UTC](https://discuss.elastic.co/t/kibana/155867/3 "2018-11-12T16:15:16Z")

</div>

大谷さんのリンクで示されているように、logstash起動時にこんなログが出ているかと思います。

 ![image](https://us1.discourse-cdn.com/elastic/original/3X/e/9/e9ef961b14cfe4f06685da2add5bdb25b2908359.png)

logstashによって生成されたマッピングが確認できます。  
geoipの下のlocationフィールドが緯度経度の情報を格納するフィールドになっている、ということなので、  
ここに緯度経度情報を入れてやれば良いです。

lat, lonをこのようにセットしてみてください。  
セットの仕方は複数ありますが、lat, lonを使う場合で試しました。  
（その方法は、大谷さんの書き込みの「geo-pointというフィールドタイプ」のリンクにあります）

提示いただいた設定ファイルで、緯度経度の部分に必要ないところを削って、少し変更しました。

```auto
filter {
  csv {
    columns => ["timestamp","latitude","longitude"]
    separator => "	"
    convert => {
      "timestamp" => "date"
    }
  }
  
  mutate { 
	convert => {"latitude" => "float"} 
	convert => {"longitude" => "float"} 
  }
  mutate { rename => {"latitude" => "[geoip][location][lat]"} }
  mutate { rename => {"longitude" => "[geoip][location][lon]"} } 
    
}

```

あとは、Visualizeの画面で geo.locationを選択すると、可視化されるはずです。

 ![image](https://us1.discourse-cdn.com/elastic/original/3X/6/1/61a357d6abbd3482b4c88790b6aefbcb78a12952.png)

---

<div class="post-metadata">

**Author:** ![TK1](https://avatars.discourse-cdn.com/v4/letter/t/96bed5/32.png) [@TK1](https://discuss.elastic.co/u/TK1)\
**Post date:** [November 14, 2018, 3:53am UTC](https://discuss.elastic.co/t/kibana/155867/4 "2018-11-14T03:53:49Z")

</div>

ありがとうございます．  
マッピングすることで緯度経度をマッピングすることが出来ました．  
返信ありがとうございました．

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [December 12, 2018, 3:53am UTC](https://discuss.elastic.co/t/kibana/155867/5 "2018-12-12T03:53:58Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
