本文主要从 Splunk内置的命令和应用两个部分介绍了一些实用的机器学习的小诀窍,抛砖引玉,希望能和大家一起探讨如何让Splunk变得更加聪明。


1.概览

机器学习可以简单地看作一个从数据中自动分析获得规律,并利用规律对未知数据进行预测的过程。按照训练数据类型的不同,可以分为监督学习、无监督学习、半监督学习和增强学习。通常机器学习分为六步, 分别是前期的业务分析、数据理解、数据预处理、模型训练、模型优化和模型部署。这是个不断迭代不断优化的过程。

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

众所周知,在机器学习中起到重要作用的并不是模型,而是数据科学家对业务问题的理解和数据的分析准备。Splunk做为机器数据采集、分析和展示领域的领导者,极大地方便了这一过程,除此之外,Splunk还提供了多样的机器学习应用来实现模型训练、优化、部署的步骤,帮助用户轻松实现优化IT、安全和业务运营,异常检测等机器学习的功能。


 2.内置的命令

Splunk提供了20多个和机器学习相关的命令,可以很方便的直接在数据上进行分析、报警或预测。按照命令的功能可以大致分为两类:分别是时序分析和异常检测。


时序分析

现实生活中大多数的机器数据都会自然的带上时间戳,这种时间序列数据可以看做三个部分的简单相加或者相乘。


Additive:

Time Series=Seasonal+Trend+Random

 

Multiplicative:

Time Series=Seasonal x Trend x Random


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

常用的时序分析命令有三个,分别是:

时序分析命令

 命令

   算法

   适用的场景

  

 

trendline


通过移动平均值观察和分析时序数据中的trend趋势。

算法提供sma,ema和wma三种选择。

   适用于分析单个numerical字段

  


 x11


通过x11算法观察和分析时序数据中的seasonality趋势。

算法提供additive和multiplicative两种分解选择。

   适用于分析单个numerical字段

  


 predict


通过分析数据中的trend和seasonality趋势从而实现预测的功能。

提供LL,LLT,LLP,LLP5,LLB和BiLL五种选择。

   适用于分析单个numerical字段


案例:

利用predict命令根据已经产生的费用对下月的成本进行预测,从而更好的控制成本,制定预算方案。其中, 蓝色的线段是当月已经产生的费用,×××的线段是预测值。

SPL如下:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

会返回这样的图表:


异常检测

异常检测通常是对数据中不匹配预期模式或数据集中其他值的事件的识别。在网络入侵、银行欺诈、结构缺陷等问题中有大量的应用。

常用的异常检测命令有五个,分别是:

   常用的异常检测命令

命令

方法

适用的场景

   anomalousvalue

对于numerical字段,通过计算偏离均值的标准差个数判断;对于category字段,通过计算出现的概率值判断。

   适用于分析单个字段

   


anomalies



计算某个事件的异常值。

unexpectedness = [s(P   and X) - s(P)] / [s(P) + s(X)]

其中, s( ) 表示事件间的相似性。

   适用于同时分析多个字段

  



 cluster




… | cluster ...   | sort cluster_count

将较小的聚类看做异常事件。

将事件看作原始字符串,通过生成字符串的字向量从而计算事件与事件之间的距离。

   适用于分析文本数据,比如“05-04-2017 14:40:40 PST vm_mcp_uk kernel[0]: Kernel request now disabled. ”

   


outlier


箱型图算法(BPrule)。

异常点被定义为值大于QU+1.5IQR或小于QL-1.5IQE的点。

   适用于分析单个numerical字段

   anomalydetection

对anomalousvalue和outlier命令进行封装。

   适用于分析单个字段


案例:

利用anomalousvalue命令监控异常的aws EC2实例创建。其中×××的点是异常点。 

SPL如下:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

会返回这样的图表:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=细心的读者可能已经发现上述的命令都是基于简单的统计分析,无法很好地检测复杂的时间序列数据中的异常。通过结合时序分析命令可以较好地解决这个问题。


案例:

利用anomalousvalue和predict命令发现周期性数据中的异常点 。其中×××的点是异常点。

SPL如下:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

会返回这样的图表:


如果上述异常检测的技巧都不能满足你的业务需求,你可以试试最近IT Service Intelligence (ITSI) 推出的大杀器——Metric Anomaly Detection (MAD)算法。该算法对数据的分布不做假设,不需要特定的训练集,能够动态调整阈值减少误报率,同时几乎实时检测。如果你要使用这个内置命令,别忘了先安装ITSI应用,相关算法配置可通过mad.conf实现。

案例:

利用mad命令发现日常登入事件中的异常点。其中,当该算法计算出的anomalyscore(蓝色)大于threshold(×××)时,就可以认为此时有异常发生。

SPL如下:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=会返回这样的图表:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


3.机器学习相关的应用

Splunk提供了多个和机器学习相关的应用,从覆盖智能运维的ITSI到关注用户分析的User Behavior Analytics(UBA)。而本节将会着重介绍Machine Learning Toolkit,该应用给予了用户更多的自由性,通过其包装了300多种来自sci-kit learn、pandas、statsmodel、numpy和scipy库的python开源算法,用户可以方便地在Splunk上创建和运行自定义的机器学习模块,下载如下

https://splunkbase.splunk.com/app/2890/

在机器学习的大多数步骤中,该应用都提供了相关功能方便用户实现自定义模块。


数据预处理

由于真实世界中的数据来源复杂、体积巨大,往往难以避免地存在缺失、噪声、不一致等问题。当数据的维度过高时还会存在所谓的“维数诅咒”问题,过高的维度不仅增加了计算量,反而会降低算法的效果。除此之外,有些算法对数据存在特殊的要求,比如Neural Networks、KNN等算法在数据进行normalize之后效果会提升。


该应用提供三种算法进行数据预处理,分别是StandardScaler,PCA和KernelPCA,同时提供了sample命令对数据集进行采样。

 

模型训练

该应用提供了fit命令对模型训练的过程进行简化。

 

[training data] | fit LinearRegression cost from feature1 feature2 into my_model

 

上述的SPL表示以搜索结果中的feature1,feature2字段对cost字段进行线性拟合,将生成的模型保存为my_model。

用fit命令可以训练26种常见的模型,具体见

http://docs.splunk.com/Documentation/MLApp/2.2.0/User/Algorithms


模型优化

当发现模型对数据的拟合不尽如人意时,该应用提供了简单明了的UI界面方便用户对模型参数进行调整。


比如下图表示对随机森林算法常见的参数进行调整:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


模型部署

该应用提供了apply命令对模型部署的过程进行简化。

 

[production data] | apply my_model

 

上述的SPL将 my_model很容易地应用到生产数据中。