2014-02-23 39 views
1

我正在使用Logstash将来自Tomcat访问日志的日志输出到elasticsearch。 我使用的模式如下:Elasticsearch不理解Logstash类型

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的信息,并通过镀铬感插件做一个REST查询,如下所示:

GET /_all/_mapping?pretty=1 

它识别领域,但与String类型如下:

"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" 
        } 
       } 
      }, 

THX提前

回答

2

你好我几乎可以肯定日志藏匿发送的一切作为一个字符串。所以如果字段的值是以字符串的形式提供的(意思是用“。”括起来,那么elasticsearch会将它作为一个字符串)默认情况下,logstash创建一个模板映射,它为所有字符串类型创建原始字段。所以如果你想成为一个数字,创建你自己的定制映射与订单2,并添加为特定的字段持续时间配置是一个数字类型:“长”

默认的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/

+0

Thx。您提供的方向非常有帮助,并将我带入解决方案。 –

+0

@ isaac.hazan所以我有同样的问题,你的评论导致我认为这不是直接的答案? – stedotmartin

+0

是的,为了使这项工作,我必须在elasticsearch中定义索引的类型如下:“evtTime”:{“type”:“date”,“format”:“dd/MMM/yyyy:HH:mm:ss” }, –

相关问题