异常检测之多指标关联分析及告警通知
在当今复杂多变的 IT 运维环境中,高效识别并解决系统异常是保障业务连续性的关键。单一指标的异常检测容易出现误报率高、告警数量大、告警可信度低的问题。我们可以不再局限于单一指标的监控,而是进入了多指标关联分析的新阶段。本文将围绕应用性能监控指标进行关联分析,结合 DATABUFF 先进的可观测性平台的实践案例,阐述如何通过多指标异常检测有效发现应用服务实际存在的问题。
一、多指标关联分析
▎关联分析原理
多指标协同监控:服务应用性能指标(如:Apdex、平均耗时、请求数、成功数、错误数、错误率、CPU 使用率、内存使用率等)构成了衡量一个或者多个服务是否健康的依据。通过多指标的关联分析,可以揭示指标间的隐性联系。
拓扑结构关联:考虑某个服务所在应用系统架构的逻辑或物理拓扑,如服务间的依赖关系、资源分配等,有助于识别异常传播路径,从而更快定位问题源头。
▎DATABUFF 中的实践
DATABUFF 作为一个强大的可观测性平台,通过以下几点实践,将多指标关联分析的优势发挥得淋漓尽致:
一体化监控面板:DATABUFF 提供了统一的监控视图,将 APM 各项关键指标整合在一个界面中,便于运维人员全局审视,快速捕捉指标间的异常关联。
动态基线与阈值管理:利用历史数据建立动态基线,自动调整阈值,使得异常检测更加智能化,在减少误报的同时,准确识别出真正的性能异常。
告警收敛与智能关联:通过告警收敛机制,减少告警风暴,同时,智能关联分析将多个相关联的告警归并,直接指向问题核心,缩短故障排查周期。
指标关联排查:首先观察到 Heap Used 持续接近 Heap Max,伴随频繁的 Full GC 活动及较高的 GC Pause Time,初步判断内存管理存在问题。
线程分析:进一步检查线程信息,发现高并发场景下线程数量激增,与某些长时间阻塞的线程共存,提示可能存在内存泄漏导致线程创建过多。
动态基线触发告警:基于历史数据分析,DATABUFF 动态基线检测到老年代使用率异常增长,及时发出预警,引导运维人员聚焦问题区域。
智能关联与告警收敛:DATABUFF 自动关联相关告警,合并为一个综合告警,指出内存溢出风险,并通过调用链路追踪,精确定位到引起内存泄漏的特定服务调用。
问题解决与优化:根据 DATABUFF 提供的详细分析报告,迅速修复内存泄漏代码,调整 JVM 参数优化内存分配,最终恢复系统正常运行。
二、常用应用服务指标
service.apdex:衡量服务性能的关键指标
—
apdex =((服务调用次数 - 慢调用次数 -非常慢的调用次数) +(慢调用次数/2))/服务调用次数
Apdex,即应用性能指数,是标准化的性能指标,量化用户对应用效率的满意度。在 APM 工具如 Skywalking 中,Service Apdex 特指依据服务请求响应时间计算得出的服务评分,简洁明了地呈现服务性能表现。
service.avgDuration: 服务平均耗时
—
服务响应时间均值,在指定时间段内,代表从接收至完全处理并回应客户端请求的平均耗时。此值全面覆盖了处理周期,涉及网络传输、服务器运算、数据库访问等各环节,综合反映服务效率。
service.cnt: 每分钟服务请求次数
—
一分钟请求数,即 1 分钟内累计的请求总量,揭示了服务即时的活动水平和承载能力。监测该指标有助于洞察服务流量动态,识别峰值与低谷,确保运营未超出设计处理界限,维持服务健康状态。
service.error.pct: 服务错误率
—
服务错误率定义为在一定时间内,失败请求占总请求量的比例,反映因各种原因(如逻辑错误、资源短缺、超时或权限问题)导致未成功执行的请求情况。这一比率是评估系统可靠性和用户满意度的核心指标。高错误率指示潜在重大问题,可能损害业务运作和客户体验。有效监控并及时响应,如通过代码优化、资源扩容或参数调优,可显著减少错误,维护服务质量。
service.cpu.usage_pct: CPU 使用率
—
CPU 使用率,作为系统性能关键指标,量化服务运行期间对 CPU 资源的占用水平。其值直接影响系统反应速度与稳定性,核心反映服务 CPU 依赖度与活动强度,是评估 CPU 资源消耗的重要参照。
service.mem.usage_pct: 服务内存使用率
—
内存使用率,即服务运行内存占总内存的比例,为评判内存利用效率与需求的核心指标。过高使用率触发 OOM 风险,损害服务稳定与响应性能。定期监控与优化,例如调整堆配置、精进数据结构及缓存策略,对避免效能瓶颈、增强服务在资源约束条件下的表现力至关重要。
service.tcp.retransmit: 服务 TCP 重传次数
—
TCP 重传次数指标具体反映了服务在某段时间内,因数据包未获确认而必须重发的频次。较高的重传次数可能揭示网络拥堵、链路劣质、接收方处理滞后或网络硬件故障等状况,这些均是服务性能和稳定性的潜在威胁。持续监控并分析此指标有助于及时诊断与解决网络问题,保持服务的高效运行。
三、典型的服务异常检测场景
背景描述
一家大型金融机构近期收到来自其在线交易平台大量用户的反馈,称在进行关键交易操作时,时常出现页面加载与交易确认过程显著变慢的情况,严重影响了交易效率与用户信任。每当出现这种情况,运维人员总是不能及时发现和定位问题。
该机构运维部门随即依托 Databuff 平台,深入分析多项核心性能指标,希望当问题发生时能够及时发现,并通知到负责人,在第一时间修复。
第一步 初步分析
服务维度异常往往伴随着服务性能指数下降,响应时间过高/超时,CPU 使用率/内存使用率居高不下,错误率上升等。
下面将通过 Databuff 平台进行异常监测,从而定位哪些服务存在问题。选取服务平均响应时间,服务错误率,服务 cpu 使用率,服务内存使用率,服务性能指标。这 5 个指标作为检测对象。
第二步 创建多指标异常检测
本次异常检测基于服务和服务实例,选择检测的指标组合包括:
同时满足以上条件时,生成一个重要事件;满足任一条件时,生成次要事件。任一指标连续 5 分钟无数据上报时生成无数据事件。
第三步 创建服务实例收敛策略
当运维人员不需要关心每个异常事件时,可通过 Databuff 告警收敛规则,将固定窗口期内的事件收敛到一个告警中,这样可以减少告警噪音,避免告警风暴。
当有异常事件产生,每 5 分钟生成一个告警,默认不筛选事件,要求在 5 分钟的时间窗口内,将相同服务和相同服务实例的事件收敛到一个告警中。(该告警窗口的开启时间为第一个满足条件的事件开始计时,若事件每分钟都会产生,那么在窗口期结束之后,这些满足条件的事件都会被收敛到一个告警中)
告警描述:【检测服务平均响应时间是否高于 800ms】,【检测服务平均错误率是否高于 0.01%】,订单系统,下单服务,192.168.2.101 产生告警,请及时关注。
第四步 查看告警详情
告警描述:
【示例】服务实例多指标异常检测, 【服务实例响应时间】服务实例响应时间超过正常水平, 【响应时间】错误率动态基线] , [数据库服务] , [web 应有服务] , [192.168.24.14] 产生告警,请及时关注。
事件描述:
【服务实例:192.168.24.14,服务名称:web 应有服务】的指标 service.avgDuration 当前实际值 641.48ms>动态基线检测 620.21ms, 指标 service.error.pct 当前实际值 0.69%>阈值检测, 指标 service.apdex 当前实际值 0.50<阈值检测 1.00
第五步 通知相关负责人
部署配置-配置管理-告警配置-响应策略 中新建 【示例】交易系统通知策略
可以筛选满足条件的告警,通过邮件,短信,钉钉,企业微信,webhook 等方式通知到相关负责人。
四、结论
上文展示了如何在复杂的 IT 运维环境中,通过 Databuff 平台中应用服务性能的多个指标、多条件、多种检测算法,可以有效地监控应用服务、服务实例是否健康,便于运维人员及时发现问题,辅助分析定位问题源头。
Databuff 提供了一套内置的服务监控策略,运维人员可以根据行业经验,在内置策略的基础上修改,以适应环境需要。通过同窗口期/同源汇聚策略,将相同类型的异常事件收敛到同一个告警中,避免告警风暴的发生。
后续的文章中,我们将会讲解如何通过告警信息进行进一步的故障根因定位。
版权声明: 本文为 InfoQ 作者【乘云数字DataBuff】的原创文章。
原文链接:【http://xie.infoq.cn/article/7e7950ee81c1cbd33626f5881】。文章转载请联系作者。
评论