logstash传输给es的数据会自动映射为5索引,5备份,字段都为text的的索引。这样基本上无法进行数据分析。
所以必须将logstash的数据按照既定的格式存储在es中,这时候就要使用到es模板技术了。在es中可以定义了自定义模板和动态模板,之后es会自动将相关索引映射为模板规定的格式。
模板格式如下:
{
"template": "tomcat*",
"settings": {
"index.refresh_interval" : "5s",
"number_of_replicas":"0",
"number_of_shards":"3"
},
"mappings": {
"_default_": {
"_all": {
"enabled": false
},
"dynamic_templates": [
{
"strings": {
"match_mapping_type": "string",
"unmatch": "data",
"mapping": { "type": "keyword" } }
},
{
"dates": {
"match": "time",
"unmatch": "data",
"mapping": { "type": "date" } }
}
]
}
}
}
其中”template”: “tomcat*”,是设置匹配的索引名称 ,通过在logstash定义字段的output中index字段来配置,譬如 index => “%{[fields][logIndex]}-%{+YYYY.MM.dd}”
通过settings可以设置创建索引时的一些参数,我设置了备份为0,分片为3,刷新间隔5秒
"settings": {
"index.refresh_interval" : "5s",
"number_of_replicas":"0",
"number_of_shards":"3"
dynamic_templates就是配置具体的动态模板匹配项
“match_mapping_type”: “string” 是匹配固定的类型
“match”: “time” 匹配字段名为time的数据
“unmatch”: “data” 不匹配字段名为data的数据
mapping 就是将匹配的数据项映射为定义的数据类型
最后还要在logstash的output插件里设置manage_template => true,让数据可以被模板映射