SQL资深专家,竟然是这样智能挖掘异常日志

提取异常日志是个大难题

面对海量的日志(TB乃至PB级别),如何从日志中挖掘出异常信息对于大部分的开发者而言是一个大难题。例如,判断机器的延时是否正常,部分request是否正常。一般,咱们对于异常的数据,要及时的报警,以尽快的处理。算法

一般咱们是怎么搞得呢? 在之前,依赖于开发者的经验,来根据某些特定的特征,判断是否达到了阈值,例如根据延时是否达到了某个特定的值,或者http 响应码5xx的比例达到了某个阈值。这个阈值,依赖于资深的开发者的丰富的经验。spa

AI dev/ops

AI算法的迅猛发展,给异常日志挖掘提供了新的方向。大名鼎鼎的AI领域专家吴恩达(Andrew NG),在他所教授的Machine Learning课程中提供了一种Abnormal Detection算法。算法经过训练数据集,得到一个正态分布。而后检测目标数据是否落在了正态分布的边缘位置,若是落在了边缘位置,则认为是一个异常数据。日志

算法步骤:code

  1. 肯定要训练的feature,能够是单个指标,好比latency,也能够是复合指标,例如CPU/NetFlow
  2. 在训练数据集上,求得均值μ和方差σ^2
  3. 对新数据求方程P(x)=

clipboard.png

接下来,咱们介绍如何在SQL中使用该算法来检测异常。orm

日志服务提供的异常检测算法

以延时为例,咱们来看哪些延时是异常的。 延时的分布通常是这样的:blog

不知足正太的需求,要把上述图形转化成正太分布,对latency 求对数:log(latency)
 
clipboard.pngip

  • 值μ和方差σ^2:

clipboard.png

stddev即标准差
variance即方差
avg_ln即ln(latency)的均值
avglatency即latency的均值开发

  • 提取异常数据
| select latency  where  pow(e(), - pow((ln(latency) - 8.223) ,2)/2/0.3975) /sqrt(2*pi()) / 0.53  < 0.01 order by latency desc

把方差标准差和均值带入公式,使用where筛选出来小于0.01的结果,即异常值。能够看到,得到的结果,明显大于军latency的均值。it

clipboard.png

相关文章
相关标签/搜索