Elasticsearch不了解Logstash类型

时间:2014-02-23 17:16:35

标签: elasticsearch logstash

我正在使用Logstash将Tomcat访问日志中的日志输出到elasticsearch。 我使用的模式如下:

grok {
    type => "access_log"
    pattern  => "\[%{DATA:my_timestamp}\] %{IP:client} %{WORD:method} %{URIPATHPARAM:request} \[%{DATA:auth_data}\] \[%{DATA:another_timstamp}\] %{NUMBER:result_code} %{NUMBER:duration} %{NUMBER:bytes}"
  }

如上所示,我们将字段持续时间格式化为NUMBER。

在elasticsearch中记录信息并通过Chrome sense插件执行REST查询时,如下所示:

GET /_all/_mapping?pretty=1

它标识字段,但字符串类型如下:

 "duration": {
               "type": "multi_field",
               "fields": {
                  "duration": {
                     "type": "***string***",
                     "omit_norms": true
                  },
                  "raw": {
                     "type": "string",
                     "index": "not_analyzed",
                     "omit_norms": true,
                     "index_options": "docs",
                     "include_in_all": false,
                     "ignore_above": 256
                  }
               }
            }

我希望它能把它理解为一个数字。这是预期的吗?

例如,geoip等其他字段被理解为与字符串不同的类型。

 "geoip": {
               "dynamic": "true",
               "properties": {
                  "location": {
                     "type": "geo_point"
                  }
               }
            },

提前谢谢

1 个答案:

答案 0 :(得分:2)

嗨,我几乎可以肯定,日志存储会将所有内容作为字符串发送。因此,如果字段的值以字符串形式提供(意思是用“。”包围,则弹性搜索将使其成为字符串。默认情况下,logstash创建一个模板映射,为所有字符串类型生成原始字段。但它没有说什么因此,如果您想成为一个数字,请使用订单2创建您自己的自定义映射,并将特定字段持续时间配置添加为数字类型:“long”。

可以在此处找到默认的logstash映射: https://github.com/elasticsearch/logstash/blob/master/lib/logstash/outputs/elasticsearch/elasticsearch-template.json

创建自定义映射并不难,您可以在此处找到示例: http://blog.trifork.com/2014/01/28/using-logstash-elasticsearch-and-kibana-to-monitor-your-video-card-a-tutorial/