最近在做集中式日志,将应用的日志保存到Elasticsearch中,结合kibana实现集中化日志监控和报警。在设计ES存储的时候。考虑到日志的特殊性,打算采用Daily Indices方式。名称为:log-${application}-YYYY.MM.DD。每天会自动创建一个新的索引,类似于log4j的DailyRollingFileAppender,一来减少活跃索引的大小,二来方便存档和删除。

但是这个不是ES内建的功能,需要应用自己实现,方法有很多种。结合ES提供的功能,最简单的方式是采用如下方式:

  • indices templates 为 log-* 的index应用同样的settings、mappings和alias
  • 启动 automatic index creation,而且支持黑白名单,这样就不需要每次先创建索引了

具体步骤如下:

A.配置 elasticsearch.yml,开启自动创建索引白名单,但是仍然关闭动态mapper:

  1. action.auto_create_index: +log*,-*
  2. index.mapper.dynamic: false

B.为log-*的索引添加如下index-templates:

  1. PUT /_template/log_template
  2. {
  3. "template" : "log-*",
  4. "mappings" : {
  5. "loggingMessage": {
  6. "properties": {
  7. "postDate": {
  8. "type": "date",
  9. "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd"
  10. },
  11. "createTime": {
  12. "type": "date",
  13. "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd"
  14. },
  15. "timestamp": {
  16. "type": "long"
  17. },
  18. "env": {
  19. "type": "string",
  20. "index": "not_analyzed"
  21. },
  22. "type": {
  23. "type": "string",
  24. "index": "not_analyzed"
  25. },
  26. "host": {
  27. "type": "string",
  28. "index": "not_analyzed"
  29. },
  30. "application": {
  31. "type": "string",
  32. "index": "not_analyzed"
  33. },
  34. "threadName": {
  35. "type": "string"
  36. },
  37. "locationInfo": {
  38. "type": "string"
  39. },
  40. "level": {
  41. "type": "string",
  42. "index": "not_analyzed"
  43. },
  44. "message": {
  45. "type": "string"
  46. },
  47. "stackTrace": {
  48. "type": "string"
  49. }
  50. }
  51. }
  52. }
  53. }

注:关闭auto_create_index和dindex.mapper.dynamic对Kibana的影响。根据ES的推荐,建议将auto_create_index和dindex.mapper.dynamic都关闭

  1. action.auto_create_index: +log*,-*
  2. index.mapper.dynamic: false

但是Kibana的Dashboard Schema也是存储在ES索引中,而且是动态创建的。这就会导致Kibana的Dashboard无法保存。简单而粗暴的解决方案就是手动创建kibana的索引和mapping:

  1. PUT /kibana-int/dashboard/_mapping
  2. {
  3. "dashboard": {
  4. "properties": {
  5. "title": {
  6. "type": "string"
  7. },
  8. "user": {
  9. "type": "string"
  10. },
  11. "dashboard": {
  12. "type": "string"
  13. },
  14. "group": {
  15. "type": "string"
  16. }
  17. }
  18. }
  19. }

参见:http://blog.arganzheng.me/posts/daily-indices-with-elasticsearch.html

elasticsearch实现按天翻滚索引的更多相关文章

  1. Elasticsearch-基础介绍及索引原理分析(转载)

    最近在参与一个基于Elasticsearch作为底层数据框架提供大数据量(亿级)的实时统计查询的方案设计工作,花了些时间学习Elasticsearch的基础理论知识,整理了一下,希望能对Elastic ...

  2. Elasticsearch-基础介绍及索引原理分析

    介绍 Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 L ...

  3. elasticsearch简介和倒排序索引介绍

    介绍 我们为什么要用搜索引擎?我们的所有数据在数据库里面都有,而且 Oracle.SQL Server 等数据库里也能提供查询检索或者聚类分析功能,直接通过数据库查询不就可以了吗?确实,我们大部分的查 ...

  4. 高效管理 Elasticsearch 中基于时间的索引——本质是在利用滚动模式做数据的冷热分离,热索引可以用ssd

    高效管理 Elasticsearch 中基于时间的索引 转自:http://stormluke.me/es-managing-time-based-indices-efficiently/ 用 Ela ...

  5. Docker安装ElasticSearch 以及使用LogStash实现索引库和数据库同步

    1:下载 ElasticSearch 镜像 docker pull docker.io/elasticsearch:5.6.8 2:创建 ElasticSearch 容器: 注意:5.0默认分配jvm ...

  6. ElasticSearch(六):索引模板

    ElasticSearch(六):索引模板 学习课程链接<Elasticsearch核心技术与实战> Index Template Index Template - 帮助你设定Mappin ...

  7. elasticsearch自动按天创建索引脚本

    elasticsearch保存在一个索引中数据量太大无法查询,现在需要将索引按照天来建,查询的时候关联查询即可 有时候es集群创建了很多索引,删不掉,如果是测试环境或者初始化es集群(清空所有数据), ...

  8. ElasticSearch权威指南学习(索引管理)

    创建索引 当我们需要确保索引被创建在适当数量的分片上,在索引数据之前设置好分析器和类型映射. 手动创建索引,在请求中加入所有设置和类型映射,如下所示: PUT /my_index { "se ...

  9. elasticsearch 导入基础数据并索引之 geo_point

    elasticsearch 中的地理信息存储, 有geo_point形式和geo_shape两种形式 此篇只叙述geo_point, 地理位置需要声明为特殊的类型, 不显示在mapping中定义的话, ...

随机推荐

  1. js 前加分号和感叹号的含义

    ;!function(){}();  ;!有什么用? 从语法上来开.Javascript中分号表示语句结束,在开头加上.可能是为了压缩的时候和别的方法切割一下,表示一个新的语句開始.所以,假设在一个单 ...

  2. OSError: Could not find library geos_c or load any of its variants ['libgeos_c.so.1', 'libgeos_c.so

    OSError: Could not find library geos_c or load any of its variants ['libgeos_c.so.1', 'libgeos_c.so ...

  3. Hibernate的配置中,c3p0连接池相关配置

    一.配置c3p0 1.导入 hibernate-c3po连接池包,Maven地址是:http://mvnrepository.com/artifact/org.hibernate/hibernate- ...

  4. MySQL 主从错误

    1: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log fil ...

  5. 修改Ubuntu默认运行级别,启动字符界面

    Ubuntu的默认开机的runlevel是2,可以用runlevel来查看当前的默认运行级别. debian系(ubuntu是基于debian)的Linux一直是用runlevel 2来默认启动,并且 ...

  6. kettle 如何将excel文件导入oracle数据库?

      1.情景展示 昨日,有一批数据需要导入数据库,但是,plsql不知为何不能导了,于是,我选择使用kettle完成excel数据的导入. 2.准备工作 将对应的数据库所需的jar包拷贝至其lib目录 ...

  7. 【麦子学院】Linux cmd命令大全

    pwd :print working directory. 打印工作文件夹即当前文件夹. cd :change directory.切换文件夹. /是linux的根文件夹.eg. cd/home ls ...

  8. Selenium高亮页面对象

    使用QTP习惯了,在QTP中可以通过访问对象的highlight方法直接高亮对象,确实很方便,那么如何让Selenium高亮页面的测试对象了,可以通过javascript修改页面对象的属性进而高亮对象 ...

  9. OpenHaptics编程环境搭建

    SensAble Technologies公司是3D可触摸(力反馈)解决方案和技术领域中的领先开发商,其解决方案和技术不仅使用户能够看到并听到屏幕计算机应用,还可以对该应用进行实际“感应”.该公司的P ...

  10. 使用VTK与Python实现机械臂三维模型可视化

    三维可视化系统的建立依赖于三维图形平台, 如 OpenGL.VTK.OGRE.OSG等, 传统的方法多采用OpenGL进行底层编程,即对其特有的函数进行定量操作, 需要开发人员熟悉相关函数, 从而造成 ...