2016-04-05 22 views
0

緯度と経度を組み合わせて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はドッカーコンテナ上ElasticsearchLogstashと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を起動したときの様子です。

私の質問は次のとおりです。問題を解決するにはどのような手順が必要ですか?

ありがとうございます!

答えて

0

テンプレートの「場所」フィールドは実際には「[geoip] [location]」ですが、あなたのデータは「[hex] [location]」です。そのため、テンプレートの魔法があなたのフィールドに適用されていません。データを[geoip] [location]に移動するか、テンプレートを変更してください。

また、正規表現で最初に正規表現を実行してからgrokパターンで再度実行するのではなく、1つの正規表現でメッセージを解析する方が効率的です。

+0

これを修正するためにどのような手順を講じなければならないのかを教えてください。 – tedsluis

+0

答えがより明示的に更新されました。 –

関連する問題