建立一个有弹性的系统:我们在 Intercom 的可观察性之旅

已发表: 2022-07-14

在 Intercom,我们首先关注客户体验——我们的服务可用性和性能是我们的首要任务。 这需要我们的团队和系统具有强大的可观察性文化。

因此,我们在应用程序的可靠性上投入了大量资金。 但是不可预知的失败是不可避免的,当它们发生时,是人类来解决它们。

我们运行一个社会技术系统,它在面对逆境时恢复的能力被称为复原力。 弹性的关键组成部分之一是可观察性,即我们为使人类能够“查看”他们运行的系统内部而采取的步骤。

这篇文章将探讨建立更强大的可观察性文化的道路,以及我们在此过程中学到的教训。

对讲机的可观察性是什么意思?

在对讲机,我们是来学习的。 我们的生产环境是我们的代码、基础设施、第三方依赖项和我们的客户共同创造客观现实的地方——它是学习和验证我们工作影响的唯一场所。 我们将可观察性定义为人类提出有关生产的问题并获得答案的持续过程*。

让我们再分解一下:

  • 连续过程:成功的可观察性意味着人们尽可能频繁地观察。
  • 关于生产的问题:我们希望我们的定义是广泛的、通用的,并能代表我们所服务的广泛的工作流程。
  • 答案*:注意星号。 没有工具会给你答案,只有提供你可以跟随的线索来找到真正的答案。 您必须使用自己的心智模型和对您运行的系统的理解。

第 1 阶段:问题和解决方案

凭借我们自己对可观察性的定义,我们评估了我们现有的实践并制定了问题陈述。 直到最近,我们的可观察性工具一直主要基于指标。 一个典型的工作流程涉及查看一个充满图表的仪表板,其中的指标按各种属性组合进行切片和切块。 人们会寻找相关性,但往往在没有实现见解的情况下离开。

“指标易于添加和理解,但缺少高基数属性(例如客户 ID),因此难以完成调查”

指标易于添加和理解,但缺少高基数属性(例如客户 ID),因此难以完成调查。 以前,少数可观察性拥护者会使用辅助工具(例如日志、异常等)继续工作流程,尝试访问高基数信息并构建更全面的图景。 这项技能需要不断练习——对于大多数忙于交付产品的产品工程师来说,这是一个不切实际的要求。

我们将缺乏统一的可观察性经验确定为需要解决的问题。 我们希望任何人都可以轻松地提出关于生产的任意问题并获得洞察力,而无需掌握一套不连贯、设置不足和昂贵的工具。 为了缓解这个问题,我们决定加倍跟踪遥测。

我们在加倍跟踪之前使用的典型操作仪表板

为什么是痕迹?

任何可观察性工具都只是一个有人类支持的工具——人类需要良好的可视化。 什么样的数据为可视化提供动力并不重要,只是该工具允许您在不同的可视化之间无缝切换并获得有关问题的替代观点。

与其他遥测数据相比,跟踪具有巨大的优势——它们对有关交易的足够信息进行编码,以支持几乎任何可视化。 在跟踪之上构建可观察性工作流可确保平稳的整合体验,而无需切换基础数据或工具。

可以由跟踪驱动的一些可视化类型

第 2 阶段:实施跟踪

在 Intercom,我们从小处着手,决定成功的样子并监控整个过程中的进展。 我们的主要目标是确认跟踪将使可观察性工作流程更加高效。 为此,我们需要尽快将痕迹交到工程师手中。

“我们没有从头开始使用跟踪来检测我们的应用程序,而是使用了一个恰好已经在依赖项中的现有跟踪库”

为了节省时间,我们使用现有的供应商 Honeycomb 进行概念验证。 在过去使用他们的工具进行结构化事件时,我们已经与他们建立了良好的关系。

我们没有从头开始使用跟踪来检测我们的应用程序,而是使用恰好已经在依赖项中的现有跟踪库,并进行了小调整以将跟踪数据转换为 Honeycomb-native 格式。 我们从一个简单的确定性抽样开始,保留了我们处理的所有交易的约 1%。

使队友能够采用痕迹

将组织转移到痕迹上并非易事。 跟踪比指标或日志更复杂,并且具有陡峭的学习曲线。 仪器、数据管道和工具都很重要,但最大的挑战是让您的队友最大限度地利用跟踪。 随着我们在生产中运行概念验证,我们立即开始专注于建立可观察性文化。

“我们不仅仅关注工程师——我们与主管、技术项目经理、安全团队成员和客户支持代表进行了交谈,以强调跟踪如何帮助他们解决特定问题”

寻找盟友是成功的关键。 我们召集了一群已经擅长可观察性的冠军。 他们帮助证实了我们的假设,并在他们的团队中传播了有关痕迹的信息。 但我们不仅仅关注工程师——我们与主管、技术项目经理、安全团队成员和客户支持代表进行了交谈,以强调跟踪如何帮助他们解决特定问题。

定制我们的信息有助于锁定支持。 引入新工具总是会带来一定的风险——通过展示潜力并让人们兴奋,我们增加了成功的机会。

第 3 阶段:确定合适的供应商

随着启用计划的启动,我们开始寻找以跟踪为中心的现代供应商,并制定了一套标准来评估潜在的候选人。

工作流程:我们认为探索性工作流程是最重要的——它将使工程师能够任意分割生产数据,并通过可视化和高基数属性获得洞察力。 诊断问题的很大一部分是能够发现它,这意味着了解“正常”的样子。 我们希望通过尽可能频繁地提出问题,而不仅仅是在出现问题时,让工程师更容易地探索生产。

“我们希望完全控制数据的采样和保留方式”

采样和保留控制:我们希望完全控制数据的采样和保留方式。 确定性采样帮助我们快速启动和运行,但我们希望在保持低于合同限制的同时,使用智能动态采样更有选择性并保留更多“有趣”的跟踪(例如错误、缓慢的请求)。

准确的数据可视化:我们希望确保无论我们使用什么采样技术,可观察性工具通过在可视化中公开“真实”近似数字来透明地处理它。 每个供应商处理这个问题的方式不同——有些供应商需要将所有数据发送到全局聚合器,以推断错误率、数量等关键指标的指标。鉴于我们丰富的仪器生成的大量数据,这对我们来说不是一个选择。

定价:我们想要一个简单、可预测的定价模式,该模式与我们从工具中获得的价值相关联。 对保留和暴露的数据量收费似乎是公平的。

参与度指标:我们希望供应商成为一个好的合作伙伴,并通过公开关键使用指标和参与度来帮助我们跟踪工具的采用和有效性。

没有完美的供应商,所以要准备好做出一些妥协。 最后,我们得出结论,Honeycomb 不仅在我们确定的主要工作流程上工作得更好,而且在抽样、定价和使用指标方面也打勾——因此我们避免了代价高昂的供应商迁移。

经过一年充满挑战的工作,我们完成了可观测性计划的技术部分。 这就是我们所取得的成就:

  • 我们的主要单体应用程序已经自动检测了高质量的属性丰富的跟踪。
  • 工程师有一小部分方便的方法可以将自定义检测添加到他们的代码中。
  • 我们部署了 Honeycomb Refinery 来动态采样数据并保留更多“有趣”的痕迹。 我们鼓励工程师配置自定义保留规则以进行更精细的控制。 对于最有价值的交易,在经济可行的情况下,我们提供 100% 的保留,为人们提供他们需要的数据。

第 4 阶段:提高采用率

在致力于 Honeycomb 并完成数据管道的工作后,我们将重点转移到了启用上。 为了建立一种可观察性的文化,你必须让人们更容易参与进来。 以下是我们帮助团队采用新的可观察性工具的一些方法:

在开发环境中跟踪

为了让工程师熟悉跟踪工具并鼓励他们将其添加到他们的代码中,我们提供了来自本地开发环境的可选跟踪以及在 Honeycomb 中公开的跟踪。 这有助于人们以与代码投入生产时看到的完全相同的方式可视化新的自定义检测。

日志可能难以阅读和解释,而跟踪视图更加结构化和组织化

Slackbot 查询快捷方式

当生产遇到麻烦时,您最不想做的就是必须争夺正确的查询。 我们为“向我展示网络性能”消息添加了自定义机器人反应。 在 Slackbot 链接之后打开按服务细分的 Web 端点性能。

我们使用 Slackbot 简化了我们的可观察性工作流程,它为我们的可观察性工具中的流行查询提供了快捷方式

第 5 阶段:反思和后续步骤

衡量采用率

衡量可观察性工具的投资回报率 (ROI) 具有挑战性。 跟踪活跃用户的数量是工程师使用工具的频率的一个很好的指标,我们从 Honeycomb 的使用指标中受益匪浅。

该图表显示了自启用可观察性以来活跃 Honeycomb 用户数量的增加

我们更进一步,衡量了这些约定的有用性。 我们假设,如果从可观察性工具中获得的见解有价值,人们会与同行分享。 我们的工程工作流程严重依赖于 Github 问题,因此我们决定计算提及或链接到 Honeycomb 的问题或拉取请求的数量(跟踪、查询结果等)作为采用指标的代理。 随着我们在 2021 年底加倍支持,我们观察到提到 Honeycomb 的问题数量呈爆炸式增长,这证明我们走在正确的轨道上。

条形图显示标题或描述中提到 Honeycomb 的 GitHub 问题数量

意外的工作流程

建立一个坚实的可观察性基础启用了我们以前无法想象的工作流程。 这里有一些我们的最爱:

通知成本计划:因为我们跟踪所有流量并具有 SQL 查询、Elasticsearch 请求等的跨度,所以我们可以调查基础设施的单独共享部分(例如数据库集群)的利用率峰值,并将它们归因于单个客户。 将这些数据与单个基础设施组件的成本相匹配,我们可以为我们服务的每笔交易贴上一个近似的价格标签。 可观察性出人意料地成为我们基础设施成本计划的一个组成部分。

改进安全审计:能够保留 100% 的选定交易使我们能够保留与生产数据控制台的所有交互,帮助安全性建立对客户数据访问的更好可见性。

下一步是什么?

建立可观察性文化将继续成为我们技术计划的一部分:我们将专注于改进我们的入职材料,通过跟踪我们的研发业务进一步编织可观察性,并探索前端仪器。

有兴趣加入我们的团队吗? 在此处查看我们的开放工程职位。

职业 CTA - 工程(水平)