ITPub博客

首页 > 数据库 > 数据库开发技术 > 日志、监控与报警

日志、监控与报警

原创 数据库开发技术 作者:greencoatman 时间:2024-02-12 16:00:31 0 删除 编辑

监控一个复杂的业务系统确实是一项极其复杂和挑战性的任务,这不仅需要深入理解业务逻辑和系统架构,还要能够预见潜在的故障模式。在设计监控和报警系统时,目标不仅仅是覆盖广泛的监控项,而是确保业务连续性和服务质量,通过及时发现并解决问题来减少对用户的影响。

故障检测的准确性和及时性

一个优秀的监控系统能够准确且迅速地检测到问题的存在,这要求监控项和阈值的设置既不能过于宽松,以致于错过故障,也不能过于严格,导致频繁的误报。准确性和及时性是减少系统故障影响的关键。

根因分析能力

监控系统的价值不仅在于指出问题的存在,更重要的是能够帮助技术人员快速定位问题的根源。一个高效的监控系统会提供足够的上下文信息和数据分析工具,帮助团队成员理解故障的内在原因,从而更快地解决问题。

可操作性

报警信息必须足够具体,以便操作人员可以直接采取行动。这意味着报警不仅要准确指出问题所在,还要提供足够的信息和建议的解决步骤,或至少指明下一步调查的方向。

覆盖范围与深度

虽然监控项的完善性是基础,但更关键的是监控范围和深度需要与业务的关键路径和关键性能指标(KPI)相匹配。一个全面的监控系统需要覆盖所有关键组件和交互,并深入到足以发现潜在瓶颈和隐患的细节层面。

适应性和可扩展性

随着业务的不断发展,新的监控需求会不断出现。一个好的监控系统应该能够容易地添加新的监控项、调整报警规则,以及集成新的数据源和工具,从而适应业务的变化。

确实,仅仅拥有“完善的监控项”的监控系统并不能保证它就是一个好的监控系统。关键在于监控系统能否有效地区分现象和原因,从而指导团队准确地快速解决问题。以下几个方面是构建高效监控系统的关键要素:

现象与原因的区分

监控系统需要能够区分故障的现象和原因。仅仅侦测到某个监控项异常(即现象),并不能完全帮助解决问题。监控系统应该深入分析,找到导致这种现象的根本原因,这样才能更有效地解决问题,防止其再次发生。

高信噪比

一个有效的监控系统应当具有高信噪比,即能够减少误报,提高报警的准确性。这意味着系统在设计时需要考虑到报警的敏感度和特异性,确保在真正需要时发出报警,同时尽量减少对工作和个人生活的干扰。

故障覆盖率

理想的监控系统应覆盖所有可能的故障点,确保在故障发生时能够被及时侦测并报警。如果存在监控盲点,即使是小范围的故障也可能演变成严重的问题,因为它们在早期阶段没有被发现和处理。

直指根因

报警系统的高效性不仅体现在及时报警上,还体现在其能否提供足够的信息,指引操作人员快速定位问题并找到根本原因。一个好的监控系统应该能够通过报警信息,帮助运维人员理解问题的背景和上下文,从而快速采取行动,而不是在大量无关的报警信息中迷失方向。

报警处理的效率

在发生故障时,监控系统会产生大量报警的情况下,有效的信息分类和优先级排序变得至关重要。监控系统应该能够根据故障的严重性和紧急性,对报警进行排序,确保运维团队可以优先处理最关键的问题。

持续优化

监控系统不是一成不变的,它需要根据业务的发展和新的技术挑战不断地进行优化和调整。这包括添加新的监控项、调整阈值、优化报警逻辑等,以确保监控系统始终能够有效地支持业务需求。

日志:监控与报警的基础

在现代监控和报警系统中,日志系统构成了其基础架构的核心。日志不仅仅包括业务服务产生的程序日志,更广泛地涵盖了通过持续采集的各种系统指标数据。这些数据,无论是结构化的还是非结构化的,只要它们与时间序列相关且持续生成,都可被定义为日志。

日志的本质和处理

日志可能呈现为结构化或非结构化数据形式。对于非结构化数据,首要任务是通过文本解析将其转换为结构化数据。这样经过整理的日志数据本质上被存储在一个时序数据库中,这使得日志不仅仅用于记录信息,而是转化为可供分析和检索的数据资源。

日志的应用

一旦日志被收集、结构化并清洗,它们就能够支持日志分析和检索服务。这些服务可以直接提供数据结果,也可以通过报表展现,或者在满足预设条件时触发报警。利用时序数据库进行监控的优势在于,监控不再依赖于特定脚本来评估系统状态,而是基于标准化的数据分析模型来生成报警。

数据收集与报警规则

采用时序数据库使得批量、大规模且低成本的数据收集成为可能。收集的数据不仅可以用来渲染图表,还可以用于报警。报警规则通常通过简单的数学表达式来定义,使得所有收集到的历史数据都能成为计算报警规则的依据。

报警的优先级和目标

根据不同的监控规则,报警可能被赋予不同的优先级。紧急状态的报警意味着已经或即将对用户产生可见影响,需立即处理。而一般状态的报警可能暂缓至次日处理。报警的目标不仅限于个人,也可能是系统,例如自动化的工单系统。


监控系统的四个黄金指标提供了一个全面了解和评估任何服务性能的框架。这些指标包括延迟、流量、错误和饱和度,每个指标都针对服务运行的不同方面提供了关键的见解。如果我们限制只能监控四个指标,那么这些就是必须关注的。

延迟

延迟指的是服务处理请求所需的时间。区分成功请求和失败请求的延迟是至关重要的,因为失败的请求(如因数据库连接丢失导致的HTTP 500错误)可能会有很低的延迟,但这可能会导致误导。重要的是要监控那些导致系统吞吐能力显著降低的“慢”错误请求。即使是少量的慢请求也可能严重影响服务性能。

流量

流量是衡量系统负载的指标,通常使用高层次的度量,如每秒输入/输出操作(IOPS)或每秒交易量等。不同的服务会有不同的流量指标,例如Web服务器可能关注每秒HTTP请求量,音频流媒体服务可能关注网络I/O速率或并发会话数量,而键值存储系统可能关注每秒交易数量或读取操作数量。

错误

错误指标度量的是请求失败的数量,这包括显式失败(如HTTP 500状态码)和隐式失败(例如HTTP回复是200,但内容中表示有错误),以及因策略原因导致的失败(如超过1秒钟的响应时间被认为是失败)。监控错误有助于及时发现并解决服务中的问题,保持服务质量。

饱和度

饱和度度量的是服务容量有多“满”,通常是指系统中当前最受限资源的使用率。例如,在内存受限的系统中可能是内存使用率,在I/O受限的系统中可能是I/O使用率。重要的是要意识到,很多系统在达到100%利用率之前性能就会严重下降,因此设定一个利用率目标非常重要。饱和度是需要进行预测的重要指标,以便进行有效的容量规划,如评估服务是否能处理双倍流量或应对10%的额外流量等。

这四个黄金指标共同构成了对服务性能评估的基础,帮助SRE团队进行有效的监控、问题定位和容量规划。通过精细地监控这些指标,团队可以预见并防止潜在的服务中断,确保服务的稳定性和可靠性。

为什么我们需要做负载测试,也是为了评判服务的饱和度,究竟受何种度量指标的影响。大部分服务都习惯使用某种间接指标,例如 CPU 利用率,或者网络带宽等来评判饱和度,因为这些指标通常有一个固定的已知的上限。延迟增加是饱和度的前导现象。所以 99% 的请求延迟(在某一个小的时间范围内,例如五分钟)可以作为一个饱和度早期预警的指标。如果我们度量所有这 4 个黄金指标,同时在某个指标出现故障时发出报警,或者对于饱和度来说,快要发生某类故障时进行预警。只要能做到这些,服务的监控就基本差不多了。

关于长尾问题

在构建监控系统时,依赖于平均值来衡量指标,如延迟或节点的CPU使用率,往往不能准确地反映系统的真实状况。尤其是对于高变异性的数据,平均值可能会隐藏关键的性能问题,比如偶尔发生的非常高的延迟或资源使用峰值。这些极端值虽然少见,但对用户体验和系统稳定性的影响却是巨大的。

延迟的分布问题

以Web服务为例,如果服务每秒处理1000个请求,平均延迟为100毫秒,但其中1%的请求延迟高达5秒,这种情况下平均值就不再是一个有用的指标。对于依赖多个后端服务的前端页面渲染来说,即使是少量的高延迟请求也可能对整体用户体验产生显著影响。在这种情况下,一个后端服务的99%延迟值可能对应前端延迟的中位数。

使用直方图来表示延迟分布

为了更准确地理解延迟的分布情况,可以将请求按延迟时间分组并计数,从而创建直方图。例如,可以统计延迟在0~10毫秒、30~100毫秒、100~300毫秒等不同区间的请求数量。通过将直方图的边界设置为指数增长(如本例中的约3倍),可以直观地展现请求延迟的分布情况,从而更有效地识别长尾问题。

直方图的优势

直方图提供了一种可视化的方式来理解数据的分布,尤其是对于偏态分布的数据。通过观察直方图,运维人员可以轻松识别出数据的偏斜程度,包括长尾效应,这些信息对于优化系统性能和改善用户体验至关重要。此外,直方图还可以帮助识别系统性能的瓶颈,为性能调优提供有价值的洞见。

接警:故障响应

当接到报警时,遵循的第一原则是尽快消除故障,而不是立即寻找根本原因。这种方法确保服务尽可能快地恢复正常,减少对用户的影响。以下是应对报警的步骤和策略:

1. 快速故障消除

  • 保留现场:在不知道故障原因的情况下,应尽可能保留现场信息,这有助于后续的根因分析。

  • 清晰的报警:每个报警应尽可能代表一个清晰的故障场景,这样可以提高监控的有效性,加快故障消除的速度。

  • 流量调度:在故障原因不明的情况下,通过流量调度迅速将用户请求从故障域切换到正常域,同时保留故障现场,是一种快速的故障恢复方法。

2. 故障场景管理

  • 独立故障场景:对于每一次新的入口级故障,应将其独立出来,以便下次能够快速定位到根因。

  • 预案准备:对于已知的故障场景,应该有相应的故障恢复预案,以便快速应对。

3. 根因分析(RCA)

  • 分析异常现象:查看故障发生时段内的监控数据,识别除故障现象外的其他异常现象,这有助于快速定位到怀疑对象。

  • 调用链分析:利用请求ID追踪故障请求的调用链,这有助于分析并找到问题的根源。这种方法在许多公司已经得到广泛应用。

原文作者:二进制跳动;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-07-08

  • 博文量
    312
  • 访问量
    141276