Я создал индекс в elasticsearch 1.7 следующим образом:
curl -XPUT 'http://localhost:9200/test' -d '
{
"test" : {
"properties" : {
"user" : {"type" : "string", "index" : "not_analyzed"},
"message" : {"type" : "string", "null_value" : "na"},
"syslogtimestamp" : {"type" : "date"},
"transact" : {"type" : "integer"},
"subscriber" : {"type" : "integer"},
"pid" : {"type" : "integer"},
"acquirertime" : {"type" : "float"}
}
}
}
'
Я заполняю его данными из logstash следующим образом:
filter {
if [type] == "test" {
grok {
match => { "message" => "%{TEST}" }
}
geoip {
source => "clientip"
target => "geoip"
database => "/etc/logstash/GeoLiteCity.dat"
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
mutate {
convert => [ "[geoip][coordinates]", "float"]
}
}
}
Pattern:
TEST %{MONTH:month} (?:(\s+|)) %{INT:day} %{TIME:time} (?<hostname>[a-z0-9_-]+) (?<application>[a-zA-Z0-9-_]+\.(cgi|pml|pfml)):(?:\s+)\[(?:(\s+|))%{INT:pid}\] %{IPORHOST:clientip} (?:\s+\()(?<acquirer>[a-zA-Z0-9_-]+)(?:(\s|))\) (?<event>[a-zA-Z0-9]+)(?:\s+)id=%{INT:transact}(?:\s+)sub=%{INT:subscriber}
Итак, я пытаюсь отобразить поле «транзакция» в elasticsearch как целое число. Однако, когда я просматриваю поля в Kibana 4, все мои поля являются «строковыми» типами. Как это может быть?
Вы должны изучить шаблоны индекса ES здесь: https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html
Вы можете либо передать их в logstash, либо передать их напрямую в elasticsearch через curl или config.