緯度と経度を組み合わせてLogstashでgeo_pointを作成することはできません。私は他の人の指示に従いましたが、それらの例はELKの古いバージョンに基づいているようです。 ELK 2.2以来、geo_pointに関する大きな変更があり、私が正しい方法ですべてのステップを実行したかどうかはわかりません。ここで私のセットアップを説明します。作成方法緯度と経度からLogstash geo_pointを取得
私が使用ELKのバージョンは次のとおりです。
curl -XGET 'localhost:9200'
{
"name" : "Artie",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "2.2.1",
"build_hash" : "d045fc29d1932bce18b2e65ab8b297fbf6cd41a1",
"build_timestamp" : "2016-03-09T09:38:54Z",
"build_snapshot" : false,
"lucene_version" : "5.4.1"
},
"tagline" : "You Know, for Search"
}
Aはドッカーコンテナ上Elasticsearch、LogstashとKibanaを使用していますが、それは問題ではないはず。
これは以下のように私のlogstash.confがどのように見えるかです:
cat logstash.conf
input {
http_poller {
urls => {
myresource => "myhost/data.json"
}
request_timeout => 1
interval => 1
# Parse every line captured from data.json as a new event.
codec => "line"
}
}
filter {
if [message] !~ /\"hex\":/ {
# drop messages without "hex"
drop {}
}
# Capture "hex":72d5a1
grok {
match => { "message" => "\"hex\":\"(?<hex>[^\"]+)\"," }
}
mutate {
convert => { "hex" => "string" }
}
# Capture "lat":50.047613
if [message] =~ /\"lat\":/ {
grok {
match => { "message" => "\"lat\":(?<latitude>[^,]+),"}
}
mutate {
convert => { "latitude" => "float" }
}
}
# Capture "lon":1.702955
if [message] =~ /\"lon\":/ {
grok {
match => { "message" => "\"lon\":(?<longitude>[^,]+)," }
}
mutate {
convert => { "longitude" => "float" }
}
}
# convert latitude and longitude into location.
mutate {
rename => {
"longitude" => "[location][lon]"
"latitude" => "[location][lat]"
}
}
mutate {
remove_field => [ "message" ]
}
}
output {
elasticsearch {
hosts => [ "elasticsearchhost:9200" ]
index => "logstash-%{+YYYY.MM.dd}"
}
}
重要な部分は、「経度」&「LAT」は「メッセージ」から撮影されたということであり、彼らは「場所」フィールドとしてフォーマットされています。
私はelasticsearchを照会するとき、私は、レコードのこの種類を取得:
{
"_index": "logstash-2016.04.04",
"_type": "logs",
"_id": "AVPieJtgVkabtr-H2szZ",
"_score": null,
"_source": {
"@version": "1",
"@timestamp": "2016-04-04T18:11:07.857Z",
"hex": "3e37aa",
"location": {
"lon": 4.8246,
"lat": 52.329208
}
},
"fields": {
"@timestamp": [
1459793467857
]
},
"sort": [
1459793467857
]
}
表記"location": { "lon": 4.8246, "lat": 52.329208 }
私はドキュメントで読んだから、よさそうです。しかし、事は、私が木場のgeo_pointとしてフィールド "location"を選択することができないということです。
ELKのドキュメントによると、「場所」フィールドがgeo_pointタイプにマップされていることを確認する必要があります。機能するためには、doc_valuesが有効になっている必要があります。私は私が私のテンプレートで見たとき、それは「場所」フィールドはデフォルトですでにマッピングされているように見えるので、私は、何かを行う必要があるかどうかを確認していない:"location" : { "type" : "geo_point", "doc_values" : true }
これは私のテンプレートがどのように見えるかであるように:
# curl -XGET localhost:9200/_template/logstash?pretty
{
"logstash" : {
"order" : 0,
"template" : "logstash-*",
"settings" : {
"index" : {
"refresh_interval" : "5s"
}
},
"mappings" : {
"_default_" : {
"dynamic_templates" : [ {
"message_field" : {
"mapping" : {
"fielddata" : {
"format" : "disabled"
},
"index" : "analyzed",
"omit_norms" : true,
"type" : "string"
},
"match_mapping_type" : "string",
"match" : "message"
}
}, {
"string_fields" : {
"mapping" : {
"fielddata" : {
"format" : "disabled"
},
"index" : "analyzed",
"omit_norms" : true,
"type" : "string",
"fields" : {
"raw" : {
"ignore_above" : 256,
"index" : "not_analyzed",
"type" : "string",
"doc_values" : true
}
}
},
"match_mapping_type" : "string",
"match" : "*"
}
}, {
"float_fields" : {
"mapping" : {
"type" : "float",
"doc_values" : true
},
"match_mapping_type" : "float",
"match" : "*"
}
}, {
"double_fields" : {
"mapping" : {
"type" : "double",
"doc_values" : true
},
"match_mapping_type" : "double",
"match" : "*"
}
}, {
"byte_fields" : {
"mapping" : {
"type" : "byte",
"doc_values" : true
},
"match_mapping_type" : "byte",
"match" : "*"
}
}, {
"short_fields" : {
"mapping" : {
"type" : "short",
"doc_values" : true
},
"match_mapping_type" : "short",
"match" : "*"
}
}, {
"integer_fields" : {
"mapping" : {
"type" : "integer",
"doc_values" : true
},
"match_mapping_type" : "integer",
"match" : "*"
}
}, {
"long_fields" : {
"mapping" : {
"type" : "long",
"doc_values" : true
},
"match_mapping_type" : "long",
"match" : "*"
}
}, {
"date_fields" : {
"mapping" : {
"type" : "date",
"doc_values" : true
},
"match_mapping_type" : "date",
"match" : "*"
}
}, {
"geo_point_fields" : {
"mapping" : {
"type" : "geo_point",
"doc_values" : true
},
"match_mapping_type" : "geo_point",
"match" : "*"
}
} ],
"_all" : {
"omit_norms" : true,
"enabled" : true
},
"properties" : {
"@timestamp" : {
"type" : "date",
"doc_values" : true
},
"geoip" : {
"dynamic" : true,
"type" : "object",
"properties" : {
"ip" : {
"type" : "ip",
"doc_values" : true
},
"latitude" : {
"type" : "float",
"doc_values" : true
},
"location" : {
"type" : "geo_point",
"doc_values" : true
},
"longitude" : {
"type" : "float",
"doc_values" : true
}
}
},
"@version" : {
"index" : "not_analyzed",
"type" : "string",
"doc_values" : true
}
}
}
},
"aliases" : { }
}
}
私はこのテンプレートに何かを追加しませんでした。これは、LogstashとElasticを新規にインストールした後、logstash.confファイルでLogstashを起動したときの様子です。
私の質問は次のとおりです。問題を解決するにはどのような手順が必要ですか?
ありがとうございます!
これを修正するためにどのような手順を講じなければならないのかを教えてください。 – tedsluis
答えがより明示的に更新されました。 –