《异常检测——从经典算法到深度学习》20 HotSpot:多维特征 Additive KPI 的异常定位
创始人
2024-03-05 22:18:20
0

《异常检测——从经典算法到深度学习》

  • 0 概论

  • 1 基于隔离森林的异常检测算法

  • 2 基于LOF的异常检测算法

  • 3 基于One-Class SVM的异常检测算法

  • 4 基于高斯概率密度异常检测算法

  • 5 Opprentice——异常检测经典算法最终篇

  • 6 基于重构概率的 VAE 异常检测

  • 7 基于条件VAE异常检测

  • 8 Donut: 基于 VAE 的 Web 应用周期性 KPI 无监督异常检测

  • 9 异常检测资料汇总(持续更新&抛砖引玉)

  • 10 Bagel: 基于条件 VAE 的鲁棒无监督KPI异常检测

  • 11 ADS: 针对大量出现的KPI流快速部署异常检测模型

  • 12 Buzz: 对复杂 KPI 基于VAE对抗训练的非监督异常检测

  • 13 MAD: 基于GANs的时间序列数据多元异常检测

  • 14 对于流数据基于 RRCF 的异常检测

  • 15 通过无监督和主动学习进行实用的白盒异常检测

  • 16 基于VAE和LOF的无监督KPI异常检测算法

  • 17 基于 VAE-LSTM 混合模型的时间异常检测

  • 18 USAD:多元时间序列的无监督异常检测

  • 19 OmniAnomaly:基于随机循环网络的多元时间序列鲁棒异常检测

  • 20 HotSpot:多维特征 Additive KPI 的异常定位
    相关:

  • VAE 模型基本原理简单介绍

  • GAN 数学原理简单介绍以及代码实践

  • 单指标时间序列异常检测——基于重构概率的变分自编码(VAE)代码实现(详细解释)

20. HotSpot:多维特征 Additive KPI 的异常定位

论文下载:netman | ieee.org 下载后排版有一定偏差,但内容相同。
论文发表于 IEEE Access 2018
源码地址:暂时没有找到源码

20.1 论文概述

首先必须说明的是,该论文提出的算法与本系列其他算法有很大的不同,包括:

  • 相对与异常检测 工作,更加注重的是 异常定位
  • 数据对象为 Additive多维特征 KPI 数据 (什么事 Additive KPI 在后面介绍)

20.1.1 论文提出算法的动机是什么?应用于什么场景?(Motivation)

当异常发生后,我们需要找到异常发生的根因(root cause),也就是定位到具体哪个KPI表现出异常,即找出根本原因。

这里举个例子,对于某一个特定业务,需要用到的中间件包括 mysql, redis, es,对应的微服务包括 service1, service2,我们对提供服务的各个阶段都采集 KPI 数据,当异常发生时,我们需要快速找到究竟是谁出了问题。这里需要强调 root cause 的含义,当我们发现某个服务模块有问题而这个服务模块包括 redis 与 mysql 以及服务提供逻辑代码,我们需要进一步确定到底哪块出问题,而不是笼统地回答。

因此,算法的应用场景也比较清楚,该场景满足以下三个条件:

  • 场景具有多个流程。类似于我们求的是多项式计算入 (1+2*4 - 7) / 3,而不是只有一个流程,如 1 + 3。
  • 场景中每个流程都可以量化,即使用 KPI 表示健康情况。
  • 场景中各个流程中具有一定的相关性。如果每个流程都相互独立,那就不存在寻找 root cause 的需求了。比如三个相互独立的房间中有三个人,哪个房间的灯亮了一定就是那个房间的人干的事情,不需要一个一个步骤调查分析了。

20.1.2 论文提出了什么算法,是如何找到 root cause ?

论文用到的最核心的算法应当包括:

  • 蒙特卡罗搜索树 Monte Carlo tree search (MCTS),用来搜索定位异常发生地。
  • Potential Score (ps) 用来评估每个元素的潜在风险程度的方法。

关于这两个方法如何应用在论文中在后面做详细介绍,目前给一个粗略的答复。

  1. 论文通过 Potential Score 评估每个结点的异常程度;
  2. 论文通过 Monte Carlo Tree Search 定位异常根因。

20.1.3 总体概述论文内容

论文提出了采用 MCTS 方法 的 HotSpot 框架(在异常定位文献中首次出现),可以捕捉异常是如何从根本原因在整个聚合层次结构中传播的(确定异常根因),并且论文提出了一种分层剪枝的方法来进一步缩小搜索空间以节省搜索时间,提高算法速率。

20.2 相关技术背景介绍

20.2.1 additive KPI

比如 page view, revenue, traffic volume,大概可以理解为数值类型的。事实上后来的很多KPI异常检测论文默认数据对象就是数值类型的。

20.2.2 多特征 additive KPI 数据的异常定位

多特征additive KPI 异常定位问题是识别最有可能导致总 KPI 值异常变化的模块及其元素。论文原文使用的是长方体(cuboid)来表示模块的概念,如图一所示:
在这里插入图片描述

20.2.3 Monte Carlo Tree Search(MCTS)蒙特卡罗搜索

蒙特卡洛树搜索(MCTS)是一种启发式搜索算法,适用于某些类型的决策过程,尤其是游戏中使用的决策过程(例如AlphaGo)。

在这里插入图片描述

这部分的资料比较多,感兴趣的可以自行搜索,可以参考一下 https://blog.csdn.net/qq_24178985/article/details/121803376。

不过也可以不急着深入理解这个方法,继续看其他部分。

20.3 论文阅读

这里跳几个比较重要的部分进行介绍

20.3.1 Contribution

  • 为了处理根源的巨大搜索空间,HotSpot 采用了 MCTS 方法(文献中首次应用在异常定位)。
  • 在采用 MCTS 中的动作值是我们基于“涟漪效应(ripple effect)”的新颖的潜在得分(potential score),其捕获了对于多维 additive KPI,一个属性组合的KPI值的改变(作为原因)如何能够引起其他属性组合的KPI值改变(作为结果)。
  • 我们提出了一种分层剪枝方法(在精神上类似于 Apriori 原理)来进一步减少搜索空间。
  • 我们使用一个顶级全球搜索引擎的真实世界数据,表明 HotSpot 在有效性和鲁棒性方面都比现有的两种方法有了很大的改进,HotSpot对所有类型的案例的95%实现了超过90%的F-score,而对于现有方法,所有类型的案例中只有不到15%具有超过90%的F-score。
  • 我们的实践经验表明,HotSpot 可以将手动工作的本地化时间从 1 小时以上缩短到 20秒以内。

20.3.2 问题定义

此部分描述了论文解决的是一个什么样的问题,先从定义出发:

在这里插入图片描述
这里是指接下来的论文、实验中可能用到的条目(term)的介绍说明,在公式中也会用到,这里我们详细介绍一下:

条目定义标识举例
属性每条PV记录的信息类别-Province (P), ISP(I), DC(D), Channel(C)\text{Province (P), ISP(I), DC(D), Channel(C)}Province (P), ISP(I), DC(D), Channel(C)
属性值每个属性的候选值-Beijing, Shanghai, Guangdong for Province(P)\text{{Beijing, Shanghai, Guangdong} for Province(P)}Beijing, Shanghai, Guangdong for Province(P)
元素每个属性的不同值的组合向量e=(p,i,d,c)e=(p,i,d,c)e=(p,i,d,c)(Beijing,*,*,*), (*,Mobile,*,*), (Beijing, Mobile,*,*)\text{(Beijing,*,*,*), (*,Mobile,*,*), (Beijing, Mobile,*,*)}(Beijing,*,*,*), (*,Mobile,*,*), (Beijing, Mobile,*,*)
PV值根据元素的访问日志数v(ei)v(e_i)v(ei​)v(Beijing,*,*,*)v(\text{Beijing,*,*,*})v(Beijing,*,*,*)
数据立方体多维数据的数据结构n−dcube{n-d} \ cuben−d cube维度为{P,I,D,C}的四维数据立方体
长方体Cuboids长方体是一个数据立方体,其维度在所有给定维度的子集中BiB_iBi​{BP,BP,I,BP,I,D,...}\{B_P, B_{P,I}, B_{P,I,D},...\}{BP​,BP,I​,BP,I,D​,...} for the 4-d data cube with the dimensions {P, I, D, C}\text{\{P, I, D, C\}}{P, I, D, C}
潜在得分Potential Score衡量一组元素成为根本原因的潜力的概念pspspsps(S)ps(S)ps(S),S={(Beijing, *, *, *), (*, Mobile, *, *)}S=\{\text{(Beijing, *, *, *), (*, Mobile, *, *)}\}S={(Beijing, *, *, *), (*, Mobile, *, *)}

下面的两个表用来表示 PV 例子,网站上的PV记录可以有几个属性。 例如,“10:00:01(时间戳); 北京、移动、DC1、Channel1“为记录,北京、移动、DC1、Channel1分别根据地区§、ISP(I)、数据中心(D)和频道©四个属性为候选值,其中P={p}P=\{p\}P={p}、I={i}I=\{i\}I={i}、D={d}D=\{d\}D={d}、C={c}C=\{c\}C={c} 分别为地区、ISP、数据中心和 ADS 频道的36、10、6、10个不同值的集合。 PPP 和 III 的值基于客户端 IP,并分别使用 IP 到地理定位数据库和 BGP 表进行解析。 每个地区的 ISP 都是一个独立的公司,因此相同的 ISP 名称在不同的地区往往表现不同。 渠道是不同广告市场的标签,如医疗或教育。 表2 显示了PV记录的一些示例。
在这里插入图片描述
不同属性值组合的向量在本文中称为元素(element),表示为 e=(p,i,d,c)e=(p,i,d,c)e=(p,i,d,c),其中 p∈Pp\in Pp∈P 或者 p=∗p = *p=∗, i∈Ii \in Ii∈I 或者 i=∗i = *i=∗, d∈Dd\in Dd∈D 或者 d=∗d = *d=∗, c∈Cc\in Cc∈C 或者 c=∗c = *c=∗, 这里的 ∗*∗ 是通配符,当e=(p,i,d,c)e=(p, i, d, c)e=(p,i,d,c)在每一个时间尺度(如本文中的尺度为每分钟)中,我们根据一个元素 eee 来计算 PV 记录的数目,并将这个数字称为该元素的 PV 值,用 v(e)v(e)v(e) 表示,即 v(e)=v(e)=v(e)= 在特定时间尺度上的#个记录。 表3 显示了与表2中的PV记录相对应的PV值。
在这里插入图片描述
所有这些最细粒度元素的集合,如表3 中的元素,用叶子表示: LEAF={e∣e=(p,i,d,c),p≠∗,i≠∗,d≠∗,c≠∗}\text{LEAF}=\{e|e=(p,i,d,c), p \neq*, i \neq *, d \neq * , c \neq * \}LEAF={e∣e=(p,i,d,c),p​=∗,i​=∗,d​=∗,c​=∗}。当一个或多个属性值为 * 时,其他元素都可以基于 Leaf 中的元素求和。例如,对于表 3 中 10:00(从10:00:00到10:00:59) 的三个元素,我们可以获得更粗粒度元素的值,例如:

v(Beijing, Mobile, DC1,∗)=2+1=3,v(Bei jing ,∗,∗,∗)=2+1+3=6.\begin{array}{c} v\left(\text { Beijing, Mobile, } D C_{1}, *\right)=2+1=3, \\ v(\text { Bei jing }, *, *, *)=2+1+3=6 . \end{array} v( Beijing, Mobile, DC1​,∗)=2+1=3,v( Bei jing ,∗,∗,∗)=2+1+3=6.​

根据聚集程度的不同,我们将元素划分为不同的集合,每个集合对应一个长方体。 长方体是数据立方体的子立方体,数据立方体是一种数据结构,允许在多维度上建模和查看数据[3],例如,叶的元素构成一个4-D数据立方体,如图所示 1. 长方体表示为 BiB_iBi​( iii 可以是 PPP、III、DDD 和 CCC 中的任意组合),例如,BPB_PBP​ 是一维长方体,BP,I,DB_{P,I,D}BP,I,D​ 是三维长方体。 长方体的元素集 BiB_iBi​ 用 E(Bi)E(B_i)E(Bi​) 来表示,比如,E(BP)={e∣e=(p,∗,∗,∗),p≠∗}E\left(B_{P}\right)=\{e \mid e=(p, *, *, *), p \neq *\}E(BP​)={e∣e=(p,∗,∗,∗),p​=∗},E(BP,I,D)={e∣e=(p,i,d,∗),p≠∗,i≠∗,d≠∗}E\left(B_{P, I, D}\right)=\{e \mid e=(p, i, d, *), p \neq *, i \neq *, d \neq *\}E(BP,I,D​)={e∣e=(p,i,d,∗),p​=∗,i​=∗,d​=∗},LEAF=E(BP,I,D,C)LEAF=E\left(B_{P, I, D, C}\right)LEAF=E(BP,I,D,C​)。

在这里插入图片描述

此外,我们构造长方体并为其标记层ID,如图所示 2. 另外,我们让 BPB_PBP​ 或 BIB_IBI​ 是 BPIB_{PI}BPI​ 的父长方体,BP,IB_{P,I}BP,I​ 是 BPB_PBP​ 或 BIB_IBI​ 的子长方体。 因此,长方体的元素都具有父子结点关系,比如 (p,∗,∗,∗)(∈E(BP))(p, *, *, *)\left(\in E\left(B_{P}\right)\right)(p,∗,∗,∗)(∈E(BP​)) 和 (p,i,∗,∗)(∈E(BP,I))(p, i, *, *)\left(\in E\left(B_{P, I}\right)\right)(p,i,∗,∗)(∈E(BP,I​))。
在这里插入图片描述
论文中使用 e′=(p′,i′,d′,c′)e^{\prime}=\left(p^{\prime}, i^{\prime}, d^{\prime}, c^{\prime}\right)e′=(p′,i′,d′,c′) 表示 e=(p,i,d,c)e=(p,i,d,c)e=(p,i,d,c) 的后代,其中 e≠e′e\neq e^{\prime}e​=e′,p′=pp^{\prime} = pp′=p 或者 p=∗p=*p=∗ ,i′=ii^{\prime} = ii′=i 或者 i=∗i=*i=∗ ,d′=dd^{\prime} = dd′=d 或者 d=∗d=*d=∗ , c′=cc^{\prime} = cc′=c 或者 c=∗c=*c=∗ 。Desc(e)={e′∣e′Desc(e)=\{e^{\prime} | e^{\prime}Desc(e)={e′∣e′ 是 eee 的后代 }\}},Desc′(e)={e′∣e′=(p,i,d,c)∈LEAF,p≠∗,i≠∗,d≠∗,c≠∗}{Desc}^{\prime}(e)=\{ e^{\prime} | e^{\prime} =(p,i,d,c) \in LEAF, p\neq *, i \neq *, d \neq *, c \neq *\}Desc′(e)={e′∣e′=(p,i,d,c)∈LEAF,p​=∗,i​=∗,d​=∗,c​=∗}。如果 e∈LEAFe \in LEAFe∈LEAF,PV 值 v(e)v(e)v(e)可以直接评估,否则

v(e)=∑e′∈Desc⁡′(e)v(e′)(1)v(e)=\sum_{e^{\prime} \in \operatorname{Desc}^{\prime}(e)} v\left(e^{\prime}\right) \tag{1} v(e)=e′∈Desc′(e)∑​v(e′)(1)

比如,

v(Beijing ,∗,∗,∗)=∑j,k,hv(Beijing ,ij,dk,ch)(2)v(\text { Beijing }, *, *, *)=\sum_{j, k, h} v\left(\text { Beijing }, i_{j}, d_{k}, c_{h}\right) \tag{2} v( Beijing ,∗,∗,∗)=j,k,h∑​v( Beijing ,ij​,dk​,ch​)(2)

Total PV=v(∗,∗,∗,∗)=∑i,j,k,hv(pi,ij,dk,ch)(3)\text { Total } P V=v(*, *, *, *)=\sum_{i, j, k, h} v\left(p_{i}, i_{j}, d_{k}, c_{h}\right) \tag{3}  Total PV=v(∗,∗,∗,∗)=i,j,k,h∑​v(pi​,ij​,dk​,ch​)(3)

20.3.3 问题陈述

addictive KPI(多维属性)异常定位问题是识别最有可能导致总KPI值异常变化的长方体及其元素。

为了陈述清楚这个问题,我们在表4 和 表5 中举了一个简单的例子。表4表示了一个2维属性 PV 结构。 存在两个一维长方体,BPB_PBP​和 BIB_IBI​,一个二维长方体 BPIB_{PI}BPI​。 每个长方体包含一组元素,即 E(BP)={Beijing,∗),(Shanghai,∗),(guangdong,∗)}E(B_{P})=\{Beijing,*),(Shanghai,*),(guangdong,*)\}E(BP​)={Beijing,∗),(Shanghai,∗),(guangdong,∗)},E(BI)={(∗,Mobile),(∗,Unicom)}E(B_I)=\{(*, Mobile),(*, Unicom)\}E(BI​)={(∗,Mobile),(∗,Unicom)} ,Leaf=E(BP,I)={(Beijing,Mobile),(Shanghai,Mobile),(guangdong,Mobine),(Beijing,Unicom),(Shanghai,Unicom),(Guangdong,Unicom)}Leaf=E(B_{P,I})=\{(Beijing,Mobile),(Shanghai,Mobile),(guangdong,Mobine),(Beijing,Unicom),(Shanghai,Unicom),(Guangdong,Unicom)\}Leaf=E(BP,I​)={(Beijing,Mobile),(Shanghai,Mobile),(guangdong,Mobine),(Beijing,Unicom),(Shanghai,Unicom),(Guangdong,Unicom)}。 v(p,i)v(p,i)v(p,i) 显示在表格的单元格中,例如 v(Beijing,Mobile)=20v(Beijing, Mobile)=20v(Beijing,Mobile)=20,v(Beijing,∗)=30v(Beijing, *)=30v(Beijing,∗)=30。
在这里插入图片描述
在这里插入图片描述

当总PV异常时,PV变化如表5所示。在每个单元格中,第一个数字是预测PV值 f(p,i)f(p, i)f(p,i),第二个数字是实际PV值 v(p,i)v(p,i)v(p,i)(如何检测总PV和计算元素的预测值将在 第四节 A 中介绍)。总 PV 的预测值为100,而实际 PV 值仅为75(表5的右下角)。因此,由于总PV的异常变化 v(∗,∗)=75v(*,*)=75v(∗,∗)=75 比触发异常定位的 f(∗,∗)=100f(*,*)=100f(∗,∗)=100 小得多,因此触发异常定位。

对于 BPB_PBP​ BIB_IBI​ 和 BP,IB_{P,I}BP,I​ 三个长方体,它们可以从不同的角度表达 PV KPI。当总PV发生异常变化时,这三个长方体中的每一个都受到影响。如表5所示,每个长方体(阴影细胞)中都有一些异常元素。 在现实中,操作员需要确定哪个长方体和这个长方体的哪些元素是这种异常的最潜在的根本原因。 然后他们可以开始尝试修复异常并减轻损失。 因此,对于可加性KPI的异常定位问题可以重述如下:

有效和高效地识别总KPI值异常的最潜在的根本原因,即 一个特定长方体 BiB_iBi​ 的元素子集。 根因集合 RSet⊆E(Bi)RSet \subseteq E\left(B_{i}\right)RSet⊆E(Bi​)。

注意,这个定义允许在同一个长方体中的多个元素作为根本原因集。 例如,表5 中示例的根本原因集是 RSet={(Beijing ,∗),(Shanghai ,∗)}RSet =\{(\text { Beijing }, *),(\text { Shanghai }, *)\}RSet={( Beijing ,∗),( Shanghai ,∗)} 。但这一定义排除了多个长方体同时存在根源的情况,这在现实中极为罕见。 还要注意,我们只处理总KPI值异常的情况。

20.4 核心思路

论文提出了潜在得分(Potential Score)作为度量函数,并应用蒙特卡罗树搜索(MCTS)算法和分层剪枝策略克服了搜索空间过大的问题。

20.4.1 评估数据集中的潜在得分 Potential Score for measuring the potential of sets

在我们的异常定位问题中,一个可以用来“全局”比较不同元素集的根本原因“潜力”的度量。 然而,正如第一个挑战所示,这样的度量并不容易开发,简单的度量也不起作用。

我们对这个潜在得分的想法是基于以下直觉:当根原因元素的KPI值发生变化时,它的所有后代叶元素的KPI值也相应地发生变化。 因此,候选根本原因元素的“潜在得分”是用来衡量该元素的后代叶元素的预期变化和实际变化之间的差异。 详见§IV-B2。 另外,MCTS需要潜在分数作为一个价值函数来指导搜索。

20.4.2 高效搜索的MCTS和分层剪枝 MCTS and Hierarchical Pruning for efficiently searching

该问题的搜索空间巨大,需要一种有效的搜索算法。 本文的思路是采用一些已知的善于在大空间中搜索的先进算法,而不是像文献 [1]、[2] 那样在小得多的搜索空间中用它们更简单的异常定位来发展有机的启发式算法。 受 AlphaGo 在围棋中成功采用 MCTS 算法文献[4]、[5]的启发,本文的核心思想是将 MCTS 算法作为异常定位算法的基础。 然而,在采用 MCTS 方面仍然存在一个剩余的挑战,我们现在总结我们的核心思想来解决这些问题。

来自图 2我们可以看到,当我们从低层到高层时,长方体中元素 nnn 的数量变得越来越多。例如,在 BPB_PBP​ 中有36个元素,BP,IB_{P,I}BP,I​ 中有 36∗1036*1036∗10, BP,I,D,CB_{P,I,D,C}BP,I,D,C​ 中有 36∗10∗6∗1036*10*6*1036∗10∗6∗10。回想根本原因集是长方体的(2n-1)个子集之一。 即使对MCTS来说,搜索如此巨大的空间也不是一件容易的事情。

为了进一步缩小搜索空间,Hotspot 采用了分层剪枝策略。 基本思想是,在搜索较低层之后,HotSpot 会剪除一些不太可能是根本原因元素的元素(在较高层)。 直觉是,如果父元素有一个非常低的潜在得分,每个子元素不太可能是根本原因元素,因此可以剪枝。 这种方法在精神上与关联规则挖掘中的Apriori原理非常相似[3]。 我们称我们的剪枝方法为层次剪枝,因为它的剪枝策略利用了层的层次信息。

20.4.3 总体办法 Overall Approach

HotSpot的核心思想概括如下。 我们把这种异常定位看作是一个空间很大的搜索问题; 采用MCTS作为基本搜索算法; 提出了一个对异常定位具有物理意义的潜在得分度量作为每一集合的潜在度量和MCTS中的值函数; 应用分层剪枝方法(类似于Apriori原则)来减少搜索空间。 搜索从第1层开始,逐层进行,在每个长方体内应用MCTS,如图所示 3.

在这里插入图片描述

20.5 HotSpot 的设计

本部分介绍了Hotspot的详细设计。 HotSpot逐层搜索长方体的集合,即从第1层到第L层(L为层数)。 对于给定层的每一个长方体,Hotspot应用MCTS寻找其具有最大潜在得分(PS)的子集,称为该长方体的最佳集(缩写为BSet)。 当从一层到下一层时,使用分层剪枝。我们重复这个过程,直到层 LLL 被搜索,或者得到根本原因集RSetRSetRSet (ps(RSet)>PTps(RSet) > PTps(RSet)>PT),其中 PTPTPT 是指 pspsps 的阈值。当 ps>PTps > PTps>PT 时,我们认为它足够大,可以被视为根本原因集。最终输出 RSetRSetRSet 是算法生成的所有 BSetBSetBSet 中 pspsps 最大的 BSetBSetBSet 。接下来,我们描述一种检测总KPI和预测本节中元素的方法。 然后给出了热点的各个组成部分,即潜在得分、MCTS和分层剪枝。

20.5.1 异常检测与预报 Anomaly Detection and Forecast

HotSpot 需要一个异常检测算法(1)来检测总KPI中的异常,算法(2)来计算其他元素的预测值。

我们采用了业界广泛使用的统计算法对总KPI进行异常检测文献 [6]。 均值 μ\muμ 和标准差 σ\sigmaσ 在一个周期中一个时间间隔进行计算(在我们的案例中间隔为 1 分钟),其中的 μ\muμ 被视为预测值。阈值( TlT_lTl​和T_u分别代表下限和上限)定义如下:

Tl=μ−c×σ,Tu=μ+c×σ(4)T_l = \mu - c \times \sigma ,\ T_u = \mu + c \times \sigma \tag{4} Tl​=μ−c×σ, Tu​=μ+c×σ(4)
其中 ccc 是确定上下限的程度的参数(通常设置为2.0)参考文献 [6]。请注意,阈值是定期更新的。 如果实际值超过阈值,则检测异常。 该算法适合于我们的场景,因为1)它非常适合于 addictive KPI数据,因为大多数加性KPI数据是周期性的;2)它计算效率高。

20.5.2 潜在得分 Potential Score

在这里插入图片描述
(1) 波纹效应(Ripple effect):我们在表VI中使用了一个新的异常案例来说明根本原因元素的KPI变化是如何根据我们总结的“涟漪效应”传播到其他元素的。(Beijing,∗)(Beijing, *)(Beijing,∗) 的 PV 值从 30(f(Beijing,∗)f(Beijing, *)f(Beijing,∗))下降到 12,并且 (Beijing,∗)(Beijing, *)(Beijing,∗) 是本例中唯一一个 根因元素(其他的没有变化)。由于 v(Beijing,∗)v(Beijing,*)v(Beijing,∗) 是由它的后代元素 v(Beijing,Mobile)v(Beijing,Mobile)v(Beijing,Mobile) 和 v(Beijing,Unicom)v(Beijing, Unicom)v(Beijing,Unicom) 聚合而成的,它们一定发生了相应的变化。 注意它们的变化值,h(Beijing,∗)=18h(Beijing, *) =18h(Beijing,∗)=18,h(Beijing,Mobile)=12h(Beijing, Mobile)=12h(Beijing,Mobile)=12,h(Beijing,Unicom)=6h(Beijing, Unicom) = 6h(Beijing,Unicom)=6。我们通过公式 f(Beijing,Mobile)−h(Beijing,∗)×f(Beijing,Mobile)f(Beijing,∗)f(Beijing, Mobile)- h(Beijing,*)\times \frac{f(Beijing, Mobile)}{f(Beijing, *)}f(Beijing,Mobile)−h(Beijing,∗)×f(Beijing,∗)f(Beijing,Mobile)​ 可以得出实际值 v(Beijing,Mobile)=8v(Beijing, Mobile)=8v(Beijing,Mobile)=8 的比例份额。此外,h(Beijing,Mobile)h(Beijing, Mobile)h(Beijing,Mobile) 反过来也促进了 vvv 的变化 v(∗,Mobile)v( *, Mobile)v( ∗,Mobile)。

上面的示例说明了根本原因元素是如何影响其后代元素(在LEAF中)和其他共享其共同后代元素的元素的。通常,当根本原因元素的值增加或减少时,它遵循如下波动效应特性:

设 xxx 表示不在 LEAFLEAFLEAF 中的元素,即 x∉LEAFx \notin LEAFx∈/​LEAF。设 xi′x_{i}^{\prime}xi′​ 表示 xxx 在 LEAFLEAFLEAF 中的后代元素,即 xi′∈Desc′(x)x_{i}^{\prime} \in {Desc}^{\prime}(x)xi′​∈Desc′(x)。当 xxx 的 PV 值通过 h(x)h(x)h(x) 改变以后,即 h(x)=f(x)−v(x)h(x)=f(x)-v(x)h(x)=f(x)−v(x), xi′x^{\prime}_ixi′​ 将根据他们的预测值的比例得到其 h(x)h(x)h(x) 的份额,即,

v(xi′)=f(xi′)−h(x)×f(xi′)f(x),(f(x)≠0).(5)v\left(x_{i}^{\prime}\right)=f\left(x_{i}^{\prime}\right)-h(x) \times \frac{f\left(x_{i}^{\prime}\right)}{f(x)},(f(x) \neq 0) . \tag{5} v(xi′​)=f(xi′​)−h(x)×f(x)f(xi′​)​,(f(x)​=0).(5)

然后使用 公式 1 更新 xi′x_{i}^{\prime}xi′​ 祖先的所有其他元素 eee。上面的涟漪效应描述了根本原因只包含一个元素的情况。 当涉及到一个集合(两个或多个元素)时,我们可以为每个元素重用该属性。

(2) 潜在得分(Potential Score): 涟漪效应揭示了根本原因集如何影响许多其他元素的值。 因此,为了衡量一个集合的潜在性是根本原因,我们建议1)假设集合 SSS 是根本原因,2) 根据波纹效应推导叶中后代元素的新PV值,3) 将所有实际PV值与新推导的叶元素PV值进行比较。 两种值越接近,该集合就越有可能成为根本原因集。

设 y1,y2,y3,…,yny_{1}, y_{2}, y_{3}, \ldots, y_{n}y1​,y2​,y3​,…,yn​ 表达 LEAFLEAFLEAF 中所有元素。我们用 a(yi)a(y_i)a(yi​) 表示一个假定的根因集 SSS 的新推导的 PV 值。我们计算两种条件下的 a(yi)a(y_i)a(yi​) 的值:

  • S⊈LEAFS \nsubseteq LEAFS⊈LEAF: 如果 yi∉Desc′(S)y_i \notin {Desc^{\prime}}(S)yi​∈/​Desc′(S),a(yi)=f(yi)a(y_i) =f(y_i)a(yi​)=f(yi​) ;否则,根据公式5计算 a(yi)a(y_i)a(yi​) 的值。
  • S⊆LEAFS \subseteq LEAFS⊆LEAF: 如果 yi∉Desc′(S)y_i \notin {Desc^{\prime}}(S)yi​∈/​Desc′(S),a(yi)=f(yi)a(y_i) =f(y_i)a(yi​)=f(yi​) ;否则,a(yi)=v(yi)a(y_i)=v(y_i)a(yi​)=v(yi​)

设 a⃗\vec{a}a 表示 a(yi)a(y_i)a(yi​) 组成的向量,即 a⃗=[a(y1),a(y2),…,a(yn)]\vec{a} = [a(y_1), a(y_2), \ldots ,a(y_n)]a=[a(y1​),a(y2​),…,a(yn​)]。类似地,设 v⃗=[v(y1),v(y2),…,v(yn)]\vec{v} =[v(y_1), v(y_2), \ldots ,v(y_n)]v=[v(y1​),v(y2​),…,v(yn​)], f⃗=[f(y1),f(y2),…,f(yn)]\vec{f}=[f(y_1), f(y_2), \ldots ,f(y_n)]f​=[f(y1​),f(y2​),…,f(yn​)]。

接着我们定义集合 SSS 的潜在得分(Potential Score, ps)为:
PotentialScore=max⁡(1−d(v⃗,a⃗)d(v⃗,f⃗),0)(6)Potential Score =\max \left(1-\frac{d(\vec{v}, \vec{a})}{d(\vec{v}, \vec{f})}, 0\right) \tag{6} PotentialScore=max(1−d(v,f​)d(v,a)​,0)(6)
其中,d(u⃗,w⃗)d(\vec{u}, \vec{w})d(u,w) 表示向量 u⃗\vec{u}u 和 w⃗\vec{w}w 之间的距离。这里我们采用欧几里得距离:

d(u⃗,w⃗)=∑i(ui−wi)2(7)d(\vec{u}, \vec{w})=\sqrt{\sum_{i}\left(u_{i}-w_{i}\right)^{2}} \tag{7} d(u,w)=i∑​(ui​−wi​)2​(7)

集合的潜在得分范围为0~1,即[0,1]。 如果一个集合有更高的得分,它将被认为有更高的潜力成为根本原因。

上述潜在分数的定义是“全局”的,即任意两个元素集都可以比较它们的潜在分数,以确定哪一个具有更大的潜在分数。 这在MCTS中起到了很好的价值函数的作用。

当两个元素集具有相同的潜在得分时,我们遵循一个“简洁”原则。 也就是说,元素数目较少的元素获胜,要么遵循奥卡姆剃刀原理[1],要么因为一个集合中的元素集体是另一个集合中的元素的祖先(首选为根本原因)。

(3) 一个示例:现在我们说明如何根据 表5 中案例的潜在得分来找到根本原因。长方体由 BpB_pBp​,BIB_IBI​ 和BP,IB_{P,I}BP,I​ 组成。 首先会找到每个长方体的最佳集合(这个长方体潜在得分最大的子集)。 接下来,我们通过比较最佳集合来选择根本原因集合。 y⃗\vec{y}y​ 按照如下顺序代表:[(Bei jing;Mobile); (Shanghai;Mobile); (Guangdong;Mobile); (Bei jing;Unicom); (Shanghai;Unicom); (Guangdong;Unicom )],f⃗=(20,15,10,10,25,20)\vec{f}=(20,15,10,10,25,20)f​=(20,15,10,10,25,20),v⃗=(14,9,10,7,15,20)\vec{v}=(14,9,10,7, 15, 20)v=(14,9,10,7,15,20)。对于长方体 BPB_PBP​,它包含三个元素(Beijing,*)、(Shanghai,*)和 (Guanguone,*),所以所有的子集都是 Sp1={(Beijing,∗)}S_{p1}=\{(Beijing,*)\}Sp1​={(Beijing,∗)},Sp2={(Shanghai,∗)}S_{p2}=\{(Shanghai,*)\}Sp2​={(Shanghai,∗)},Sp3={(Guangdong,∗)}S_{p3}=\{(Guangdong,*)\}Sp3​={(Guangdong,∗)},KaTeX parse error: Expected '}', got 'EOF' at end of input: …,(shanghai,*)\},Sp5={(Beijing,∗),(guanguon,∗)}S_{p5}=\{(Beijing,*),(guanguon,*)\}Sp5​={(Beijing,∗),(guanguon,∗)},Sp6={(Shanghai,∗),(guanguon,∗)}S_{p6}=\{(Shanghai,*),(guanguon,*)\}Sp6​={(Shanghai,∗),(guanguon,∗)} 和 Sp7={(Beijing,∗),(shanghai,∗),(guanguon,∗)}S_{p7}=\{(Beijing,*),(shanghai,*),(guanguon,*)\}Sp7​={(Beijing,∗),(shanghai,∗),(guanguon,∗)}。 以集合 Sp1S_{p1}Sp1​ 为例,根据公式 5 我们可以推导出 a⃗(Sp1))=(14,15,10,7,25,20)\vec{a}(S_{p1})) =(14,15,10,7,25,20)a(Sp1​))=(14,15,10,7,25,20),从而可以计算 ps(Sp1)=0.13.ps(S_{p1})=0.13.ps(Sp1​)=0.13.。实际上,我们可以发现 Sp4S_{p4}Sp4​ 和 Sp7S_{p7}Sp7​ 都有最大的 pspsps 值,ps(Sp4)=ps(Sp7)=1ps(S_{p4})=ps(S_{p7})=1ps(Sp4​)=ps(Sp7​)=1。 总而言之,Sp4S_{p4}Sp4​ 是 BpB_pBp​ 中最好的集合。类似地,可以得到 BIB_IBI​ 和 BP,IB_{P,I}BP,I​ 中的最佳集合,Si3={(∗,Mobile),(∗,Unicom)}S_{i3}=\{(*, Mobile), (*, Unicom)\}Si3​={(∗,Mobile),(∗,Unicom)},ps(Si3)=0.47ps(S_{i3})=0.47ps(Si3​)=0.47(a⃗(Si3)=(14,9,10,7,15,20)\vec{a}(S_i3)=(14,9,10,7,15,20)a(Si​3)=(14,9,10,7,15,20)),Spi1={(Beijing,Mobile),(Beijing,Unicom),(Shanghai,Mobile),(Shanghai,Unicom)}S_{pi1}=\{(Bei jing,Mobile), (Bei jing,Unicom), (Shanghai,Mobile), (Shanghai,Unicom)\}Spi1​={(Beijing,Mobile),(Beijing,Unicom),(Shanghai,Mobile),(Shanghai,Unicom)},ps(Spi1)=1ps(S_{pi1})=1ps(Spi1​)=1(a⃗(Spi1)=(14,9,10,7,15,20)\vec{a}(S_{pi1})=(14,9,10,7,15,20)a(Spi1​)=(14,9,10,7,15,20))。比较三个最优集,Sp4S_{p4}Sp4​ 是 pspsps 最大、最简洁的结果集。

上面的例子说明了我们使用潜在分数来识别根本原因集的核心思想。 实际上,元素太多了,所以可能的集合数量非常大,尤其是在较高层的长方体中。 为了解决这个问题,我们采用了MCTS算法和层次剪枝策略,这将在下面介绍。 同时,利用这两种方法可以得到简洁的结果。

20.5.3 MCTS 算法

对于给定的长方体 BBB,我们想要获得最佳集(这个长方体潜在得分最大的子集)。 假定 E(B)E(B)E(B) 中有 nnn 个元素。 在B中对根原因集的搜索空间是2n-1,对于大 nnn 来说,这显然是非常大的。 HotSpot 采用 MCTS 主要是为了应对搜索空间爆炸的挑战。

MCTS是一种启发式方法,通过在决策空间中抽取随机样本,根据已有的随机样本的结果建立搜索树,在给定的决策域中搜索最优决策。 在很高的层次上,MCTS试图平衡沿着那些有希望的分支的开发和沿着那些未被开发的分支的开发。 它在人工智能(AI)领域被广泛应用于可以表示为顺序决策树的领域,特别是游戏和规划问题[4],如 AlphaGo[5]。

在MCTS中,每个节点代表一个状态 SSS(根可以看作是️ ∅\varnothing∅)。 一个行动空间 A(S)A(S)A(S) 包含在 SSS 上可以采取的所有法律行动。 通过采取合适的行动,算法可以经过路径 (s,a)(s, a)(s,a) 从一个状态 sss 移动到另外一个,记作 a∈A(s)a \in A(s)a∈A(s)。可以有与边相关联的变量,算法使用这些变量来指示在状态 sss 采取行动 AAA 的 “value”。

我们采用MCTS来解决长方体的异常定位问题,如下所示。 我们首先对这个长方体中的每个 eee 计算 ps(e)ps(e)ps(e) ,并根据 ps(e)ps(e)ps(e) 对所有 eee 进行排序。每个状态 sss 对应于当前正在探索的候选根本原因集 S(s)S(s)S(s)。N(s)N(s)N(s) 是 sss 被访问的次数。 我们为每个边 (s,a)(s,a)(s,a) 设置三个变量。N(s,a)N(s,a)N(s,a) 是访问计数,即该边(s,a)被访问的次数。 ps(S(s))ps(S(s))ps(S(s)) 是集合 S(s)S(s)S(s) 的得分。 假定 SSS 在 (S,A)(S,A)(S,A) 之后跃迁到 S′S^\primeS′。 则边 (S,A)(S,A)(S,A) 的作用值 Q(s,a)=max⁡u∈{s′}∪descendent (s′)ps(S(u))Q(s, a)=\max _{u \in\left\{s^{\prime}\right\} \cup \text { descendent }\left(s^{\prime}\right)} p s(S(u))Q(s,a)=maxu∈{s′}∪ descendent (s′)​ps(S(u)),该作用值等于树中 S′S^{\prime}S′ 及其子节点的最大潜在得分。 对于每个 SSS 将 Q(s,a)Q(s, a)Q(s,a) 初始化为 PS(S(s))PS(S(s))PS(S(s))。

在这里插入图片描述
现在我们来说明MCTS迭代在我们的异常定位中的四个步骤。 假设在当前迭代开始时,状态树如图所示 4(a)。

(a) 选择 此步骤的目标是从当前状态树中选择一个要展开的节点。 每次执行此步骤时,树遍历总是从根状态开始。 假设在这个选择步骤中我们已经前进到当前状态 sss。如果 A(s)A(s)A(s) 中的所有动作都在以前的迭代中被访问过,则通过使用上限置信阈值(Upper Confidence thresholds, UCB)算法 [7],从可用动作 A(s)A(s)A(s) 的集合中选择动作 aaa,如公式8所示。

a=arg⁡max⁡a∈A(s){Q(s,a)+Cln⁡N(s)N(s,a)}.(8)a=\underset{a \in A(s)}{\arg \max }\left\{Q(s, a)+C \sqrt{\frac{\ln N(s)}{N(s, a)}}\right\} . \tag{8} a=a∈A(s)argmax​{Q(s,a)+CN(s,a)lnN(s)​​}.(8)

Q(s,a)Q(s,a)Q(s,a) 是采取移动 aaa 的值。 Q(s,a)Q(s,a)Q(s,a) 值越高,在该选择步骤中选择移动 aaa 的机会越大,这是 MCTS 中的利用机制。 等式的第二部分只是用于探索的标准 UCB 机制。 可以通过修改 CCC 来改变利用与研究(exploitation and exploration)之间的平衡,一个常用的 CCC 值是 2\sqrt{2}2​ 文献[8],我们在本文中选择这个值,也可以在实践中根据经验选择这个值。

如果存在根本没有被用过的动作 a∈A(s)a \in A(s)a∈A(s),因为 N(s,a=0N(s, a=0N(s,a=0 所以不能应用公式 8 。相反,我们将采取未访问操作的概率指定为 R=(1−Q(s,amax))R=(1-Q(s,a_{max}))R=(1−Q(s,amax​)),其中 amax=arg max⁡a∈A(s)∩N(s,a)=0Q(s,a)a_{max} = \argmax_{a\in A(s)\cap N(s,a)=0}Q(s,a)amax​=a∈A(s)∩N(s,a)=0argmax​Q(s,a)。

选择步骤从树的根部开始,并在根据公式8选择叶子状态时停止或者选择一个未访问的动作。比如,在图4(a) 中的实线包含的部分,选择叶状态 {e1,e3}\{e_1,e_3\}{e1​,e3​} 时停止选择。

(b) 扩展 在选择步骤中选择状态 SSS 之后,我们通过添加一个新节点 S′S^\primeS′ 来扩展蒙特卡罗树, 其中 S(s′)=S(s)∪{e∗}S\left(s^{\prime}\right)=S(s) \cup\left\{e^{*}\right\}S(s′)=S(s)∪{e∗} ,e∗=arg⁡max⁡e∈{e1,e2,…,en}−S(s)ps(e)e^{*}=\arg \max _{e \in\left\{e_{1}, e_{2}, \ldots, e_{n}\right\}-S(s)} p s(e)e∗=argmaxe∈{e1​,e2​,…,en​}−S(s)​ps(e)。 我们选择 e∗e^{*}e∗使其具有剩余元素中最大的 ps(s)ps(s)ps(s) 值,而不是随机选择 e∗e^{*}e∗。比如,在图4(b)中,S(s)={e1,e3}S(s)=\{e_1,e_3\}S(s)={e1​,e3​} 被选中后,e∗=e4e^{*}=e_4e∗=e4​ 会被添加,得到 s′s's′ ,并且 S(s′={e1,e3,e4}S(s'=\{e_1,e_3,e_4\}S(s′={e1​,e3​,e4​}。

( c ) 评估 为了初始化扩展后的新节点(如图4©中的 {e1,e3,e4}\{e_1,e_3,e_4\}{e1​,e3​,e4​}),我们计算其 pspsps,QQQ 和 NNN。

(d) Backup 从 S′S^{\prime}S′ 到根的路径上的所有节点上的动作值 QQQ 和访问计数 NNN 都将更新,如图4(d) 中的粗体箭头所示,回想 QQQ 的定义,沿着这条路径,我们只有当子节点的 QQQ 大于父亲的 QQQ 时才更新父亲的 QQQ。

在长方体中本地化根本原因集。 我们在每个长方体中应用MTCS,对此我们迭代执行上述四个步骤,直到至少出现以下三个条件之一:

  1. 找到了一个最佳集合,即如果 ps(S)≥PTps(S)\ge PTps(S)≥PT,满足条件 BSet=SBSet=SBSet=S;
  2. 对集合的所有可用节点进行扩展;
  3. 迭代时间大于经验配置的最大数 MMM。

在第二个终止条件和第三个终止条件下,如果我们没有得到一个 PSPSPS 大于 PTPTPT 的集合,我们将返回 PSPSPS 最大的 BSetBSetBSet 作为RSetRSetRSet。

20.5.4 分层剪枝 Hierarchical Pruning

为了进一步减少高层长方体的搜索空间,Hotspot采用了分层剪枝策略。 其基本思想是,Hotspot 逐层搜索长方体,即从第1层到第 LLL 层,在搜索到较低的一层后,在较高的一层中剪除一些不太可能是根本原因的元素。

对于层 LLL ( 1≤l≤L1\leq l \leq L1≤l≤L) 中的每一个长方体 BBB,利用 MCTS 算法可以得到最优集(该长方体潜在得分最大的子集)BSetl,B{BSet}_{l,B}BSetl,B​。 我们的直觉如下。 如果 l+1l+1l+1 层中的一个元素 (p1,i1,∗,∗)(p_1,i_1,*,*)(p1​,i1​,∗,∗) 具有较高的潜在得分,那么它在 lll 层中的父元素 (P1,∗,∗,∗)(P_1,*,*,*)(P1​,∗,∗,∗) 和 (∗,i1,∗,∗)(*,i_1,*,*)(∗,i1​,∗,∗) 也将具有相对较高的潜在得分。 因此,如果父元素的潜在得分很低,那么每个子元素都不太可能是根本原因元素,尽管可能有很少的情况,子元素 aaa 的潜在得分确实高于其父元素,但其他一些子元素 bbb 的 PV 变化抵消了aaa 对父元素潜在得分的影响。 因此,如果层 lll 中的一个元素不在 BSetl,bBSet_{l,b}BSetl,b​ 中,HotSpot会选择剪除它的所有子元素。 这种方法在思路上与关联规则挖掘中的Apriori原理非常相似[3]。 我们称我们的剪枝方法为层次剪枝,因为它的剪枝策略利用了层的层次信息。

在这里插入图片描述

我们以表7中的一个例子来说明我们在图5的分层剪枝方法。假设我们在第1层,使用 MCTS 获得的最佳集合是 BSet1,BP={(Fujian,∗),(Jiangsu,∗)}BSet_{1,B_P}=\{(Fujian,*),(Jiangsu,*)\}BSet1,BP​​={(Fujian,∗),(Jiangsu,∗)} 和 ps(BSset1,Bl={(∗,Mobile),(∗,Unicom)}ps(BSset_{1,B_l}=\{(*,Mobile),(*, Unicom)\}ps(BSset1,Bl​​={(∗,Mobile),(∗,Unicom)} 其中,ps(BSset1,Bl=0.32ps(BSset_{1,B_l}=0.32ps(BSset1,Bl​​=0.32 。 在第2层搜索长方体时,由于元素 (Zhejiang,Unicom)(Zhejiang, Unicom)(Zhejiang,Unicom) 和 (Zhejiang,Unicom)(Zhejiang, Unicom)(Zhejiang,Unicom) 的父元素 (Zhejiang,∗)(Zhejiang, *)(Zhejiang,∗) 不在第1层的 BSets 中,所以我们对元素(Zhejiang,Unicom)(Zhejiang, Unicom)(Zhejiang,Unicom) 进行剪枝。 因此,我们只需要搜索剩下的四个元素来寻找 BP,IB_{P,I}BP,I​。 这样,潜在集的数量将从 63 减少到 15(26−12^6-126−1 到 24−12^4-124−1)。 然后在第2层再次使用MCTS,得到 RSet=BSet2,BP,I={(Fujian,Mobile),(Jiangsu,Unicom)}RSet=BSet_{2,B_{P,I}}=\{(Fujian, Mobile),(Jiangsu,Unicom)\}RSet=BSet2,BP,I​​={(Fujian,Mobile),(Jiangsu,Unicom)},其中ps(BSet2,BP,I)=1ps(BSet_{2,B_{P,I}})=1ps(BSet2,BP,I​​)=1。

在这里插入图片描述

20.5.5 算法总览

我们现在总结我们的总体热点算法,其伪代码如算法1所示。 HotSpot以元素的 PV 值、潜在阈值 PTPTPT 和最大迭代次数 $M作为输入。 它从第1层开始,对于给定层的每个长方体,Hotspot应用MCTS来找到其最佳集合。 当从一层到下一层时,使用分层剪枝。 我们重复这个过程,直到搜索到层 LLL,或者得到根本原因集 Rset(Ps(Rset)>PT)Rset(Ps(Rset)>PT)Rset(Ps(Rset)>PT)。 最终输出的 RSetRSetRSet 是算法生成的所有 BSetBSetBSet 中PSPSPS 最大的 BSetBSetBSet。
在这里插入图片描述
算法步骤描述清晰,代码中还添加了注解,容易理解,这里不复介绍。

20.6 实验部分

论文源码未公开,目前只能在 github 上找到一个相关的代码可以参考一下,https://github.com/junkfei/Multidimensional_root_cause_analysis/tree/4bf4865e8f633e88f3af91f684bbb12ac24d471c

代码并非论文源码,仅供参考。

20.7 总结

论文强调的是如何找到异常原因,并且定位到异常发生根因。这个与我们之前提到的论文均不相同,但这类型的算法是非常有意义的。工业场景下异常发生后除了及时修复问题,减少异常带来的损失,还应该定位到哪个步骤出了问题,并不断总结,优化常常出问题的步骤。

所以如果在其他方向上找不到可以发论文的点,不妨考虑这个方向。

没能找到合适的代码,给各位小伙伴们道歉 ~ 不过希望读者查查资料,了解论文原理,并且想想自己是否可以参考这个思路进行创新,创造属于自己的可靠方法。

Smileyan
2022.11.30 22:57

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...