软件调试是开发人员的基本功能,但调试无服务器体系结构需要专用方法。Alexa 技能的后端在大多数情况下都是无服务器函数,例如使用 AWS Lambda。调试、监视和测试是无服务器面临的最大挑战,调试是最常见的挑战。

根据设计,无服务器函数很难附加任何内容。因此,我们见证了用于在本地和远程调试无服务器的新解决方案。在这篇文章中,我提出了一个解决方案来监控你的Alexa技能。

监控我们技能的内部

我们的技能后端本质上是事件驱动的。这使得调试更加困难,因为事件内容、格式或顺序的微小差异可能会产生很大的差异。模拟这些事件可能是一个很大的变化,可能加大复制和测试的难度。

当面对技能中的 Bug 时,可靠地复制它可以是一半的战斗。在许多数据驱动型环境中,实际重现 Bug 的主要因素是获取正确的输入数据。将数据从生产迁移到开发很容易需要数小时(甚至数天),并且可能会受到安全性、合规性和其他注意事项的阻碍。生产调试工具允许开发人员在生产中”野外”研究 Bug,而无需在数据迁移上浪费时间和资源,并且不公开敏感数据。

有很多工具可以帮助我们调试和监视无服务器应用程序。做一个以前的研究,寻找哪一个会更好监测亚历克萨技能,我选择了哨兵

让我们深入一点!

哨兵

Sentry是一家开源公司,提供应用程序监控平台,可帮助您实时识别问题。哨兵从根本上说是一种服务,可帮助您实时监控和修复崩溃。服务器位于 Python 中,但它包含用于在任何应用程序中从任何语言发送事件的完整 API。我们将专注于哨兵的概念上下文面包屑和环境,以适当的监测我们的技能。

上下文

哨兵支持与事件的其他上下文。通常,此上下文在其生命周期中捕获的任何事件之间共享,并包括以下组件:

我们将使用哪些上下文?这些:

  • 用户: Alexa 请求的用户
  • 标签:它允许我们对所有请求进行分类和上下文化,以监视和跟踪所有请求
  • application_id:我们技能的ID。它允许我们快速搜索,以检查一个技能的所有要求。
  • session_id:使用一个技能的一个用户的会话 ID。它将帮助我们跟踪一个用户的单个会话。
  • person_id:通过个性化,您的技能可以区分帐户中的单个演讲者。因此,如果 Alexa 识别当前语音,我们将接收 User Person 包含属性的 和 对象 person_id
  • 环境

    使用环境,我们可以根据执行环境(即 dev/prod)以及技能后端的发布来筛选事件。您可以筛选它们已部署到哪个环境的版本。例如,当 QA 和 Prod 筛选时,视图中将显示链接到 QA 部署和 Prod 部署的发布。

    面包 屑

    哨兵支持一个叫做”面包屑”的概念,这是问题之前发生的事件的跟踪。通常这些事件与传统日志非常相似,但也能够记录更丰富的结构化数据。在这些痕迹中,我们将放置我们的 Alexa 技能的相关数据,如请求(上下文、会话)、响应、执行总时间等。

    我们技能中的哨兵

    我不会从头开始这个职位。我将重用我在 Alexa 后技能、AWS 云形成和无服务器应用程序模型 (SAM)中使用的项目。

    在我们的技能中设置哨兵

    首先,我们必须添加的是文件中的哨兵依赖项 pom.xml

    Xml