微服务允许开发人员将应用程序分解为更小、松耦合的服务,这些服务可以独立开发、部署和扩展。但你需要一个监控工具来跟踪软件是否正常工作——这意味着你需要一套有用的标准来选择这样的工具。
你可能习惯于跟踪应用程序性能以确认其是否正常运行,但微服务增加了一个新的复杂性。监控是管理任何微服务架构的关键方面。顾名思义,它包含许多独立的部件。
但是,如何为您的业务选择最佳的微服务监控工具呢?我们不在此偏袒任何工具,也不对特定工具进行背书。然而,我们在这个领域拥有丰富的经验,乐于与您分享。
在选择工具之前,先思考你获取它的动机。你的团队应该讨论:“我们试图解决或预防什么问题?”这引出了:“我们需要检查哪些数据来确定我们是否正在解决或预防这些问题?”这些问题的答案有助于你确定需要监控什么——以及可以忽略(或少关注)什么。
有意识地选择你监控的内容,要有理由。不要采取“以防万一有用,所以监控所有东西”的态度。大多数团队资源有限,这意味着无论如何都不可能监控所有东西;最好的结果是最终导致警报疲劳。
话虽如此:你的期望可能与现实不符。当意料之外的事情发生时,很难提前知道什么会有用。直到一切都乱套了,你试图弄清楚发生了什么,才会明白需要监控什么。你需要“仔细思考”和“根据经验调整”相结合的方式。
任何类型的应用程序监控工具都有一系列功能,你可能不需要所有这些功能。最好从 Redis 专家和经验丰富的从业者(那些身经百战的人)提出的首要标准入手。
它应该能够扩展(Scale)。随着你的微服务架构的增长,你的监控需求也会增长。你最不想看到的就是一个无法跟上负载的工具。确保你的监控系统即使发生故障,也不会拖垮你的微服务!
它需要收集正确的数据并进行分析。仔细查看工具收集的数据以及如何呈现这些信息。
一个强大的监控工具能够从分布式系统的每个角落收集和分析数据——但它不应该用嘈杂、无关紧要的信息淹没你。它应该为你提供配得上“洞察”之名的全面洞察,包括性能指标、日志和跟踪。
对于微服务架构,优先考虑分布式追踪。调试跨多个微服务的问题可能是一场噩梦。分布式追踪帮助你跟踪请求在服务间的流向,这有助于识别性能瓶颈并理解复杂的交互。例如,确保每条日志消息/记录/行都附加了可追溯的 traceid,并使用一个允许你聚合视图的系统。
它应该与你使用的其他工具集成,无需繁琐的设置或自定义代码。或许比任何其他应用程序都更重要的是,监控工具应该能与其他工具很好地协同工作。
同样,考察从现有提供商迁移到新的监控工具的过程,包括数据结构化的要求。研究如果当前工具不合适,切换到另一个工具需要做些什么。 了解它的 API 是怎样的,因为你肯定会在某个时候需要它。考虑未来标准的支持,例如 OpenTelemetry。
拜托,它应该易于学习且易于使用(这两者并不相同)。谁想费力学习另一个工具呢?在分布式系统中导航已经够复杂的了;你的监控工具应该简化事情,而不是增加系统的复杂性。配置不应该让人头痛。仔细查看它的仪表盘和可视化效果,判断它们是否像供应商承诺的那样直观。
它应该设置合理的警报和通知。当风暴即将来临时,你需要立即知道!你的监控工具应该提供强大的警报和通知功能,以便你在小问题演变成大问题之前采取行动。
它必须符合你的预算。虽然你想要最适合你的分布式系统的工具,但你不想和首席财务官进行令人不舒服的谈话。任何 IT 开支都是如此,但在这里尤为重要,因为成本和定价模式差异很大。意外的使用量有时会导致所谓的“意外超支”事件。按用户付费模式有时会引发关于谁能获得访问权限的尴尬决定。
微服务监控工具应能提供整个微服务生态系统的可见性,包括性能指标、资源利用率、服务网格数据、自定义指标和错误率。
理想的工具应擅长收集、存储和分析来自分布式系统的数据,为每个微服务的健康状况和性能提供可操作的洞察。它应能与日志系统、警报工具和事件管理平台等其他工具和系统无缝集成。
实际上,如果你使用 Redis——无论是用于微服务还是其他用途——这都是一套很好的入门监控项。你的仪表盘可以包含这些项目,并配置为在任何指标显著飙升时向你发出警报。
你有很多选择。这些微服务监控工具都提供了独特的功能。也许这些链接可以帮助你开始制定你的选择清单——尽管选项比我们列出的要多得多。
哪个适合你?这由你决定。
与任何其他软件选择一样,最终唯一重要的是它是否适合你。
没有绝对正确或错误的选项。关键问题是:“这是适合我的特定项目的工具吗?”关键因素是找到一个与你项目当前和未来需求一致的工具,并做出明智的选择。理想情况下,你选择的工具应能帮助你维护一个健康高效的微服务环境,最终交付可靠、高性能的应用程序。Redis 与所有这些工具都能协同工作。
而且,我们相信,通过 Redis Enterprise,你可以将你的微服务应用程序提升到新的水平。阅读《面向微服务的缓存和消息代理》解决方案简介,了解如何使用 Redis Enterprise 进行缓存,探索主要的缓存模式,以及如何使用 Redis Streams 作为轻量级消息代理进行服务间通信。