X-Pack的machine learning

如何使用X-Pack的machine learning

最近在使用X-Pack中的机器学习功能,主要的就是利用非监督的时间序列模型,用来检测流量的变化,关于X-Pack这块的文章好像可以参考的比较少,所以我在这篇文章中大致的把X-Pack的机器学习功能做一个简单的介绍。

1. X-Pack的安装

我们本身是要搭建一个ELK平台,X-Pack只是其中的一部分,ELK平台的搭建网上有很多的教程,大家按照教程来搭建基本不会有什么问题,需要注意的是最新的X-Pack有些功能是需要购买授权才能使用的。

2. 数据的准备

我们用来分析的数据是access log,所以在录入elasticsearch中的时候@timestamp取得就是日志的请求时间,因为我们利用的就是X-Pack中的时间序列模型,所以在elasticsearch的数据中需要特别注意的就是你数据的时间戳。

3. 新建Job

我们第一步就是要建立我们学习的Job,具体的过程如下:
新建Job 1

选择Job的数据源
这里就是选择我们Job的数据源,可以从es的索引或者从我们保存的search中选择数据源。

Job类型选择

这里就涉及到我们Job的类型了,有三种类型可选择,如果系统默认自带的这三种类型满足不了你的需求那么可以用自定义的这种高级方式。
如果你一开始还不太清楚你的数据的分布情况,那么你可以先试试用X-Pack的”数据可视化(Data Visualizer)”来先了解一下你的数据。
“单一度量(Single metric)”是指只对一个指标进行度量,例如你的数据是某款产品的销售数据那么你可以用这个模型来做销售数据的异常检测数据预测
“多维度度量(Multi metric)”是指可以把数据按照某一个维度进行拆分,单纯的文字可能不太好理解,后面我举的一个例子会帮助大家比较好的理解。
至于”Population”因为没有深入去了解所以就不述了,有兴趣的可以自己去尝试。

4. Job的参数

这里写图片描述
这里的Fields就是我们要评估的字段,例如你想要对销售数据做评估那么这里就选择销售额字段,后面的下拉框是说对字段做怎么样的聚合运算,例如销售数据可能取Mean平均值这种聚合运算。
Split Data是指对数据根据什么字段来拆分,例如销售数据可以根据客户来拆分,选择了对应的字段以后在右边就会显示拆分后的图表。
说明:我截图的是我自己的需求,计算每一个域名的qps值,大家看看是否理解了。
这里写图片描述
接着就到了另外两个重要的参数了。
Bucket span就是说我们学习阶段取样分析的周期和后面实时计算检测的窗口周期,如果大家知道spark streaming那么就比较容易理解这个参数了。例如我们的销售数据可以根据天来计算,那么就可以把这个设置成24*60m了,在学习阶段就是把一天的销售额做平均值计算,在检测、预测阶段也是根据一天来运行。
Advanced->Use dedicated index选项是指你需要把这个机器学习的结果存入单独的elasticsearch的索引中不,如果不勾选那么默认就是存入.ml-anomalies-shared这个索引中。
最后就是看你机器学习的数据集的选择了,你可以自由选择数据集的大小:
这里写图片描述

5. Job的管理

Job的管理我只说一点,就是如何做到类似spark streaming一样的实时检测,就是在Job management中点击action中的第一个按钮。
这里写图片描述
接着我们选择No end time(Real-time search)即可。
这里写图片描述

6. 异常检测、预测

机器学习完了以后就能用到Anomaly detectForecast这两个主要的功能了,详细的不再细述,相信大家用一下就知道了。
不得不说在异常检测中,检测结果还是挺强大的。

7. 如何读取结果

一开始我想通过API的方式来读取检测的结果,在官网上面找到了对应的API接口,但是除了个别的能用外,很多接口都是报404错误,尝试了半天没有找到原因,后来抓包看了一下kibana的请求,发现kibana根本就没有用这些接口而是直接读取的.ml-anomalies*这样的索引,然后我猜想这些接口在最新的版本中可能都没有实现,目前我用的Version: 6.1.1

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页