elasticsearch通过组合使用自定模板和动态模板来映射logstash数据

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,让数据可以被模板映射

你可能感兴趣的:(elasticsearch)