OpenTelemetry 和可观测性简介
作者 Charles Mahler / 用例,开发者
2022 年 8 月 10 日
导航到
云原生 和微服务架构在性能、可扩展性和可靠性方面带来了许多优势,但它们也可能带来复杂性。请求在服务之间移动可能会使调试变得更加困难,并且许多过去用于监控应用程序的规则都不太适用。由于云服务本质上是短暂的,容器不断被创建和销毁,这使得问题更加复杂。
因此,我们看到了向可观测性的转变,这使开发者不仅知道他们的应用程序存在问题,而且足够了解他们的软件,以便找出为什么某件事出了问题,以及如何在未来防止它。
一个使收集可观测性数据(如指标、日志和跟踪)变得更简单的工具是 OpenTelemetry。在本文中,您将了解 OpenTelemetry,它帮助解决的某些问题,以及周围的可观测性生态系统。
什么是 OpenTelemetry?
OpenTelemetry 是一系列开源工具、API、SDK 和规范的集合,旨在标准化如何建模和收集遥测数据。OpenTelemetry 由 OpenCensus 项目(由 Google 赞助)和 OpenTracing 项目(由 CNCF 赞助)合并而成,并得到了世界上许多最大的技术公司的支持。一些积极参与项目的公司包括微软、红帽、谷歌、亚马逊、Shopify、Datadog 和 Facebook。
OpenTelemetry 是去年以来 CNCF 项目中仅次于 Kubernetes 的第二活跃项目,根据 CNCF Velocity 数据跟踪器,有超过 1000 名贡献者。
为什么使用 OpenTelemetry?
选择是否将工具包含在您的应用程序中涉及许多因素,但其中两个最重要的因素是
-
项目是否为您的应用程序提供真正的价值
-
项目与替代方案相比的活动和生态系统
第一个因素涉及确定将项目与您的软件集成所付出的努力或使用项目产生的任何额外复杂性是否值得其创造的价值。在可观测性和一般的应用程序监控中,几乎必须创建可靠的软件,因此任何可以简化收集可观测性数据(如指标、日志和跟踪)的工具都是必不可少的。
一旦您确定了一种工具类型值得使用,那么问题就归结为在可用的解决方案中确定哪个选项最好。在 OpenTelemetry 之前,开发者为收集可观测性数据(如指标、日志和跟踪)可用的选项要么是供应商提供的,导致锁定,要么需要结合多个不同的开源项目来收集指标、日志和跟踪。
OpenTelemetry 解决了这两个问题,首先是通过开源和将收集与存储解耦,从而您可以对您的数据发生的事情拥有完全的控制权。第二个问题通过 OpenTelemetry 提供所有类型可观察性数据的规范和实现来解决,因此实现过程变得更加流畅和简化。
选择 OpenTelemetry 而不是潜在替代品的一个额外好处是生态系统和社区。如前所述,OpenTelemetry 现在是 CNCF 项目中最活跃的项目之一,许多主要科技公司都在采用并贡献于该项目。这意味着您不必担心项目的长期状态,并且可以知道随着时间的推移,将会有持续的改进和新功能的添加。
OpenTelemetry 应用场景
OpenTelemetry 收集的数据有多种不同的应用场景。以下是一些例子:
-
软件监控 - 可观察性数据最明显的用途是监控您的软件,并确保一切正常运行,如果没有访问应用所有级别的数据,则更容易调试和解决问题。
-
优化 - 可观察性数据使您更容易识别瓶颈和其他影响应用性能的领域。随着时间的推移,这些数据可以用来使您的应用更加高效,并节省基础设施成本。
-
安全 - 可观察性数据可用于实时安全监控,并用于检测可能表示安全漏洞的异常和其他活动。
-
开发者生产力 - 将可观察性数据作为部署管道的一部分使用,允许软件工程师更快、更有信心地推出新功能。
您可以在视频中了解更多应用场景
如何处理您的可观察性数据
OpenTelemetry 处理数据的收集和传输,但要真正从您的数据中获得价值,您将需要其他工具。让我们来看看您可以使用数据的一些方法以及一些可用的选项。
数据存储
关于您的可观察性数据,您需要做出的第一个决定是您将如何存储它。虽然任何数据库都可以用于存储,但可观察性数据由于其是 时间序列数据 而具有一定的独特性。更通用的数据库没有针对常见查询和时间序列数据的生命周期进行优化。
如果您想优化存储数据的可扩展性、查询性能和降低成本,考虑使用 时间序列数据库 (TSDB) 可能是值得的。以下是使用时间序列数据库存储 OpenTelemetry 数据的一些优点:
-
可扩展性 - 时间序列数据库针对处理大量写入进行了优化,许多数据库都具备开箱即用的功能,例如 数据复制 和分片。
-
性能 - TSDB 对分析时间序列数据常见的查询类型进行了优化。这些查询对于标准数据库来说很难处理,因为它们来自 OLTP 与 OLAP 的两端。例如,开发人员可能希望定期在所有运行的服务器上进行非常广泛的查询,以获取特定时间段的当前指标,然后如果某个特定服务器有问题,仅分析该特定服务器的数据。一个 列数据库 会难以处理第一个查询;基于行的数据库会难以处理第二个查询。时间序列数据库旨在处理这两种查询。
-
开发者生产力 - 时序数据库内置了许多对处理可观察数据有用的功能。您无需花费开发时间将这些功能构建到通用数据库中,而是可以直接使用。这些包括降采样、保留策略以及为处理时间序列数据而设计的查询语言。
-
节省成本 - 由于上述功能,使用时序数据库可以节省硬件成本,因为效率得到提高,同时允许您的开发者专注于构建核心产品功能,从而为您的用户提供价值。
除了时序数据库,还有其他可用的选项,可能对您的可观察性有所帮助,具体取决于您的特定用例。如果您需要强大的全文搜索功能来分析日志,使用搜索引擎数据库是合理的。如果您想分析架构中不同服务之间的关系,图数据库对此进行了优化。关键是要权衡将新的数据存储添加和管理到应用程序中的复杂性,以及它带来的好处,并确定这种权衡是否值得。
数据分析
一旦您有了可观察数据存储,您可能就会想要对数据进行一些操作,而不仅仅是让它闲置。一个合理的第一步是为可视化和监控数据构建一些仪表板。完成这些后,您可以尝试分析数据并生成可能之前隐藏的见解,甚至可以尝试根据数据预测和预测。
自动化
在开始收集数据并可能进行一些基本的、需要人工干预的分析之后,下一步是开始根据可观察数据采取自动化行动。使用OpenTelemetry收集的数据,可以在软件开发周期的所有阶段进行自动化。工具如Argo和Flux可用于构建具有金丝雀测试、蓝绿部署和自动回滚等功能的部署管道。这允许您的开发者更快地将代码推送到生产环境,同时有信心,如果出现任何问题,由于OpenTelemetry收集的数据,您可以快速了解情况,并且可以撤销更改而不影响用户。一旦软件部署完成,您的遥测数据可以用来通过利用云的灵活性来根据观察到的流量趋势和利用率来上下调整服务规模,使软件更加高效。
结论
可观察性在开发者中继续获得认知和采用,OpenTelemetry有潜力作为粘合剂,将整个可观察性生态系统(包括供应商和开源项目)连接起来。因此,作为开发者,至少熟悉一下OpenTelemetry是有价值的。