Elasticsearch的新功能:2020年回顾

2021-01-01 08:55:37

既然2020年(最终!)结束了,我们重点介绍一下Elasticsearch在这一年中收到的更改和增加,我们相信这可能对您-与Elasticsearch合作的开发人员产生很大的影响。

2020年真是太好了!社会疏远和很多非常奇怪的情况。对于有些人来说,这是充满困难的一年,希望它有很多成长和一些美好的事物。

对于Elasticsearch来说,绝对是有趣的一年。发生了很多事情,添加了新功能,并且产品发生了重大变化。我们想回顾并分享新功能和使用推荐的重点。这篇文章基于我们的经验以及我们认为重要的事情,讨论了我们认为是重大变化的事情以及向前迈出的重要步骤,同时积极与数百名客户合作,研究各种形状和大小的Elasticsearch集群,从全文搜索到日志分析和异常检测。

与往常一样,升级到最新的Elasticsearch版本会根据您的使用情况显着提高性能。同样在今年,Elasticsearch看到了许多性能和内存优化,最著名的是7.8和7.9版本。这些太多了,而且级别太低,无法在此处详细列出,因此我们不会。

在这篇文章中,我们将重点介绍我们认为可能对您产生重大影响的高级技术细节-与Elasticsearch合作的开发人员。为了简洁起见,我们仅突出显示并为您提供链接以供进一步研究。

在开始之前,有关许可的重要说明:最近,许多新功能是在X-Pack许可下添加的,而不是作为开源产品的一部分。多数确实是免费的(X-Pack Basic),但有些需要付费订阅许可证。在这篇文章中,我们将重点介绍我们认为重要的,对您有用的功能,但是这些功能仍然是免费的,无需购买许可证即可使用。

在Elasticsearch中,可以通过三种方式分页搜索结果(又名“分页”):from / size,scroll和search_after。每个都有其缺点(缓慢,结果集的不稳定性,在字段上排序的要求等)。在最新的Elasticsearch版本中,添加了新的API,即PIT(时间点)API。本质上,它是滚动API的轻量级版本,旨在替代它,从而可以进行深度分页并提高效率,但仍然存在一些限制。

我们的建议是仍然不要过度使用它-通常避免使用Elasticsearch进行深度分页。但是当您确实需要滚动时,例如用于将数据复制到外部作业等-与(现在不建议使用)滚动API相比,首选新的PIT API。 PIT API的官方文档中有一个很好的摘要和讨论。

在2020年,Elastic已经摆脱了许多节拍(Filebeat,Packetbeat,Metricbeat等)的前提,转而支持可以提供所有功能的单个数据收集代理。尽管Elastic Agent发挥了全部作用,但是部署和管理统一的Elastic Agent会变得更加容易。还可以通过Fleet和在Kibana中的集中式摄取管理器进行管理。在这里阅读更多。

从本质上讲,Data Streams只是一个改进的API,并且使用Rollover API将数据分区到更多索引中时,它具有更好的用户体验。在过去的两年中,我们停止使用分片,而转而使用索引级分片-实际上是将数据分区到不同的索引,而新的Data Streams API在使集群更高效,更稳定方面起着重要作用。

可组合索引模板是在Elasticsearch 7.8中引入的,实际上是2016年开始的为期4年的讨论的结果。有了可组合索引模板,您最终可以对模板的构建和应用方式进行细粒度的控制,请参阅参考资料。全面的讨论和示例。

Transform API从7.7开始成为GA,从本质上讲,它们是由Elasticsearch集群内的Elasticsearch运行的托管ETL流程,用于将数据从一个索引复制和转换到另一个索引。

这允许压缩("汇总"),在写入时执行自联接(例如,将事件折叠到会话中),从摄取层将数据丰富和清理为将为服务层提供服务的索引。请参阅此处的文档。

我们的建议是继续将专用的ETL工具用于任何实际或繁重的用例,并且仅将Transforms API用于次要用例或在开发过程中。我们通常更喜欢使用Flink,Airflow,Nifi等内置工具来运行ETL,因为它们提供了显着更好的开发经验,调试,编写可测试代码的能力以及更可预测和可管理的ETL流程。

异步搜索API使您可以异步执行搜索请求,监视其进度以及在部分结果可用时检索部分结果。它是在Elasticsearch 7.7中引入的,旨在支持更快速的搜索体验。请参阅此处的文档。

地理空间搜索在2020年备受青睐,最显着的是在Elasticsearch中制作了BKD支持的地理形状,这转化为显着的精度,效率和速度提升。这还允许添加更多的地理类型,查询和聚合。

*直方图-用于存储表示直方图的预聚合数值数据的字段。使用两个成对的数组(值和计数)定义此数据。

*常量关键字数据类型-对于索引中所有文档具有相同值的情况,常量关键字是关键字字段的一种特殊形式。

*任意形状和点数据类型-形状数据类型便于索引和搜索任意x,y笛卡尔形状(例如矩形和多边形)。它可用于索引和查询其坐标属于二维平面坐标系的几何。

*通配符字段-通配符字段存储针对类似通配符grep的查询优化的值。在其他字段类型上也可以使用通配符查询,但是通配符查询通常速度较慢并且具有分析限制(区分大小写和其他)。通配符字段是重要的补充-它最终允许不区分大小写的通配符搜索,并且当与search_as_you_type字段类型结合使用时,它可以提供出色的搜索体验。

*直方图聚合-基于多存储桶值源的聚合,可应用于从文档中提取的数值或数字范围值*归一化聚合-父管道聚合,用于计算特定存储桶值的特定归一化/重新缩放值。 *移动百分位数聚合-给定一系列有序百分位数,移动百分位数聚合将在这些百分位数之间滑动一个窗口,并允许用户计算累积百分位数。 *移动功能聚合-给定一系列有序数据,移动功能聚合将在数据上滑动一个窗口,并允许用户指定在每个数据窗口上执行的自定义脚本。 *管道推断聚合-父管道聚合,它加载了预先训练的模型,并根据父存储桶聚合中的整理结果字段进行推断。 * T检验汇总-一种新的汇总,它将告诉您两种总体均值之间的差异是否在统计上显着并且不是偶然发生的。 *箱形图聚合-箱形图聚合返回制作箱形图的基本信息:最小值,最大值,中位数,第一个四分位数(第25个百分位数)和第三个四分位数(第75个百分位数)值。

事件查询语言(EQL)是用于基于事件的时间序列数据(例如日志,指标和跟踪)的查询语言。它是一种新的查询语言,最近已添加到Elasticsearch中,主要针对SIEM用户,但不仅限于此。它加入了传统的Lucene查询语法和Elasticsearch JSON查询,还加入了SQL支持和Kuery(Kibana查询语言)。完整的文档在这里。

多年来,Kibana一直致力于创建可作为组件添加到仪表板的简单可视化,直到最近,他们才开始添加其他功能,例如Timelion,Visual Time Series Builder和Vega。 Lens是最新添加的,目的是进一步简化构建仪表板的目的。

Lens是通过简单的拖放界面在Elasticsearch中可视化数据的最简单,最直观的方式,无论以前的Kibana经验如何,任何人都可以立即开始探索数据以获取见解,我们认为这是一个很棒的新功能,它将允许从Kibana开始降低了新用户的进入门槛。

很长时间以来,Elastic Stack缺乏警报支持。有Watcher,它仍然存在,但是它总是非常有限并且使用起来并不琐碎。在过去的两年左右的时间里,它开始获得很多改进,而在2020年,整个Kibana的Alerting变得更加精简时,它就开始获得很大的进步。 2020年,添加了许多功能,可帮助从Kibana的几乎所有地方创建警报和良好警报。但是,大多数新的警报功能都在高级(付费)层上,仍然缺少很多功能。

这是一个很好的进展,但是我们仍然认为还有很多事情要做。几个月前,我们在网络研讨会上回顾了在Elasticsearch上启用警报的所有可能性,并且今天该内容仍然适用:

我们的团队是经验最丰富的Elasticsearch顾问。了解您的集群是否针对支出,稳定性和性能进行了完全优化。请通过[email protected]与我们联系,以进行快速补充评论。