论文标题 | Correlating Events with Time Series for Incident Diagnosis
论文来源 | KDD 2014
论文链接 | https://dl.acm.org/doi/10.1145/2623330.2623374
源码链接 | 未公布

TL;DR

目前生产环境中的监控数据主要包括两种类型:指标的时间序列数据 (time series),例如 CPU 利用率指标,和事件序列数据 (events),例如 out of memory 时间,论文中提出一种事件和时间序列关联分析的方法来提升故障诊断的效率。主要考虑了事件序列与时间序列间三个方面的问题:事件和时间序列 ① 是否存在关联关系 ② 时间先后顺序 ③ 单调性影响。论文实验部分在仿真数据集和真实数据集中验证了算法的有效性。

Problem Statement

下图展示了事件与时间序列的关系,例如 CPU 密集型的程序会导致 CPU 使用率上升,但是磁盘密集型的程序将对 CPU 使用率没有什么影响,因此 CPU 密集型事件与 CPU 使用率上升事件间存在关联但是磁盘密集型的程序与 CPU 使用率上升没有关联。 当故障发生时,考虑这种事件与时间序列的关联有助于提高故障诊断的效率。

event-timeseries

故障诊断时需要考虑事件与时间序列间三个方面的问题:

  • 是否存在依赖关系:首先需要根据统计关系方法判断事件与时间序列间是否存在关系,虽然不能代表因果关系但是可以两者是关联的。
  • 依赖关系的时间顺序:判断事件和时间序列发生的顺序,例如事件EE 先发生,时间序列SS 也随之改变,那么可以说明事件EE 导致时间序列SS 波动,或者反之序列SS 波动导致了事件EE。这样可以确认因果方向。
  • 依赖的单调性影响:通过判断时间序列上升或者降低导致了事件的发生。

给定事件序列或时间类型EE ,对应的时间戳表示TE=(t1,t2,,tn)T_E=(t_1, t_2,\cdots,t_n)nn 表示发生事件的数量;时间序列S=(s1,s2,,sm)S=(s_1, s_2, \cdots,s_m),其中mm 表示数据点数量,时间序列的时间戳表示为TS=(t(s1),t(s2),,t(sn))T_S=(t(s_1), t(s_2),\cdots,t(s_n)),时间戳存在关系t(si)=t(si1)+τt(s_i)=t(s_{i-1})+\tauτ\tau 表示采样时间间隔。

sub-series

如上图所示,如果事件eiEe_i\in E 与时间序列SS 间存在联系那么必然发生事件eie_i 发生后时间序列SS 会随之改变。

假设krear(S,ei)\ell_k^{rear}(S, e_i) 表示事件eie_i 发生后长度为kk 的子序列,kfront(S,ei)\ell_k^{front}(S, e_i) 表示发生前的子序列。如果事件EE 与时间序列SS 无关,那么子序列集合Γfront ={kfront (S,ei),i=1n}\Gamma^{\text {front }}=\{\ell_{k}^{\text {front }}(S, e_{i}),i=1 \cdots n\} 或者Γrear ={krear (S,ei),i=1n}\Gamma^{\text {rear }}=\left\{\ell_{k}^{\text {rear }}\left(S, e_{i}\right), i=1 \cdots n\right\} 将不会与SS 中随机采样长度为kk 序列Θ\Theta 统计概率分布相同,如果概率分布相同那么事件EESS 存在关联。因此,论文中将关联分析问题转为多变量的二样本假设检验问题。

Algorithm/Model

论文中主要基于最近邻的方法来分析三个方面的关联关系。

最近邻方法

Γfront \Gamma^{\text {front }}为例,给定样本Γfront ={kfront (S,ei),i=1n})\left.\Gamma^{\text {front }}=\left\{\ell_{k}^{\text {front }}\left(S, e_{i}\right), i=1 \cdots n\right\}\right)Θ={θ1,θ2,,θn~}\Theta=\left\{\theta_{1}, \theta_{2}, \cdots, \theta_{\tilde{n}}\right\} ,样本合集Z=ΓΘ={Z1,,Zp}Z=\Gamma \cup \Theta = \{Z_1,\cdots,Z_p\}p=n+n~p=n+\tilde{n}

Zi={kfront (S,ei), if i=1,,nθin, if i=n+1,,pZ_{i}=\left\{\begin{array}{ll} \ell_{k}^{\text {front }}\left(S, e_{i}\right), & \text { if } i=1, \cdots, n \\ \theta_{i-n}, & \text { if } i=n+1, \cdots, p \end{array}\right.

定义NNr(x,A)NN_r(x, A) 表示集合{A\x}\{A\backslash x\}xx 的最近邻样本;

定义两个子集合A1,A2A_1,A_2 并且xAx\in A 指示函数的值为

Ir(x,A1,A2)={1, if xAi&&NNr(x,A)Ai,0, otherwise I_{r}\left(x, A_{1}, A_{2}\right)=\left\{\begin{array}{ll} 1, & \text { if } x \in A_{i} \& \& N N_{r}(x, A) \in A_{i}, \\ 0, & \text { otherwise } \end{array}\right.

基于最近邻的假设检验量化形式如下

Tr,p=1pri=1pj=1rIj(x,A1,A2)T_{r, p}=\frac{1}{p r} \sum_{i=1}^{p} \sum_{j=1}^{r} I_{j}\left(x, A_{1}, A_{2}\right)

pp 足够大时,(pr)1/2(Tr,pμr)/σr(pr)^{1/2}(T_{r,p}-\mu_r)/\sigma_r 符合高斯分布,其中

μr=(λ1)2+(λ2)2,σr2=λ1λ2+4λ12λ22λ1=n/pλ2=n~/p\mu_{r}=\left(\lambda_{1}\right)^{2}+\left(\lambda_{2}\right)^{2},\quad \sigma_{r}^{2}=\lambda_{1} \lambda_{2}+4 \lambda_{1}^{2} \lambda_{2}^{2}\\ \lambda_1=n/p,\quad \lambda_2=\tilde{n}/p

高斯分布的假设检验如下,

(pr)1/2(Tr,pμr)/σr>α(pr)^{1/2}(T_{r,p}-\mu_r)/\sigma_r > \alpha :α=1.96,P=0.025\alpha=1.96,P=0.025α=2.58,P=0.001\alpha =2.58,P=0.001;

判断关联存在及其时序

根据最近邻的假设检验方法,如果Γfront \Gamma^{\text {front }}Θ\Theta 是统计独立的,那么SES\rightarrow E ,如果Γrear\Gamma^{\text {rear}}Θ\Theta 是统计独立的,那么ESE\rightarrow S

判断单调性影响

主要是判断事件EE 导致序列上升还是下降:E+SE \stackrel{+}{\rightarrow} S 或者ESE \stackrel{-}{\rightarrow} S。论文中使用tt 检验进行判断,Γfront\Gamma ^{front}Γrear\Gamma ^{rear} 间的tt 分数计算公式如下

tscore=μΓfrontμΓrear(n11)σΓfront2+(n21)σΓrear2n1+n22(1n11n2)t_{s c o r e}=\frac{\mu_{\Gamma^{f r o n t}}-\mu_{\Gamma^{r e a r}}}{\sqrt{\frac{\left(n_{1}-1\right) \sigma_{\Gamma^{f r o n t}}^{2} +\left(n_{2}-1\right) \sigma_{\Gamma^{r e a r}}^{2}}{n_{1}+n_{2}-2}{\left(\frac{1}{n_{1}}-\frac{1}{n_{2}}\right)}}}

其中μΓfront\mu_{\Gamma^{front}}μΓfront\mu_{\Gamma^{front}} 分别表示序列均值,σΓfront\sigma_{\Gamma^{front}}σΓfront\sigma_{\Gamma^{front}} 表示标准差。由于n1=n2=nn_1 =n_2=nnn 表示EE 中事件数量,因此上式可以简化为

tscore=μΓfrontμΓrearσΓfront2+σΓrear2nt_{s c o r e}=\frac{\mu_{\Gamma^{f r o n t}}-\mu_{\Gamma^{r e a r}}}{\sqrt{\frac{\sigma_{\Gamma^{f r o n t}}^{2} + \sigma_{\Gamma^{r e a r}}^{2}}{n}}}

如果tscore>αt_{s c o r e}>\alpha 那么表示负影响ESE \stackrel{-}{\rightarrow} S,如果tscore<αt_{s c o r e}<-\alpha那么表示正影响E+SE \stackrel{+}{\rightarrow} Sα=1.96,P=0.025;α=2.58,P=0.001\alpha = 1.96, P = 0.025 ; α = 2.58 , P = 0.001

整体的算法流程如下图所示:

algorithm

Experiments

论文中采用的数据集如下所示

dataset

实验参数参考论文,实验效果如下:

experiments1

考虑了计算最近邻时的时间序列相似度指标,整体而言 DTW 效果较好。

experiments2

Thoughts

  • 本想根据时间序列关联分析来解决告警聚合的问题,但是这篇文章是考虑事件对应的时间序列影响,虽然不能解决遇到的问题但是思路仍然值得借鉴。

  • 对应到实际环境中,例如产生一个故障或者事件必然会影响多个时序指标,但是此时不同指标的形态不一样直接计算序列相似性可能不准确,可以简单处理下得到差值序列再计算相似度,如果序列相似然后聚合成一个告警好像就行了。…🤔

Contact