敏捷开发实践必须依赖敏捷监控框架的支持。忽视系统状态的微小差异(包括基础设施、应用程序性能和用户交互)是企业无法承受的风险。特别是在性能指标和系统可靠性对客户满意度和忠诚度产生直接影响,并直接影响企业利润的情况下。
传统的应用程序性能监控(APM)工具最初设计用于更加静态和可预测的环境。这些工具并非旨在追踪微服务架构的快速迭代变化或者应对云原生应用程序的复杂性。这导致了现代可观测性方法的崛起,这种方法利用了APM的数据收集原理并扩展了其功能,以提供更深入的系统状态了解。
在本文中,我们将深入探讨可观测性和监控的核心概念,同时探讨现代可观测性方法与传统监控实践之间的差异和相互补充的关系。
通过数据质量优化应用性能
性能指标的可靠性取决于所使用的数据。不同的数据源可能具有不同的格式和规模,这可能会影响对应用程序性能真实情况的理解。考虑到“垃圾输入,垃圾输出”的挑战,数据标准化可以作为一种纠正措施。它可以重新组织数据集,减少冗余并提高数据的一致性和完整性。其主要目标是确保数据被有效且一致地存储,以便更容易地检索、操作和理解。
对于应用程序性能监控(APM),存在多种标准化技术可帮助将异构数据转化为通用的度量标准,以便更有效地进行比较和分析:
- 单位转换:标准化测量单位,例如将所有基于时间的指标转换为毫秒,这样可以保证数据的一致性,便于对比和分析。
- 范围缩放:将指标调整到一个共同的范围。这对于比较原本位于不同规模上的指标很有帮助,能够让它们在相同的尺度上进行比较和分析。
- Z 分数标准化:将指标转换为标准正态分布。这种标准化方法特别适用于处理异常值,能够让数据更加稳定和可比,并有助于发现异常情况。
监控与可观察性
在优化应用程序性能时,监控和可观察性发挥着同样重要但又截然不同的作用。有些人经常错误地互换使用这些术语,但两者之间存在微妙差异。监控使用主动方法,根据预定义的阈值收集数据点并设置警报来标记异常。它主要回答了一个问题:我的系统是否按照预期运行?
另一方面,可观察性则允许深入研究系统的行为,提供对您不知道存在的问题的洞察。这种方法可以帮助您回答:为什么我的系统没有按照预期运行? 监控更着重于实时状态和警报,而可观察性则更注重于系统行为的理解和深入分析。
示例:某电子商务平台
针对一个电子商务平台,其中应用程序的正常运行时间和用户体验至关重要,为了确保一切顺利运行,以下是监控和可观察性策略的正确组合:
- 监控策略:
- 实时性能监控:监测关键指标如服务器响应时间、页面加载速度和交易处理时间等。设置警报,一旦超出预定阈值,立即通知相关团队。
- 基础设施监控:监控服务器、数据库、网络等基础设施的健康状况,确保它们运行良好,不会影响应用程序性能。
- 用户行为分析:跟踪用户行为和交易路径,了解用户体验,发现潜在的瓶颈和用户流失点。
- 可观察性策略:
- 日志和异常追踪:收集应用程序和系统的日志数据,并实施异常追踪机制。通过这些数据分析,可以及时发现和解决潜在的问题。
- 分布式追踪:监控服务之间的调用和交互,以识别潜在的性能瓶颈和系统间的依赖关系。
- 指标和度量:采集和分析关键指标,如交易量、购物车转化率和用户反馈等,以衡量业务成功和用户满意度。
通过合理结合监控和可观察性策略,可以实现对应用程序性能的实时监控和全面了解,有助于及时发现问题并采取相应的优化和改进措施,确保用户体验和业务成功。
策略类型 | 策略名称 | 目的 |
监控 | 可用性检查 | 定期进行 ping 测试,确保网站可被访问 |
监控 | 延迟指标 | 测量页面加载时间,优化用户体验 |
监控 | 错误率跟踪 | 标记服务器错误如 “404 Not Found” 超过阈值的情况 |
监控 | 交易监控 | 自动检查关键流程如结账等是否顺利进行 |
可观察性 | 日志分析 | 深入分析服务器日志,跟踪失败用户请求 |
可观察性 | 分布式追踪 | 映射服务间请求路径,了解系统交互 |
可观察性 | 事件标记 | 在代码中设置自定义标签,实时了解用户行为 |
可观察性 | 查询驱动的探索 | 用于暂时性地检查系统行为的查询方法 |
监控和可观察性之间的协同作用
监控和可观察性并不是相互冲突的,相反,它们合作共同构建高效的应用程序性能管理(APM)框架。将监控和可观察性集成在一起可以获得许多优势,包括以下列出的优势:
- 增强覆盖范围:监控能够识别已知问题,而可观察性让您能够探索未知问题。无论是系统崩溃还是微小的性能下降,都能得到全面覆盖。
- 举例来说,不仅仅知道您的服务器响应了错误代码
500
,还能了解发生这种情况的原因以及对整个生态系统的影响。
- 举例来说,不仅仅知道您的服务器响应了错误代码
- 改进的分析:混合使用这两种方法让您能够从“正在发生的事情”转向“为什么会发生”。对于基于数据的决策至关重要。您可以更有效地分配资源,确定错误修复的优先级,甚至发现您之前未意识到的优化机会。
- 例如,您可能会发现某些 API 调用在一天中的特定时间段消耗更多时间,并追溯到影响资源的内部进程。
- 可扩展性:随着系统的增长,复杂性通常呈指数级增长。当监控和可观察性同步工作时,APM 的可扩展性大幅提升。监控可以帮助您密切关注性能指标,而可观察性则让您能够大规模微调系统以实现最佳性能。
- 因此,您可以实现一种可扩展的方法,不仅能够主动识别瓶颈和资源限制,还可以调查并解决这些问题。
创建一个有凝聚力的系统
协同监控和可观察性是构建强大、可伸缩且充满洞察力的APM框架的关键组成部分。关键在于确立一个相互配合、相互依赖的监控和可观察性环境,以增强它们在维护系统可靠性方面的作用。尽管不同的情景可能需要不同的方法,但考虑以下基本原则可以建立一个结构紧密的监控和可观察性体系。
统一数据存储和检索
创建内聚分析管道的第一步是统一数据存储。单一的数据存储和检索系统可以提高分析速度和准确性。您的性能分析堆栈应当适应来自监控的静态指标和来自可观察性的动态指标。基础系统架构应具备有效处理不同数据类型的能力。解决方案如时间序列数据库或数据湖通常能够很好地满足这些需求。然而,考虑系统的数据索引、搜索和过滤能力至关重要,尤其是在处理大规模高速数据时。
互操作性
敏捷的APM系统依赖于监控和可观察工具之间的无缝数据交换。当每个工具作为独立系统运行时,存在获取孤立数据流和操作盲点的风险。考虑构建一个可互操作的系统,允许将数据聚合到单个综合仪表板中。选择符合通用数据格式和通信协议的工具。更高级的实现方法是利用自定义中间件作为连接不同工具之间的桥梁。这样,可以将监控KPI与可观测性工具中的详细日志和跟踪关联起来。
纠正措施
准确了解需要修复的问题内容可以帮助更快速地进行修复。在实时生产环境中,速度至关重要,因为每一分钟的次优性能都可能导致收入损失或失去用户信任。当监控系统标记异常时,合理的下一步是深入研究潜在问题。例如,监控系统可能会警告错误率突然飙升,但不提供具体原因。集成可观察性工具有助于连接各层面。这些工具能够筛选日志文件、查询数据库并分析跟踪数据,最终提供更精细的视角。因此,可以采取更具针对性、基于数据的行动。
建立工作流
要建立一个自动化工作流程,以便监控系统的警报可以触发可观测性工具中的预定义查询,快速追踪问题的根本原因,可以采取以下步骤:
- 集成警报与查询触发:确保监控系统和可观测性工具能够相互集成。这可能需要设置警报系统,以便在检测到异常时触发预定义的查询或脚本。
- 创建预定义查询:在可观测性工具中编写或创建与警报相关的预定义查询或脚本。这些查询应该能够检索与警报相关的详细信息,如日志、指标或其他数据。
- 自动化触发查询:配置系统,使得在监控系统发出警报时,自动触发这些预定义查询。这可以通过API调用、自动化脚本或其他集成方式来实现。
- 分析和响应:根据查询结果进行分析,识别根本原因,并采取相应的行动来解决问题。这可能涉及修复 bug、调整配置或其他必要的操作。
- 监控和优化工作流程:持续监控自动化工作流程的效果,并根据需要进行调整和优化,以确保其正常运行并持续提供价值。
通过建立这样的自动化工作流程,可以更快速地响应和解决监控系统发现的问题,减少手动干预的需求,并提高整体的效率和系统稳定性。
区分监控与可观察性
虽然监测和可观察性方法常常相互交叉,但它们在以下方面有着不同的目标、方法和结果。
指标、日志、跟踪
监控主要围绕指标展开。这些指标是预定义的数据点,提供有关系统状态的定量信息,并指示何时违反了预设的阈值。这些通常是数值,例如CPU利用率、内存使用率或网络延迟。
可观察性更关注日志和追踪。日志记录特定事件和信息,对于深入调查问题至关重要,因为它们包含了丰富的上下文和细节,使您能够重现事件或了解流程的步骤。
追踪提供了更广泛的视角。它们追踪请求在系统中的旅程,记录其在各种服务和组件中的路径。追踪对于识别瓶颈、延迟问题和揭示性能问题的根本原因特别有用。
被动管理与主动管理
监控主要关注预设的阈值,采用一种被动的管理方法。当某项指标违反这些预设限制时,监控系统会快速响应,支持更广泛的性能分析策略。这种反应性质非常适合及时解决已知问题,但可能不太适用于处理复杂和新颖问题所需的更主动和深入的方法。
可观察性扩展了监控的范围,采用主动和全面的分析来处理复杂和新颖的性能挑战。这种动态、前瞻的方法有助于持续分析数据源,寻找可能显示性能问题的模式和异常,如响应时间微小的变化、错误率轻微增加或与预期行为的任何其他偏差。然后,可观察性启动全面调查,以了解问题的根本原因并采取纠正措施。
固定仪表板与临时查询
监控系统通常拥有预设的仪表板,用于展示一系列预定义的指标和性能数据。现代的监控工具允许配置特定的指标和数据点,这些被认为对于跟踪系统运行状况至关重要。基础指标的选择通常基于对系统历史和行业最佳实践的理解。虽然固定仪表板能有效地回答已知问题,但它们缺乏灵活性来解决不可预见或复杂问题,并且可能无法提供进行有效调查所需的数据点。
相反,可观察性提供了一种动态、实时的方法来查询系统性能数据。这些即时查询可以根据特定的、与上下文相关的问题进行定制。这些查询的技术基础在于其能够分析来自不同来源的大量数据,包括指标、日志和追踪的丰富数据集。这种灵活的查询功能为解决新问题或意外问题提供了宝贵的灵活性。当出现以前未见过的问题时,用户可以创建自定义查询以提取相关数据进行详细分析。
下面的比较表强调了每组关键绩效指标 (KPI) 如何与基本理念保持一致,以及监控和可观察性如何有助于系统管理:
这份表格整理了监控与可观察性的关键绩效指标:
关键绩效指标 | 监控 | 可观察性 |
---|---|---|
主要目标 | 确保系统在设定参数内运行 | 了解系统行为并识别异常 |
数据的性质 | 指标 | 指标、日志、跟踪 |
关键指标 | CPU 使用率、内存使用率、网络延迟 | 错误率、延迟分布、用户行为 |
数据采集方法 | 预定义数据点 | 动态数据点 |
范围 | 反应式:解决已知问题 | 主动:探索已知和未知问题 |
视觉表现 | 固定仪表板 | 即席查询、动态仪表板 |
警报 | 基于阈值的 | 基于异常 |
测量尺度 | 通常是单维度指标 | 多维度指标 |
结论
当谈及永久性的可观察系统时,它的主动性是其优势之一。然而,要充分利用可观察性的潜力,我们必须收集正确的数据——这些数据能够解读可预测和不可预测的生产挑战。文化应该强调改进应用程序的工具。建议的方法是建立一个堆栈,可以适应与应用程序性能相关的任何查询。
还要注意,可观察性是一个持续发展的过程,而不是一次性的设置。随着您的应用程序的扩展和变化,您的仪器设施也应随之调整。这种方法可以确保查询(无论是探索常规操作还是处理意外异常)都能够得到经过微调的响应式可观察性框架提供的明智回应。