1. 背景
1.1 异常分支监控的重要性
异常分支是什么:在程序执行过程中,由于某些原因(如错误的输入、不符合预期的操作、资源不可用等)导致程序未按照正常的控制流程继续执行,而是进入了一个特殊的处理路径。
在代码中对异常分支进行监控具有非常重要的意义:
-
提高系统稳定性:
异常分支是代码中未按预期执行的部分,可能导致系统崩溃或业务功能异常。通过监控这些分支,可以及时发现问题,从而采取措施避免系统故障,提高整体系统的稳定性。
-
快速问题定位和修复:
当异常发生时,如果有针对异常分支的监控,开发和运维团队可以迅速定位问题的根源,减少排查问题所花费的时间。这样可以更快地进行问题修复,降低对业务的影响。
-
预防性维护:
异常分支监控不仅可以用于事后分析,还可以用于预测潜在问题。通过分析监控数据中的异常模式,可以提前识别出可能会引发严重问题的趋势,并在问题发生之前进行预防性维护。
1.2 如何对异常分支监控
在我们看来,监控的主要作用是:实时持续观察和分析目标对象,并在出现异常时自动触发报警。
我们先看看一小段代码片段:
csharp
代码解读
复制代码
private void example1() { try { doMethod(); } catch (BussinessException bussinessException) { // 异常分支 } } private void example2() { if (doMethod() == null) { // 异常分支 } }
上述异常分支中,基于我们现在的能力,我们该怎么监控呢?
-
加Prometheus打点(metric counter)?不可行!原因如下:
- 并非所有异常分支都需要通过打点来增强感知。例如,参数校验异常通常不需要这样做。
- 如果将过多的异常分支都通过打点进行监控,这将对监控平台造成负荷,进而可能导致瓶颈问题。
- 在打点之前,必须先定义相关指标,这一过程既繁琐又耗时,从而降低了编码效率。
-
向外抛异常?不可行!原因如下:
- 并非所有异常分支都适合直接抛出异常。
-
日志记录?可行但有缺陷!原因如下:
- 日志只能做事后分析问题,不能发现异常时自动触发报警
结论:当前,我们没有一个很好的方法去对异常分支进行监控
1.3 日志聚类引擎引出
一个令人欣慰的方面是,我们按照编码习惯和要求,在异常分支都需要记录error日志。鉴于此,我们可以通过加强对日志的监控来实现对异常分支的监控,从而提高系统的稳定性。

图1
然而,目前的日志分析主要依赖于人工操作,这种方法不仅效率低下,而且可靠性也不高。为了实现对日志的高效且可靠监控,我们首先需要具备以下能力:
-
能够对日志进行有效分类,这样我们就能迅速把握日志的全貌。
-
具备按时间顺序保存分类数据的能力,从而便于我们对数据进行趋势分析。
-
具备自动报警的能力,能够在新类别的异常日志出现或数据趋势发生波动时及时发出报警,这样我们可以快速感知并响应潜在的问题。
根据上述分析,我们计划开发一套名为“日志聚类引擎”的工具。该工具将具备对日志进行分类的能力,帮助我们有效地分析日志数据。此外,它还能自动识别异常并触发报警,从而提高我们对系统状况的监控和响应速度。
2. 难点与挑战
开发之前,我们先盘一盘开发一套日志聚类引擎的难点与挑战
2.1 该分哪几类
📌面对一堆日志,怎么确定有哪几类呢,谁和谁又该归到一类呢


1004

被折叠的 条评论
为什么被折叠?



