使用 Sentry 监控 AWS Lambda 函数的应用程序性能

Amazon Web Services (AWS) Lambda 是一种基于使用情况的计算基础设施服务,可以执行 Python 3 代码。这种环境的挑战之一是确保您的 Lambda 函数的高效性能。应用程序性能监控 (APM) 在这些情况下特别有用,因为您需要根据使用资源的时间长短付费。

在这篇文章中,我们将安装和配置通过 Lambda 层工作的 Sentry 的 APM。请注意,如果您正在寻找错误监控而不是性能监控,请查看如何使用 Sentry 在 AWS Lambda 上监控 Python 函数,而不是阅读这篇文章。

AWS Lambda 的第一步

学习本教程不需要本地开发环境,因为所有编码和配置都可以通过 AWS 控制台在 Web 浏览器中进行。

登录您现有的 AWS 账户或注册一个新账户。 Lambdag 为您免费提供前 100 万个请求,以便您可以免费或以低成本执行基本应用程序。

AWS Lambda 登陆页面。

当您登录到您的帐户时,使用搜索框输入“lambda”并在出现正确页面时选择“Lambda”。

使用搜索栏查找 AWS Lambda。

如果您之前已经使用过 Lambda,您将在可搜索的表格中看到您现有的 Lambda 函数。我们将创建一个新函数,因此请单击“创建函数”按钮。

点击创建函数按钮。

创建函数页面将为您提供多个用于构建 Lambda 函数的选项。

创建函数详情页面。

单击“浏览无服务器应用程序存储库”选择框,然后从“公共应用程序”部分中选择“hello-world-python3”启动应用程序。

创建函数详情页面。

hello-world-python3 入门应用程序详细信息页面应类似于以下屏幕:

Hello world Python3 示例应用程序和 Lambda 函数。

IdentityNameParameter下填写一些示例文本,例如“test”,然后单击“Deploy”按钮:

单击部署按钮以使用入门应用程序。

现在将部署函数。一旦准备就绪,我们就可以对其进行自定义并进行测试,然后再添加 Sentry 以捕获执行期间发生的任何错误。

返回 Lambda 函数主页并从列表中选择您新部署的启动器应用程序。

您创建的 AWS Lambda 函数列表。

如下图所示,找到旁边带有向下箭头的橙色“测试”按钮,然后单击向下箭头。选择“配置测试事件”。

配置测试事件。

将事件名称填写为“FirstTest”或类似名称,然后按模式窗口底部的“创建”按钮。

单击“测试”按钮,它将使用来自该新测试事件的参数运行 Lambda 函数。您应该会看到类似于以下输出的内容:

Response
"value1"

Function Logs
START RequestId: 62fa2f25-669c-47b7-b4e7-47353b0bd914 Version: $LATEST
value1 = value1
value2 = value2
value3 = value3
END RequestId: 62fa2f25-669c-47b7-b4e7-47353b0bd914
REPORT RequestId: 62fa2f25-669c-47b7-b4e7-47353b0bd914  Duration: 0.30 ms   Billed Duration: 1 ms   Memory Size: 128 MB Max Memory Used: 43 MB  Init Duration: 1.34 ms

Request ID
62fa2f25-669c-47b7-b4e7-47353b0bd914

代码执行成功,下面我们来添加Sentry的性能监控,测试一些使用它的代码。

使用哨兵进行性能监控

转到 Sentry.io 的主页。

Sentry.io 主页,您可以在其中注册一个免费帐户。

登录您的帐户或注册一个新的免费帐户。登录或完成 Sentry 注册过程后,您将进入主帐户仪表板。

在左侧导航栏中选择“性能”,将带您进入性能监控页面。

点击左侧导航栏的'性能'按钮。

单击“开始设置”,然后返回到 AWS Lambda 以完成将 Sentry 的 Python 层添加到您的 Lambda 函数的步骤。

为此应用程序将 Sentry 添加到 Lambda 的最简单方法是配置一个 AWS Lambda 层,其中包含 Sentry 的必要依赖项。 Sentry 有关于通过 Lambda 层添加的简明文档,所以我们将通过这种方式来配置它并进行测试。

在您的 Lambda 函数配置中向下滚动到“层”部分。单击“添加层”按钮“:

添加 Lambda 层。

在“添加层”屏幕中,选择“指定 ARN”选项。

在添加层屏幕中选择指定 ARN。

现在要指定 Amazon 资源名称 (ARN),我们需要使用 Sentry 文档来获取正确的配置字符串。

US-East-1 是最古老和最常用的区域,因此我将在本教程中使用它,但如果您不确定,您应该检查您所在的区域。

为 ARN 字符串选择 AWS。

将该值复制到 Lambda 层配置中,如下所示:

为 ARN 字符串选择 AWS。

然后按“添加”按钮。您现在在您的环境中具有 Sentry 依赖项,因此可以在 Lambda 函数中使用依赖于该库的代码。

测试性能监控

让我们更改 Lambda 函数中的 Python 代码并测试 APM 代理。

确保您已登录您的 Sentry 账户并转到此特定的 AWS Lambda 设置指南。

您将看到一个“DSN 字符串”,我们需要将其设置为 AWS Lambda 上的环境变量以完成设置。复制与您的项目匹配的字符串,如该页面上突出显示的绿色部分所示:

复制 Sentry DSN 字符串,以便我们可以将其导出为环境变量。

我们将在 AWS Lambda 上使用环境变量来存储和访问值,例如这个 Sentry DSN 密钥。

进入 Lambda 控制台创建一个新的环境变量。为此,请单击 Lambda 中的“配置”选项卡,如下所示:

单击 Lambda 配置选项卡。

然后单击“编辑”并使用 SENTRY_DSN 键和您从 Sentry 屏幕复制的 DSN 字符串的值添加一个新的环境变量。

在 AWS Lambda 中添加环境变量。

单击“保存”按钮并返回到您的 Lambda 函数的代码编辑器。

将您的 Lambda 函数中的代码替换为以下代码:

import json
import os
import sentry_sdk
import time
from sentry_sdk.integrations.aws_lambda import AwsLambdaIntegration
from sentry_sdk import start_transaction

SENTRY_DSN = os.environ.get('SENTRY_DSN')
sentry_sdk.init(
    dsn=SENTRY_DSN,
    traces_sample_rate=1.0,
    integrations=[AwsLambdaIntegration()]
)

print('Loading function')


def lambda_handler(event, context):
    calc = 1000

    # this is custom instrumentation, see docs: https://bit.ly/2WjT3AY
    with start_transaction(op="task", name="big calculation"):
        for i in range(1, 1000):
            calc = calc * i

    print(calc)
    return event['key1']  # Echo back the first key value

以上代码导入了 Sentry 依赖项,然后在代码上运行自动检测和自定义检测。单击“部署”按钮,然后单击“测试”。代码将成功执行,当我们返回 Sentry 性能监控仪表板时,我们将看到一些初始结果,如下面的屏幕截图所示。

APM 结果显示在 Sentry 仪表板中。

看起来不错,您在仪表板中同时拥有默认和指定的交易性能记录,您可以通过用户界面在它们(或您记录的其他交易)之间切换。

下一步是什么?

我们刚刚在 AWS Lambda 上编写并执行了一个 Python 3 函数,它使用 Sentry APM 的基础知识来获取一些初始性能监控数据。

查看 AWS Lambda 部分,了解其他开发人员提供的更多教程。

还有问题吗?在 Twitter@fullstackpython 或@mattmakai 上联系我。我也在 GitHub 上,用户名是 mattmakai。

这篇文章有问题吗?在 GitHub 上创建此页面的源代码并提交拉取请求。

赞(0) 打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏