我正在使用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"
}
}
},
提前谢谢
答案 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/