1.概述

转载:Day 12 - Elasticsearch日志场景最佳实践

相似文章:【Elasticsearch】Elasticsearch 最佳实践系列之分片恢复并发故障

Elasticsearch可广泛应用于日志分析、全文检索、结构化数据分析等多种场景,大幅度降低维护多套专用系统的成本,在开源社区非常受欢迎。然而Elasticsearch为满足多种不同的使用场景,底层组合使用了多种数据结构,部分数据结构对具体的用户使用场景可能是冗余的,从而导致默认情况下无法达到性能和成本最优化。 幸运的是,Elasticsearch提供非常灵活的模板配置能力,用户可以按需进行优化。多数情况下,用户结合使用场景进行优化后,Elasticsearch的性能都会有数倍的提升,成本也对应有倍数级别的下降。本文主要介绍不同日志使用场景下的调优经验。

2. 日志处理基本流程

日志处理的基本流程包含:日志采集 -> 数据清洗 -> 存储 -> 可视化分析。Elastic Stack提供完整的日志解决方案,帮助用户完成对日志处理全链路的管理,推荐大家使用。每个流程的处理如下:

  • 日志采集:从业务所在的机器上,较实时的采集日志传递给下游。常用开源组件如Beats、Logstash、Fluentd等。
  • 数据清洗:利用正则解析等机制,完成日志从文本数据到结构化数据的转换。用户可使用Logstash 或 Elasticsearch Ingest模块等完成数据清洗。
  • 存储:使用Elasticsearch对数据进行持久存储,并提供全文搜索和分析能力。
  • 可视化分析:通过图形界面,完成对日志的搜索分析,常用的开源组件如Kibana、Grafana。

使用Elastic Stack处理日志的详细过程,用户可参考官方文章Getting started with the Elastic Stack,这里不展开介绍。

3. 日志场景调优

对于Elasticsearch的通用调优,之前分享的文章Elasticsearch调优实践,详细介绍了Elasticsearch在性能、稳定性方面的调优经验。而对于日志场景,不同的场景使用方式差别较大,这里主要介绍常见使用方式下,性能和成本的优化思路。

3.1 基础场景

对于多数简单日志使用场景,用户一般只要求存储原始日志,并提供按关键字搜索日志记录的能力。对于此类场景,用户可跳过数据清洗阶段,并参考如下方式进行优化:

  • 建议打开最优压缩,一般可降低40%存储。
  • 设置原始日志字段(message)为text,去除keyword类型子字段,提供全文搜索能力,降低存储。
  • 关闭_all索引,前面已通过message提供全文搜索能力。
  • 对于其他字符串字段,统一设置为keyword类型,避免默认情况下字符串字段同时存储text、keyword两种类型的数据。
  • 使用开源组件(如Beats)上报数据时会包含较多辅助信息,用户可通过修改组件配置文件进行裁剪。

这样去除message的keyword子字段、_all等冗余信息后,再加上最优压缩,可以保证数据相对精简。下面给出这类场景的常用模板,供用户参考:

{"order": 5,"template": "my_log_*","settings": {"translog.durability": "async","translog.sync_interval": "5s","index.refresh_interval": "30s","index.codec": "best_compression"    # 最优压缩},"mappings": {"_default_": {"_all": {                        # 关闭_all索引"enabled": false},"dynamic_templates": [{"log": {                 # 原始日志字段,分词建立索引"match": "message","mapping": {"type": "text"}}},{"strings": {             # 其他字符串字段,统一设置为keyword类型"match_mapping_type": "string","mapping": {"type": "keyword"}}}]}}
}

3.2 精准搜索场景

对于部分用户,普通的全文检索并不能满足需求,希望精准搜索日志中的某部分,例如每条日志中包含程序运行时多个阶段的耗时数据,对具体一个阶段的耗时进行搜索就比较麻烦。对于此类场景,用户可基于基础场景,进行如下调整:

  • 清洗过程中,可仅解析出需要精准搜索的部分作为独立字段,用于精准搜索。
  • 对于精准搜索字段,如果无排序/聚合需求,可以关闭doc_values;对于字符串,一般使用keyword,可按需考虑使用text。

下面给出这类场景的常用模板,供用户参考:

{"order": 5,"template": "my_log_*","settings": {"translog.durability": "async","translog.sync_interval": "5s","index.refresh_interval": "30s","index.codec": "best_compression"    # 最优压缩},"mappings": {"_default_": {"_all": {                        # 关闭_all索引"enabled": false},"dynamic_templates": [{"log": {                 # 原始日志字段,分词建立索引"match": "message","mapping": {"type": "text"}}},{"precise_fieldx": {       # 精准搜索字段"match": "fieldx","mapping": {"type": "keyword","doc_values": false}}},{"strings": {             # 其他字符串字段,统一设置为keyword类型"match_mapping_type": "string","mapping": {"type": "keyword"}}}]}}
}

3.3 统计分析场景

对于某些场景,日志包含的主要是程序运行时输出的统计信息,用户通常会完全解析日志进行精确查询、统计分析,而是否保存原始日志关系不大。对于此类场景,用户可进行如下调整:

  • 清洗过程中,解析出所有需要的数据作为独立字段;原始日志非必要时,建议去除。
  • 如果有强需求保留原始日志,可以设置该字段enabled属性为false,只存储不索引。
  • 多数字段保持默认即可,会自动建立索引、打开doc_values,可用于查询、排序、聚合。
  • 对部分无排序/聚合需求、开销高的字段,可以关闭doc_values。

下面给出这类场景的常用模板,供用户参考:

{"order": 5,"template": "my_log_*","settings": {"translog.durability": "async","translog.sync_interval": "5s","index.refresh_interval": "30s","index.codec": "best_compression"    # 最优压缩},"mappings": {"_default_": {"_all": {                        # 关闭_all索引"enabled": false},"dynamic_templates": [{"log": {                 # 原始日志字段,关闭索引"match": "message","mapping": {"enabled": false}}},{"index_only_fieldx": {   # 仅索引的字段,无排序/聚合需求"match": "fieldx","mapping": {"type": "keyword","doc_values": false}}},{"strings": {             # 其他字符串字段,统一设置为keyword类型"match_mapping_type": "string","mapping": {"type": "keyword"}}}]}}
}

ES 5.1及之后的版本,支持关键字查询时自动选择目标字段,用户没有必要再使用原始日志字段提供不指定字段进行查询的能力。

【Elasticsearch】Elasticsearch日志场景最佳实践相关推荐

  1. Java日志管理最佳实践

    原文出处:http://www.ibm.com/developerworks/cn/java/j-lo-practicelog/. 感谢原作者,感谢ibm网站,里面有好多的精华帖. 日志记录是应用程序 ...

  2. Java日志记录最佳实践

    作者:GeekerLou www.jianshu.com/p/546e9aace657 一.日志简介 1.1 日志是什么(WHAT) 日志:记录程序的运行轨迹,方便查找关键信息,也方便快速定位解决问题 ...

  3. 日志管理最佳实践:成功的六要诀【解读版】

    合适的日志管理工具能够大幅减轻管理企业系统日志数据的负担.但是,除非组织为这个工具投入必要的时间和精力,否则再好的工具也会很快变成一个差劲的工具.Diana Kelley为大家提供了6个确保成功的日志 ...

  4. Elasticsearch:sniffing 的最佳实践:What, when, why, how

    Elasticsearch 为当今使用的众多工具和应用程序提供强大的搜索体验,从运营分析仪表板到显示带有露台的最近餐馆的地图,你都可以出门在外. 在所有这些实现中,应用程序和集群之间的连接都是通过 E ...

  5. 直击痛点,详解 K8s 日志采集最佳实践

    作者 | 元乙 阿里云存储服务技术专家 导读:上一篇文章主要介绍 Kubernetes 日志输出的一些注意事项,日志输出最终的目的还是做统一的采集和分析.在 Kubernetes 中,日志采集和普通虚 ...

  6. [分享]ElasticSearch架构解析与最佳实践

    「推荐阅读文章:」 elastic.guide. 分片内部原理 Quintessence Anx. Elasticsearch Performance Tuning 进击的辣条. Elasticsea ...

  7. Docker日志收集最佳实践

    传统日志处理 说到日志,我们以前处理日志的方式如下: · 日志写到本机磁盘上 · 通常仅用于排查线上问题,很少用于数据分析 ·需要时登录到机器上,用grep.awk等工具分析 那么,这种方式有什么缺点 ...

  8. 采集虚拟机_系列文章:Kubernetes日志采集最佳实践

    前言 上一期主要介绍Kubernetes日志输出的一些注意事项,日志输出最终的目的还是做统一的采集和分析.在Kubernetes中,日志采集和普通虚拟机的方式有很大不同,相对实现难度和部署代价也略大, ...

  9. 系列文章:Kubernetes日志采集最佳实践

    前言 上一期主要介绍Kubernetes日志输出的一些注意事项,日志输出最终的目的还是做统一的采集和分析.在Kubernetes中,日志采集和普通虚拟机的方式有很大不同,相对实现难度和部署代价也略大, ...

最新文章

  1. Database之SQL:自定义创建数据库的各种表demo集合(以方便理解和分析sql的各种增删改查语法的具体用法)
  2. pat天梯赛练习 L2-006
  3. 华为服务器芯片总在pc,服务器芯片 华为
  4. 以太坊智能合约Hello World示例程序
  5. java web 集成dom4j_[JavaWeb基础] 031.dom4j写入xml的方法
  6. 堆排序工具类(适用于top k问题,java泛型实现)
  7. AI领域的Python核心编程【学生免费】
  8. 外媒:iPhone13系列将推出两种新配色:日落金和玫瑰金
  9. GIS生涯个人总结及个人感悟
  10. Partition List -- LeetCode
  11. Citrix MCS桌面管理技术解读
  12. 2-15 复合类型概述
  13. maya 2009 自带 图标
  14. 铃声文本串转二进制串的问题(midi)
  15. 根据excel列动态创建mysql表,excel动态生成表格数据/EXCEL根据表2数据自动生成表1内容?...
  16. Java实现自动发送电子邮件 发送邮件验证码(附全部源码)
  17. 基于SpringBoot+EasyExcel+vue3实现excel表格的导入和导出
  18. 真正的帅哥没人说帅_男生长得帅的标准五官 教你判断谁才是真正的帅哥
  19. 【工具】更新资源分享渠道,电脑游戏安装合集,百款大型单机游戏,百度网盘临时会员领取方法...
  20. C++替代关键词(and,or,not)

热门文章

  1. iPhone 13需求强劲推动 分析师预计iPhone四季度将销售超过8000万部
  2. 腾讯与字节跳动罕见“合作”:企业微信在抖音投放广告
  3. 张文宏直播再曝金句:我宁可戴口罩开空调
  4. 拼多多派发“五五购物节”消费券 万张消费券30分钟被抢购一空
  5. 卢伟冰:Redmi K30 Pro的主板可能是业内最复杂“三明治”主板设计
  6. 索尼发布Xperia 8手机:采用骁龙630处理器
  7. 库克微微一笑:苹果市值再次突破万亿美元大关
  8. 官方暗示小米MIX Alpha重磅信息:屏下摄像头要成真?
  9. 三星Galaxy Note10+最后的爆料:配备更大的S-Pen手写笔
  10. 蔚来回应庄莉离职:不会因少数人员的正常流动受到影响