Elasticsearch ML
Elastic公司在收购了Prelert半年之后,终于在Elasticsearch 5中推出了Machine Learning功能。Prelert本身就擅长做时序性数据的异常检测,从这点上讲也比较契合elasticsearch的数据特征。在做了一段时间的PoC之后,发现这个功能的最大作用就是troubleshooting过程中帮助定位日志的时间和空间,提高日志搜索的目的性,最终还是服务于elasticsearch。只不过这个功能需要额外的license,不然只有一个月的试用期,略显不爽。
还是先说是Perlert,Perlert做异常检测的基本原理在其CTO Stephen Dodson的文章中有详细介绍:《Anomaly Detection in Application Performance Monitoring Data》。通读全文,发现核心算法基于概率统计的假设检验,针对时间序列的time window(Elasticseaerch中叫bucket span)学习出P-value,用于甄别异常。

大致原理如上图,当然在实现中有对非正态分布数据的处理以及对P-value计算的优化。
了解了原理,回到Elasticsearch Machine Learning,虽然感觉没有用到什么Machine Learnig的算法,但是确实针对时序性的运维数据分析,非常实用。
笔者的PoC基于Elasticstack 5.5.2,在kibana上目前支持创建三种类型的job:
single metrics job:只针对index的某一个field的数据分析。
multi metrics job:可以对index的多个field进行数据分析。并不是多个field在一起分析,而是每个field的数据单独分析。
advance job:像multi metrics job一样可以支持多个field数据的分析,同时在一个field数据的分析过程中,加上别的field的影响因素。
一些有用的操作:
single job的创建过程中,对数值型的数据提供了一些aggreate方法,用于对要分析的数据预处理:

multi job支持split data操作,即对某个field的value进行partition。比如分析http_response_time的数据,可以按照field:http_response_status_code的value(200,404,500)分别进对应行分析,这对于某些情况下,提高异常检测的精准度非常有意义。
multi job还支持设定key field(influencer),在找到异常点后,可以显示该点的key field的值对这个异常的贡献有多大。这个功能对应上文所说的帮助精确定位日志查询。比如常设clientId, nodeArea等具有明确意义的field为key filed,可以帮助troubleshooting。
Advance job具有multi job的所有功能,同时又增强了detector功能,除了by_partition,还支持by_field, over_field等数据范围划分的操作。
本来,选取bucket span是创建job的过程中最难把握的环节,但在5.5之后,elastic提供了auto estimate bucket span的功能,在一定程度上解决了这方面的问题。
Frequency:bucket span时间内进行异常检测的间隔,防止bucket span设置的太大,异常检测出来的时效性过低。
Example:
1. 数据准备:进入elasticsearch的数据未必能直接做learning,很多有价值的数据存在raw data里面。可以通过logstash的grok方法把需要进行分析的属性提取出来,以key-value的形式存入elasticsearch.
2.创建job,比如创建一个advance job。
选择index=>add new detector & add influencer => start job.
在add new detector的时候需要注意选择是over field和partition field的区别,over field是基于存在某属性的所有bucket span进行detector,有点儿聚类的感觉。 Partition field是按照某个属性的值进行划分partition,在所属partition范围内进行detector。
3. 结果查询。
可以看到single metrics views里面检测出来的异常点, 可以按照influencer进行再次的过滤,使得influencer的在图上更近突出。通过点击可以查看异常的的具体信息。

可以通过Anomaly Explorer窗口通过view by influencer来观察最有可能出异常的influencer值。

总之,Elasticsearch的Machine Learning主要还是为了配合search功能使用的,帮助更好的进行日志查询。
Elasticsearch ML的更多相关文章
- ElasticSearch Kibana 和Logstash 安装x-pack记录
前言 最近用到了ELK的集群,想想还是用使用官方的x-pack的monitor功能对其进行监控,这里先上图看看: 环境如下: 操作系统: window 2012 R2 ELK : elasticsea ...
- Java Elasticsearch新手入门教程
概要: 1.使用Eclipse搭建Elasticsearch详情参考下面链接 2.Java Elasticsearch 配置 3.ElasticSearch Java Api(一) -添加数据创建索引 ...
- ElasticSearch Index操作源码分析
ElasticSearch Index操作源码分析 本文记录ElasticSearch创建索引执行源码流程.从执行流程角度看一下创建索引会涉及到哪些服务(比如AllocationService.Mas ...
- ELK部署详解--elasticsearch
#Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析.它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编 ...
- Elastic Stack之ElasticSearch分布式集群二进制方式部署
Elastic Stack之ElasticSearch分布式集群二进制方式部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必大家都知道ELK其实就是Elasticsearc ...
- Spark 整合ElasticSearch
Spark 整合ElasticSearch 因为做资料搜索用到了ElasticSearch,最近又了解一下 Spark ML,先来演示一个Spark 读取/写入 ElasticSearch 简单示例. ...
- elasticsearch 的查询 /_nodes/stats 各字段意思
/_nodes/stats 字段意思 “” 1 { 2 "_nodes": {3 "total": 1, "successful" ...
- 利用ML&AI判定未知恶意程序——里面提到ssl恶意加密流检测使用N个payload CNN + 字节分布包长等特征综合判定
利用ML&AI判定未知恶意程序 导语:0x01.前言 在上一篇ML&AI如何在云态势感知产品中落地中介绍了,为什么我们要预测未知恶意程序,传统的安全产品已经无法满足现有的安全态势.那么 ...
- (转载)Centos下Elasticsearch安装详细教程
原文地址:http://www.cnblogs.com/sunny1009/articles/7874251.html Centos下Elasticsearch安装详细教程 1.Elasticsear ...
随机推荐
- unix shell(壳)的简单实现
用户程序通过调用操作系统提供的系统调用(system call)API 来获得操作系统提供的各种服务.但使用 API 需要手动编写程序.对于不编程序.且需要与操作系统进行交互的用户,又如何使用操作系统 ...
- 基于go语言的心跳响应
我们在使用tcp ip 通讯的时候,都需要使用心跳机制来判断服务器与客户端的连接状态,如果服务器的心跳超时等,会做出重新连接等机制, 基于这种问题,我今天给大家推荐了一个基于go语言的心跳响应机制,废 ...
- 2 Task中的延续和7种阻塞
1.wait using System; using System.Threading; using System.Threading.Tasks; namespace 多线程_List { clas ...
- Method of Seamless Integration and Independent Evolution of Information-Centric Networking via Software Defined Networking
A method of transferring data between a software defined network (SDN) and an information-centric ne ...
- 简单使用.net core 自带的DI
1.创建一个web api项目 2.在项目中创建一个接口类 namespace LearnCore.CoreDI { public interface ILearnDI { string GetNam ...
- uva 11892 - ENimEN(推理)
题目链接:uva 11892 - ENimEN 题目大意:给定n堆石子的个数,两人轮流选择石子堆取石子,直到不能取为失败,附加条件,假设前一次操作,即队手的操作,没有将选中石子堆中的石子取完,那么当前 ...
- WPF 线程:使用调度程序构建反应速度更快的应用程序
原文:WPF 线程:使用调度程序构建反应速度更快的应用程序 作者:Shawn Wildermuth 原文:http://msdn.microsoft.com/msdnmag/issues/07/10/ ...
- Android开源项目SlidingMenu本学习笔记(两)
我们已经出台SlidingMenu使用:Android开源项目SlidingMenu本学习笔记(一个),接下来再深入学习下.依据滑出项的Menu切换到相应的页面 文件夹结构: watermark/2/ ...
- 基于 CSP 的设计思想和 OOP 设计思想的异同
LinkerLin Go语言推崇的CSP编程模型和设计思想,并没有引起很多Go开发者包括Go标准库作者的重视.标准库的很多设计保留了很浓的OOP的味道.本篇Blog想比较下从设计的角度看,CSP和OO ...
- sql 从未连续的Id中选择10~30条数据
select * from(select *,row_number()over(order by ProductID) as num from Products) as t where t.num&g ...