可观察性是监控的超集。除了提供对隐式故障模式的详细洞察外,它还提供了系统健康状况的高级概述。此外,可观察系统提供了其内部运作的存储库,从而能够发现更深层次的系统问题。将服务部署到生产环境后,我们想知道它在每秒请求数、资源利用率等方面的表现如何。此外,如果出现问题,例如服务实例失败或耗尽,您希望立即收到警报磁盘空间,最好是在它影响用户体验之前。如果出现问题,我们需要能够进行故障排除并进行RCA(根本原因分析)。作为服务开发人员,我们应该实施多种模式来简化服务管理和故障排除。以下五种模式可以帮助我们设计可观察的服务:HealthCheckAPI:提供返回服务健康状况的端点。日志聚合:您可以记录服务活动并将日志存储在提供警报和搜索功能的集中式日志服务器中。分布式跟踪:使用唯一ID识别每个外部请求,并在请求在服务之间流动时对其进行跟踪。异常跟踪:应将异常报告给异常跟踪服务,该服务会删除重复的异常、提醒开发人员并跟踪它们的解决方式。应用程序指标:计数器和仪表等指标由服务维护并暴露给指标服务器。审计日志:跟踪用户操作1.HealthCheckAPI模式有时,服务可能正在运行但无法处理请求。新启动的服务实例可能仍在初始化并在处理请求之前进行一些健全性检查。在服务实例准备好处理它们之前,部署基础结构将HTTP请求路由到服务实例是没有意义的。也可能出现服务实例没有终止就挂掉的情况,比如DB连接全部用完,无法访问数据库。部署基础架构不应将请求路由到失败但仍在运行的服务实例;如果服务实例无法恢复,则必须终止它并创建一个新实例。服务实例必须能够告诉部署基础设施它是否可以处理请求。您可以使用实现健康端点的SpringBootActuator来为您的服务实现健康检查端点。2.日志聚合方式日志聚合方式可以用于故障排除。如果您想确定您的应用程序有什么问题,日志文件是一个很好的起点。在微服务架构中登录可能具有挑战性,因为日志内容分散在不同服务的日志文件中。日志聚合是解决方案。日志聚合服务将所有服务实例的日志发送到一个集中的日志服务器。当日志被日志服务器存储时,可以查看、搜索和分析日志。也可以设置当某些消息出现在日志中时触发的警报。日志记录基础设施负责聚合日志、存储它们并将其用于搜索。很多流行的工具都提供了日志聚合,比如Splunk、Fluentd、ELKstack、Graylog等。3.分布式Tracing模式假设你正在排查一个缓慢的API响应,它可能涉及多个服务。使用分布式跟踪来深入了解您的应用程序正在做什么。分布式跟踪器类似于单体应用程序中的分析器。记录有关处理请求时进行的服务调用的信息。然后,您可以查看服务在处理外部请求期间如何交互,以及每个服务花费了多少时间。每个外部请求都被分配了一个唯一的ID,并在它从一个服务流向另一个服务时在提供可视化和分析的中央服务器上进行跟踪。分布式追踪服务器包括Zipkin、Jaeger、OpenTracing、OpenCensus、NewRelic等。4.异常追踪模式服务记录异常,有助于确定原因。异常表示问题或程序错误。日志用于查看异常,甚至可以配置一个日志服务器,在出现异常时提醒运维人员。然而,有一些缺点需要注意:日志文件由单行日志条目组成,而异常则有多行。在日志文件中,没有跟踪异常解决的机制。异常需要手动复制/粘贴到问题跟踪器中。目前没有办法自动将重复的异常视为一个异常。ExceptionTrackingService是一种很好的异常跟踪方法。服务向集中式服务报告异常情况,该服务可删除重复数据、生成警报并管理异常情况。可以使用Honeybadger、Sentry等实现异常跟踪服务。5.应用程序度量模式监视和警报是生产环境的关键组件。监控系统从其技术堆栈的所有部分收集指标,这些指标提供有关应用程序健康状况的关键信息。这些指标的范围从基础架构级别的指标(例如CPU、内存和磁盘利用率)到应用程序级别的指标(例如服务请求延迟和已处理的请求数)。指标是服务开发人员的责任,有两种方式。该服务必须首先被检测以收集相关的行为指标。其次,这些服务指标以及来自JVM和应用程序框架的指标必须公开给指标服务器。ApplicationMetricsService可以轮询端点以检索指标,就像AWSCloudWatch服务或Prometheus服务器一样。Grafana是一个数据可视化工具,可以用来查看Prometheus中的指标。6.审计日志方式每个用户的操作都被审计日志记录下来。通常,审计日志用于提供客户支持、确保合规性和检测可疑活动。审核日志条目记录用户是谁、他们执行的操作以及涉及的业务对象。审计日志通常存储在数据库表中。审计日志可以通过几种不同的方式实现:将审计日志代码添加到业务逻辑:每个服务方法都可以创建一个审计日志条目并将其保存到数据库中。面向方面的编程(AOP):您可以使用AOP框架(例如SpringAOP)来定义拦截每个服务方法调用并保留审计日志条目的建议。利用事件溯源:默认情况下,事件溯源为创建和更新操作提供审计日志。根据定义,可观察性模式与日志、指标或跟踪无关,而是关于在调试过程中以数据为驱动,并使用反馈来迭代和改进产品。
