Elasticsearch 索引模板

Stella981
• 阅读 645

概述

记录自己在工作中将生产的数据按月保存在ES中(通过logstash采集kafka数据到ES),由于生产环境数据量比较庞大(一天的日志量大概在2500万条左右),为了后期减轻服务器压力,方便我们维护,所以需要对我们的日志进行处理,按月建立不同的ES索引库,能够查询最近6个月的日志,关闭前6个月不用的日志。

创建模板

如果用户每次新建一个索引的时候都需要手动创建mapping非常麻烦,es内部维护了template,template定义好了mapping,只要index的名称被template匹配到,那么该index的mapping就按照template中定义的mapping自动创建。而且template中定义了index的shard分片数量、replica副本数量等等属性。  

模板样例

{
  "order": 0,                               // 模板优先级
  "template": "sample_info*",               // 模板匹配的名称方式
  "settings": {...},                        // 索引设置
  "mappings": {...},                        // 索引中各字段的映射定义
  "aliases": {...}                          // 索引的别名
}

settings定义了索引的属性,包括分片数量、副本数量、写入flush时间间隔。

"settings": {
    "index": {
      "refresh_interval": "10s",//每10秒刷新
      "number_of_shards" : "5",//主分片数量
      "number_of_replicas" : "2",//副本数量
      "translog": {
        "flush_threshold_size": "1gb",//内容容量到达1gb异步刷新
        "sync_interval": "30s",//间隔30s异步刷新(设置后无法更改)
        "durability": "async"//异步刷新
      }
    }
  }

编写template,写入es

通过命令 put  _template/[template名]{……}命令写入es

通过命令 get  _template/[template名]查看是否写入template成功。如果template编写错误重新执行put命令覆盖即可

Elasticsearch 索引模板

附 自己的template

PUT /_template/template_access_log
{ 
  "template": "poc*",
  "settings": {
    "index": {
      "refresh_interval": "10s",
      "number_of_shards" : "5",
      "number_of_replicas" : "1",
      "translog": {
        "flush_threshold_size": "1gb",
        "sync_interval": "30s",
        "durability": "async"
      }
    }
  },                               
     "mappings": {              
         "doc": {           
            "dynamic_templates": [                          
                  {                                               
                     "string_as_keyword": {                   
                            "match_mapping_type": "string", 
                            "mapping": {                      
                              "type": "keyword"             
                            }                                   
                        }                                       
                    }                                           
                ],                                              
             "properties": {     
                 "TRANSAMOUNT": {       
                     "type": "double"   
                 },
                 "consumeTime": {       
                     "type": "integer"   
                 },
                 "transTime": {       
                     "type": "date",   
                     "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" 
                 }
             }  
         }      
     },
     "aliases" : {
      "poc" : {}
  }
 }

logstash6.5.4配置文件修改

input {
    kafka{
       group_id=> "logstash_bkq_test001"
       topics=> "test_bkq" 
       bootstrap_servers=> "192.168.8.21:9092" 
       key_deserializer_class=> "org.apache.kafka.common.serialization.IntegerDeserializer"
       value_deserializer_class=> "org.apache.kafka.common.serialization.StringDeserializer"
       auto_offset_reset=> "latest"
       client_id=> "logstash_bkq_test001"
    }
}
 
filter {
        json {
                source => "message"
                remove_field => ["message"]
        }
}
 
output {
  elasticsearch {
       hosts => ["192.168.8.23:9200","192.168.8.24:9200","192.168.8.25:9200"]
       index => "poc%{+yyyyMMdd}"
       user => "elastic"
       password => "******"
  }
}

logstash往ES灌数据的时候按照index => "poc%{+yyyyMMdd}" 灌数据。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Stella981 Stella981
2年前
ELK学习笔记之ElasticSearch的索引详解
0x00ElasticSearch的索引和MySQL的索引方式对比Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。特别是它对多条件的过滤支持非常好,比如年龄在18和30之间,性别为女性这样的组合查询。倒排索引很多地方都有介绍,但是其比关系型
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这