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的更多相关文章

  1. ElasticSearch Kibana 和Logstash 安装x-pack记录

    前言 最近用到了ELK的集群,想想还是用使用官方的x-pack的monitor功能对其进行监控,这里先上图看看: 环境如下: 操作系统: window 2012 R2 ELK : elasticsea ...

  2. Java Elasticsearch新手入门教程

    概要: 1.使用Eclipse搭建Elasticsearch详情参考下面链接 2.Java Elasticsearch 配置 3.ElasticSearch Java Api(一) -添加数据创建索引 ...

  3. ElasticSearch Index操作源码分析

    ElasticSearch Index操作源码分析 本文记录ElasticSearch创建索引执行源码流程.从执行流程角度看一下创建索引会涉及到哪些服务(比如AllocationService.Mas ...

  4. ELK部署详解--elasticsearch

    #Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析.它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编 ...

  5. Elastic Stack之ElasticSearch分布式集群二进制方式部署

    Elastic Stack之ElasticSearch分布式集群二进制方式部署 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必大家都知道ELK其实就是Elasticsearc ...

  6. Spark 整合ElasticSearch

    Spark 整合ElasticSearch 因为做资料搜索用到了ElasticSearch,最近又了解一下 Spark ML,先来演示一个Spark 读取/写入 ElasticSearch 简单示例. ...

  7. elasticsearch 的查询 /_nodes/stats 各字段意思

    /_nodes/stats 字段意思   “”   1 {  2  "_nodes": {3 "total": 1, "successful" ...

  8. 利用ML&AI判定未知恶意程序——里面提到ssl恶意加密流检测使用N个payload CNN + 字节分布包长等特征综合判定

    利用ML&AI判定未知恶意程序 导语:0x01.前言 在上一篇ML&AI如何在云态势感知产品中落地中介绍了,为什么我们要预测未知恶意程序,传统的安全产品已经无法满足现有的安全态势.那么 ...

  9. (转载)Centos下Elasticsearch安装详细教程

    原文地址:http://www.cnblogs.com/sunny1009/articles/7874251.html Centos下Elasticsearch安装详细教程 1.Elasticsear ...

随机推荐

  1. 排序 —— 希尔排序(Shell sort)

    希尔排序(Shell sort)的名称源于它的发明者 Donald Shell,该算法是冲破二次时间屏障(冒泡和插入排序,基于相邻元素的交换)的第一批算法.希尔排序改进了冒泡和插入排序的相邻元素才进行 ...

  2. Vue中import '@...'是什么

    今天看新项目代码,有import '@/assets/css/theme/index.css'一类的代码,里面的@是做什么的呢.   找到这篇文章https://www.cnblogs.com/bos ...

  3. Android菜鸟的成长笔记(18)——绑定本地Service并与之通信

    在上一篇中介绍了Service与Activity的区别及Service两种启动方式中的第一种启动方式startService(). 我们会发现用startService().stopService() ...

  4. UVALive 6531 Go up the ultras 单调栈+RMQ

    题目链接:点击打开链接 题意: 给定n座山 以下n个数字表示n座山的高度 若这座山u合法,则要满足: 1.若u的左边存在比u高的山,设v是u左边距离u近期的且严格比u高的山,在[v,u]之间至少有一座 ...

  5. Adaptive device-initiated polling

    A method includes periodically sending a polling call to an enterprise system outside the firewall a ...

  6. 《用户体验要素》澄清了 UI 原型设计中看不见确感受得到的那一层

    <用户体验要素>澄清了看不见确感受得到的那一层 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致&quo ...

  7. 监听WPF依赖属性

    原文:监听WPF依赖属性 当我们使用依赖属性的时候,有时需要监听它的变化,这在写自定义控件的时候十分有用, 下面介绍一种简单的方法.   如下使用DependencyPropertyDescripto ...

  8. WPF中的菜单模板

    原文:WPF中的菜单模板 资源字典代码如下: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xa ...

  9. 对std::string和std::wstring区别的解释,807个赞同,有例子

    807down vote string? wstring? std::string is a basic_string templated on a char, and std::wstring on ...

  10. 使用WPF技术模拟手机界面

    原文:使用WPF技术模拟手机界面 1. 前言 WPF(Windows Presentation Foundation),即"Windows呈现基础",它的目的非常明确,就是用来把数 ...