2017-10-13 1 views
0

J'ai obtenu kibana pour indexer mes données geoip. Le problème est que mes données sont indexées dans Kibana comme:Kibana geoip mappage incorrect | impossible de changer l'index

geoip.city_name 
geoip.continent_code 
geoip.country_code2 
geoip.country_code3 
geoip.country_name 
geoip.dma_code 
geoip.ip 
geoip.latitude 
geoip.location.lat 
geoip.location.lon 
geoip.longitude 
geoip.postal_code 
geoip.region_code 
geoip.region_name 
geoip.timezone 

Pour faire une carte avec mes données, je dois les champs à geo_point. L'erreur que je vois tout en essayant de construire la carte est:

No Compatible Fields: The "csv" index pattern does not contain any of the following field types: geo_point 

J'ai trouvé quelques solutions où je dois changer mon index de « csv » à quelque chose avec logstash- *. Quand je change mon index, je reçois la erreur suivant:

[2017-10-13T11:01:03,653][WARN ][logstash.outputs.elasticsearch] Could not index event to Elasticsearch. {:status=>400, :action=>["index", {:_id=>nil, :_index=>"logstash-csv", :_type=>"csv", :_routing=>nil}, 2017-10-13T09:01:03.039Z DESKTOP-hh 00.00.00.00,S], :response=>{"index"=>{"_index"=>"logstash-csv", "_type"=>"csv", "_id"=>"AV8UjolNaCIdC3w", "status"=>400, "error"=>{"type"=>"illegal_argument_exception", "reason"=>"[geoip.location] is defined as an object in mapping [csv] but this name is already used for a field in other types"}}}} 

Je ne peux pas corriger l'erreur ci-dessus (si cela est encore la solution finale)

Versions:

Elec: 5.6.2 
Logstash: 5.6.2 

conf fichier:

input { 
    file { 
     path => "C:\Users\JOEY2\Desktop\Deelproblemen\Applicatie\Output\OutputIPInfo.csv" 
     start_position => "beginning" 
     sincedb_path => "/dev/null" 
    } 
} 

filter { 
    csv { 
     separator => "," 
     columns => [IP, city, country, region, org, Latitude, Longitude, SpamList, Headers] 
    } 
    mutate { 
     convert =>{ 
      "Latitude" => "float" 
      "Longitude" => "float" 
      } 
     rename => [ "Latitude", "[location][lat]", "Longitude", "[location][lon]" ] 
    } 
    geoip { source => "IP" } 
} 

output { 
    elasticsearch { 
     action => "index" 
     hosts => "http://localhost:9200" 
     index => "csv" 
     document_type => "csv" 
    } 
} 

cartographie:

C:\Users\JOEY2\Downloads\curl-7.56.0-win64-ming\curl-7.56.0-win64-mingw\bin>curl -s localhost:9200/logstash-*/_mapping/?pretty 
{ 
    "logstash-csv" : { 
    "mappings" : { 
     "my_type" : { 
     "dynamic" : "true", 
     "properties" : { 
      "geoip" : { 
      "dynamic" : "true", 
      "properties" : { 
       "location" : { 
       "type" : "geo_point" 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

J'ai fait une sorcière de modèle que j'ai vu dans une autre solution:

PUT _template/logstash 
{ 
    "template": "logstash-*", 
    "settings": { 
    "number_of_replicas": 1, 
    "number_of_shards": 2 
    }, 
    "mappings": { 
    "my_type": { 
     "dynamic": "true", 
     "properties": { 
     "geoip": { 
      "dynamic": true, 
      "properties": { 
      "location": { 
       "type": "geo_point" 
      }}  }  } } }} 

Il se sent comme im manque quelque chose facile, mais ne peux pas comprendre ce qu'il est. Merci!

Répondre

1

Vous devez être prudent lorsque vous utilisez la dernière étape que vous avez mentionné, comme vous pouvez remplacer le modèle par défaut, et vous avez besoin d'un ordre, qui indique ElasticSearch quand l'appliquer avant ou après le défaut .

J'ai rencontré ce problème et vous avez raison si l'index commence par autre chose que logstash- * il se plaindra du type de champ geo_point.

curl -XPUT 'localhost:9200/_template/csv' -H 'Content-Type: application/json' -d' 
{ 
    "template": "csv", #this is your index name pattern 
    "order": 2, #means apply after the default logstash template 
    "settings": { 
     #your settings go here 
    }, 

    #add your mapping here 
}' 

Sinon, la seule solution garantie est d'avoir votre nom d'index commence par logstash- *