这是因为我们在一个系统复杂且分布在多个微服务之间的时代工作。例如,即使是简单的电子商务应用程序也可能具有订购,产品目录和运输服务。我们的工具和实践有时难以跟上这种复杂性。
它使我想起音乐和视频游戏。在视频游戏的早期,很多音乐都以MIDI文件的形式出现。这些文件只能播放一组音符,这使音乐感觉平坦。现在,音乐可以充实了。我们听见每一种乐器,都在交响乐中演奏。节奏和乐器的结合使音乐比它们本身更优美。
在软件中,我们练习一次监视一个系统。当我们需要查看其他系统时,我们切换到其他屏幕或工具。但是微服务就像交响乐中的乐器。我们需要一种看待它们的方法,一眼就能看到它们产生的音乐。
在本文中,我们将探讨您可以采取的五个步骤,以确保您可以监视微服务以查看它们是否和谐地协同工作。这也使您可以修复可能会导致工作不协调的地方。
微服务是可自主部署的,以业务为中心的单元。并非所有部署工件都是单独的服务。例如,我可能有一个微服务,该微服务具有运行时组件和ETL组件。我想将它们一起部署,因为它们紧密耦合。在大多数情况下,我也希望将这些作为一项服务进行监视。对于微服务,我希望将它们视为独立的服务,但还要评估它们之间的相互关系。
现在,让我们看看监视微服务时需要执行的五个步骤。
在实施或学习新东西时,尝试一次性安装并运行所有精彩功能可能很诱人。在软件开发中,我们称此为“闪亮工具综合症”。我们陷入了无限的可能性,以至于我们可能会因为设置事物的复杂性而迷失了自己。
为了避免这种情况,请限制为微服务监控设置的内容。选择两个或三个服务以连接到新的监视工具。然后为每个重复步骤2至5(请参阅下文)。
要从这篇文章的开头继续进行比较,请选择您的交响乐中响度最高的乐器。哪些服务对您的业务最具战略意义?选择最具战略意义的服务将为您带来最大的价值。
您可能无法选择最具有战略意义的服务。也许其中一些是旧版应用程序,可能无法在较新的工具上很好地发挥作用,或者没有使您轻松重新配置它们的测试。在这种情况下,请选择您认为最安全的几项服务,并且可以在本地运行,以确保正确连接。
总体目标是将注意力集中在仅提供几个服务上,而无论您选择哪种服务。
与限制注意力的想法一致,您需要熟悉要衡量的最重要的一到三个最重要的指标。一些工具具有许多功能。例如,Retrace可以执行性能指标,警报,集中式日志记录和错误跟踪。如果您尚未选择监视工具,那么审查所有功能可能会令人生畏。
相反,仅查看您最重要的指标中的一到三个,将使您避开这种分析瘫痪。这样一来,您便可以更快地进行第3步的操作,而不必试图一次了解所有内容。
要弄清楚要关注哪些指标,了解您的业务需求很重要。大多数客户或运营投诉来自哪里?是因为服务关闭过多或请求太慢?可能是由于在高负载期间弹出了太多数据库错误。
您对业务的了解越深,就越容易选择适合的指标。而且,为老板提供所需的预算会更容易,因为您可以购买工具。
如果您发现自己处于孤立状态(与其他小组或部门分开),或者不知该对您的业务最重要怎么办?从四个黄金信号开始。这些信号是一种行之有效的方式,可以从监视服务中获得即时价值。它们几乎对所有企业都通用。Retrace开箱即用地支持这些功能,并具有智能默认值,具体取决于您要监视的服务类型。
现在,您已经完成家庭作业,可以选择监视工具。使用一到三个重要指标来指导您如何看待一个指标。如果他们有一个演示实例,那么您可以尽情地研究内容,以了解其实际工作原理。这是理想的体验,因为屏幕截图只能带您到现在为止。
无论指标如何,您都希望在监视工具中看到一些信息。首先,您需要轻松地概述整个系统。这不仅包括您的运行时服务,还包括您的数据库和其他后端组件。这样一来,您就可以轻松感受到整个系统的节奏,就像听到一首所有乐器一起工作的歌曲一样。
您还需要仪表板,使您可以跨服务关联。这些可能会揭示在代码中不容易看到的关系。(如果您按照下面列出的步骤5进行操作,则可以从这些日志快速跳转到集中式日志,以查看发生了什么。)
最后,该工具应使您可以轻松地将概述分为系统的特定服务和部分。您应该可以切成几个不同的尺寸。该工具应该完成查明潜在问题的大部分艰苦工作。具有智能默认设置的工具将使此操作变得容易,因为它将以多种粒度设置所需的显示器组合。
您不仅应查看用于监视的工具,还应查看用于集中日志记录的工具。我提出集中式日志记录也是因为监视器总是以某种方式聚合。他们擅长显示趋势和整体健康状况。但是在某些时候,您需要深入挖掘到底发生了什么。您无需访问多个日志字段即可查看跨多个微服务的请求的故事。相反,您应该能够在一处查看来自多个服务的日志。
Retrace具有监视和集中记录功能,但这不是必需的。监控工具可以与日志记录工具分开,只要您可以将日志与在监视器中看到的内容相关联即可,例如,应用程序ID和时间戳。(在第5步中,我们将讨论如何创建强相关ID。)
一个好的工具将具有某种自动检测服务的方式。通常,这意味着您必须添加一个库并配置一些属性才能连接到正确的服务器。确保该工具支持所选语言和框架的检测。否则,您将必须在框架的请求生命周期中找到接缝以进行自我检测。一些框架(例如Spring Boot)内置了监视扩展。
即使使用自动乐器,大多数工具也应允许您自定义。这样一来,您就可以进入应用程序中由于不理想的情况而演变而来的那些怪异的地方。
进行检测和配置后,请在本地运行服务,指向监视器服务器。确保数据实际上已从服务进入您的工具。如果您使用的是Retrace,这是一篇很棒的文章,描述了如何验证应用程序是否正常运行。
即使一切都已连接并开始运行,我仍然建议您做一件事。我之前提到过集中式日志记录,以及最终找出问题的重要性。使用微服务,可能很难跟踪系统中事件的踪迹。这使得跨服务的错误几乎找不到。
我建议在每个服务中实现跟踪ID。您需要以一种标准的方式在整个服务中执行此操作,以便一个跟踪ID可以在整个系统中流动。OpenTracing标准是实现此目标的好方法,并且许多框架都有支持它的工具库。有了此功能,您将能够轻松查询跨多个服务的日志,并探究问题如何在您的软件中泛滥。
监视微服务就像监视大多数系统一样,但是只有几步曲折。您将需要一个可以同时监视多个服务的工具。您还需要向每个服务添加跟踪信息,以便您了解它们之间的交互方式。有了这些,您将拥有美丽的服务交响乐,随时随地提供见解,使您能够就我们的扩展和架构做出明智的决策。