前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >指标异常监控与告警根因分析

指标异常监控与告警根因分析

作者头像
腾讯云可观测平台
发布2021-05-14 10:40:32
4K0
发布2021-05-14 10:40:32
举报

作者:马蕾,腾讯高级工程师

前言

我们在日常工作中,做了很多线上指标统计。统计线上指标的意义,在 AB 阶段是评估算法效果收益,在全量上线后是监控线上服务质量,及时发现并定位解决问题。做指标往往并不难,但是做完指标之后,对指标的监控,经常被大家忽视。当发现指标异常之后,对根因的定位很困难。尤其是涉及多个团队的综合指标,经常需要为了定位根因拉齐后台,客户端,产品各个方向的骨干成员,讨论若干次才能有结论。本文主要分享在指标的监控和告警分析的一些经验,如何提升告警发生后的根因分析效率。

近期部门在大力推广数字化,各个业务的报表都统一到 Grafana 平台展示。报表展示只是一个开始,更重要的是对指标的监控和分析。本文总结了之前在指标异常监控和指标告警分析的一些经验,主要包括三个部分:

第一部分是总结指标监控时遇到的问题,常用的指标展示平台对告警的支持情况,如何合理的设置告警阈值;

第二部分是总结指标异常分析时遇到的问题,对如何提升根因分析效率的思考;

第三部分是如何在指标展示平台上设计页面的思考总结。

指标异常监控

01

Grafana 对告警的支持

Grafana 的多种图表都支持设置告警。设置告警的字段是 Thresholds。支持设置上限和下限阈值。阈值只支持输入数字,不支持用页面的变量。

设置完成后,可以在图表中展示设置的阈值,如下图中的红线:

缺点:平台本身不带告警通知的功能,需要自行搭建。

02

如何自动设置告警阈值

前两个平台除了上述提到的问题,还有一个问题是只支持设置固定的阈值。固定阈值需要经常人工调整。比如我们有的业务指标,在不断优化,过一段时间,之前的阈值就不合适了,需要及时调整,才能保证及时告警。另外,有的指标是隔天产生,有的是隔两天产生,不同指标检查是否有数据需要往前算的天数不同。为了解决这些问题,实际告警监控是在服务器上实现的,没有通过平台。

为了解决告警阈值不断调整的问题,我将原来的固定上下限的阈值设置改为根据上一周数据动态设置上下限,这样阈值设置就可以一劳永逸,不用再管。

假设指标的波动服从正态分布,采用 3σ- 准则(3sigma 准则),自动计算告警阈值替代人工设置阈值。这里的 σ 是标准差的意思。3σ- 准则意味着 99.74 % 的值降落在(μ-3σ,μ+3σ), μ 是平均值,当监控到指标不在这个区间,则极大概率是异常发生了。

3σ 是业界常用的检测范围,可以根据实际的需要做调整,比如改成 2σ,则代表大约 95.4% 的值落在这个区间内。

标准差也可以通过 Excel 来计算,函数名是 STDEVP,参数是行或列数据。计算出标准差和平均值后,平均值 +-3 倍标准差就是阈值范围。

指标的波动还有周期性特点,比如有的指标周末偏高或偏低,大部分指标在大的节假日和平时表现也不太一样。这种周期性的波动,不是业务变化带来的,未来可以考虑从指标波动中把这些周期性波动去掉,比如采用 STL 时序分解。

告警根因分析

01

告警根因分析的难点

告警只是第一步,更重要的是告警后的分析处理。事实上,业务指标受很多因素影响,当告警发生时,常常把所有相关人员拉到一起分析,定位根因的过程非常耗费人力和时间。比如去年偏航指标发生过一次异常,拉了 20 多人群,包含各个业务的产品研发总监,组长以及主力员工,讨论了一个多星期才得到结论。

案例 1  偏航指标异常

02

指标梳理

经过多次指标异常分析发现,大家讨论最耗时的是指标异常归属到哪个团队,第一步是区分客户端还是后台,第二步要分析是哪个具体业务。以导航的偏航指标为例,可以做如下拆解,拆解过程要尽量满足 MECE 原则。

首先,偏航的指标主要受客户端和后台两个因素影响,通常指标有异常时,至少一方有变化(节假日波动除外)。

其次,偏航率 = 偏航的导航次数 / 导航次数;平均偏航次数 = 偏航次数 / 偏航的导航次数;偏航指标发生异常时,分子和分母至少有一个有变化,对于案例 1 的异常来说,是分子偏航次数明显增加了。分子偏航又可以分为三类,正常偏航,bound,驳回。

梳理完指标相关的因素后,是否能通过指标数据分析到异常是什么带来的呢?答案是可以的,通过指标之间的相关性分析和对指标下钻分析,可以得到初步分析结果,然后直接找对应的研发和产品就行,不需要拉大群讨论了。

03

指标相关性分析

首先,可以用相关性分析,确定指标异常和客户端发版是否有相关关系,如果没有相关关系,可以排除客户端,继续分析后台服务。如果和客户端有极强的相关性,那么先找客户端研发和产品分析,确认指标异常是否和本次发版的某些代码修改或产品需求有关。

第一种相关性分析方法:图形观测法

通过曲线图判断两者是否存在一定相关关系。如果两个曲线升降的日期一致,曲线趋势一致,那么可以认为有相关关系。

比如如下两个图,第一个指标平均偏航次数异常了,这时为了判断和客户端发版是否有关,可以观察客户端各个版本的量和平均偏航次数指标是否有相关关系。下图很明显,客户端深蓝色版本的曲线和平均偏航次数的曲线上升下降趋势完全一致。因此可以初步判定和客户端发版有关。

案例 1  偏航指标异常,和客户端发版对比

特别要注意的是:相关关系≠因果关系

发现相关关系之后,还需要进一步分析其背后的原因,才能最终确定是否有因果关系。比如有时后台异常和客户端发版时间点比较接近,这时观察曲线看上去好像是相关的,所以需要注意每一个涨跌是否一致,并且注意相关指标涨跌背后对应数据的数量,如果数量级对不上,那么可能就没有因果关系。比如下图:

案例 2  驳回指标异常

这两组指标曲线,初步分析的时候,会发现驳回指标从 13 号左右开始异常上涨,这个时间和 IOS 新版本发布时间差不多。如果不进一步分析,容易得出 IOS 发版影响了驳回指标的错误结论。

再往后看,会发现第一张图的驳回绿色曲线在 19 号之后还有一波上涨,而红色曲线 19 号之后开始下降,可以知道两者其实无因果关系。除了看长期趋势,将驳回指标下钻,进行分平台统计,可以通过上涨的数量看出,驳回的上涨和 IOS 发版无关。

如果你的指标经常受客户端发版本影响,那么可以增加一个报表,将指标按照客户端版本这个维度进行下钻,这样下钻分析就可以识别到指标异常是否和客户端发版有关了。

第二种相关性分析方法:量化分析法

量化分析法也就是计算两个指标序列的相关系数 r,通过 r 的值判断相关的程度。最常用的相关系数是皮尔逊相关系数,公式如下:

相关系数 r 可以衡量变量之间的线性相关程度,这个值在 [-1,1] 之间,负数表示负相关,正数表示正相关,越接近 1 相关程度越高。

采用量化的方法好处有两个,第一个是当一个指标和多个指标可能相关的时候,对比数值能更客观准确的识别相关性最高的那个。第二个是量化的方法便于以后做自动统计分析。

Excel 也支持计算相关系数,在 Excel 中调用 Correl 函数即可,参数是两列或两行数据,比如:

对于案例 2 来说,我们可以计算驳回指标和 ios 新版本的相关系数 0.839 以及驳回指标和服务区驳回数量的相关系数 0.987。可见驳回指标和服务区驳回是高度相关的,和 ios 新版本的相关性没有那么高。

04

指标下钻

接着看案例 2,上面通过相关性分析已经知道,驳回指标的异常和客户端版本发布无关,因此这个异常是后台带来的。相关性分析也发现驳回上涨和服务区驳回的上涨相关性极高。是否这个异常就是服务区带来的?可以对驳回指标继续进行下钻分析,确定异常的来源。

驳回指标根据驳回的类型下钻,可以发现,驳回指标的增长完全来自于服务区驳回这一个类型,两者不仅趋势一致,而且增加的数量也一致,所以只需要调查服务区场景发生了什么问题就行了。从线上日志中捞取包含服务区驳回的导航日志,定位到服务区异常是因为后台返回客户端的数据中缺失了服务区的白名单,最终定位到是重构过程中删掉了服务区白名单,导致了本次异常。

数据下钻除了发生异常时分析,也可以用于平时分析指标的头部问题,寻找优化方向。比如下图展示的是路线单方案率指标按照偏好这个维度以及按照路线距离这个维度进行下钻的数据。

案例 3 单方案率指标分析

从上图可以看出四种偏好中,notoll 和 nohighway 两种明显高于其余两种,可能存在优化空间。和产品研发沟通后得知,这两种偏好算路引擎只用了一个,而其他偏好下引擎是用了多个,因此对偏好算路增加算路引擎,可以优化单方案的问题。

从上图可以看出 5km 以下和 1000km 以上,单方案率明显非常高,这些距离场景需要单独分析下是否有优化空间。

可视化展示(Grafana 为例)

Grafana 平台的入门使用说明,网上有比较多的总结,下面仅介绍在 Grafana 页面上如何组织指标做分析的一些经验。

01

核心指标展示,推荐仪表盘(gauge)+ 趋势图(graph)

仪表盘展示最新的数值,以及该值的状态。仪表盘可以设置不同阈值对应不同颜色。比如如下图,红色代表告警,绿色是正常,蓝色是达到优化目标。

趋势图展示最近一段时间指标的走势。

02

相关关系展示

Grafana 上相关关系目前只能用图形观测法。因此在 Grafana 上做相关性分析,可以把相关的指标都组织到一个页面上。Grafana 面板支持复制,可以快捷的把相关的指标都复制一份到指标分析页面。如下图所示。

03

指标下钻

指标下钻主要有两种形式,一种是跳转到另一个页面,一种是点击数据下钻。

跳转另一个页面可以通过面板或看板添加 Link 来实现。比如路线单方案率是路线整体指标中的一个,在整体页面中,单方案率指标可以增加一个跳转链接到单方案率的详情页面,跳转后的页面有下钻的详细数据。加完的链接会如下图所示出现在左上角。

第二种方式是点击数据下钻,这种方式通常需要和页面的变量结合起来。

第一步,下钻后跳转的页面(Dashboard)上增加变量,如下图:

第二步,下钻跳转的页面中的图表的 SQL 用页面的变量筛选,如下图的图表对应的 SQL,用了页面中的两个变量过滤:

第三步,需要下钻的图表,增加 Data Link。DataLink 跳转的 URL 是下钻后的页面(Dashboard)或面板(panel),且把本图表曲线的名字或值作为参数传入下一个页面。

结果示例:

下方左图是需要下钻的图表,加了 Datalink 后,点击曲线会在下方显示这个曲线对应链接的名称,点击它即可跳转到下钻页面。右图是下钻后的效果,右图图表接收了左图传过来的参数 highway,展示了 highway 这个类别从距离维度下钻的数据。

总结

异常监控: 指标异常监控告警阈值目前用的是 3σ- 准则。事实上还有很多其他的异常检测的方法,比如基于聚类的异常检测,箱型图等等,这些以后可以尝试。另外,指标是一个时间序列的数据,有时候随着节假日指标会自然波动,这些可能并不是我们希望检测的异常,未来可以尝试用 STL 时序分解等方法从指标波动中把这些周期性波动去掉。

根因分析:目前根因分析已经有一些思路,主要还是告警发生后人工分析。未来计划把人工分析转化为自动分析,当告警发生的时候,直接给出一些分析结论,比如和客户端是否有关,指标的哪个维度是异常的主要原因等等。

看板设计:目前的看板设计以分析的思路做了一些组织,但是分析的过程还是人分析为主。未来告警自动分析完成后,计划也接入看板,看板除了展示告警,还应该展示告警的初步分析结论。

欢迎联系云监控小助手微信号,加群讨论:)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云可观测 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档