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


(Tk) #1

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

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

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


(Jun Ohtani) #2

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

Elasticsearchに緯度経度情報を登録する場合は、geo-pointというフィールドタイプをマッピングで指定しないといけないかと。
マッピングの指定などはありますでしょうか?
少しわかりにくいのですが、Logstashがデフォルトの場合、"logstash-"で始まるインデックスについては、次のElasticsearchのMappingテンプレートを使用しています。
ですので、リンク先のブログでは「geoip. latitude」などを使用しているために緯度経度が地図上にマッピングできる形に暗黙的になっています。

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


(tsgkdt) #3

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

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

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

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

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を選択すると、可視化されるはずです。


(Tk) #4

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


(system) #5

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