Назад | Перейти на главную страницу

Индекс Elasticsearch, созданный с помощью целого числа сопоставления типов полей, распознаваемого как «строка» в Kibana 4

Я создал индекс в 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.