Amazon Web Services (AWS) Lambda 是一种基于使用情况的计算基础设施服务,可以执行 Python 3 代码。这种环境的挑战之一是确保您的 Lambda 函数的高效性能。应用程序性能监控 (APM) 在这些情况下特别有用,因为您需要根据使用资源的时间长短付费。
在这篇文章中,我们将安装和配置通过 Lambda 层工作的 Sentry 的 APM。请注意,如果您正在寻找错误监控而不是性能监控,请查看如何使用 Sentry 在 AWS Lambda 上监控 Python 函数,而不是阅读这篇文章。
AWS Lambda 的第一步
学习本教程不需要本地开发环境,因为所有编码和配置都可以通过 AWS 控制台在 Web 浏览器中进行。
登录您现有的 AWS 账户或注册一个新账户。 Lambdag 为您免费提供前 100 万个请求,以便您可以免费或以低成本执行基本应用程序。
当您登录到您的帐户时,使用搜索框输入“lambda”并在出现正确页面时选择“Lambda”。
如果您之前已经使用过 Lambda,您将在可搜索的表格中看到您现有的 Lambda 函数。我们将创建一个新函数,因此请单击“创建函数”按钮。
创建函数页面将为您提供多个用于构建 Lambda 函数的选项。
单击“浏览无服务器应用程序存储库”选择框,然后从“公共应用程序”部分中选择“hello-world-python3”启动应用程序。
hello-world-python3 入门应用程序详细信息页面应类似于以下屏幕:
在IdentityNameParameter
下填写一些示例文本,例如“test”,然后单击“Deploy”按钮:
现在将部署函数。一旦准备就绪,我们就可以对其进行自定义并进行测试,然后再添加 Sentry 以捕获执行期间发生的任何错误。
返回 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 注册过程后,您将进入主帐户仪表板。
在左侧导航栏中选择“性能”,将带您进入性能监控页面。
单击“开始设置”,然后返回到 AWS Lambda 以完成将 Sentry 的 Python 层添加到您的 Lambda 函数的步骤。
为此应用程序将 Sentry 添加到 Lambda 的最简单方法是配置一个 AWS Lambda 层,其中包含 Sentry 的必要依赖项。 Sentry 有关于通过 Lambda 层添加的简明文档,所以我们将通过这种方式来配置它并进行测试。
在您的 Lambda 函数配置中向下滚动到“层”部分。单击“添加层”按钮“:
在“添加层”屏幕中,选择“指定 ARN”选项。
现在要指定 Amazon 资源名称 (ARN),我们需要使用 Sentry 文档来获取正确的配置字符串。
US-East-1 是最古老和最常用的区域,因此我将在本教程中使用它,但如果您不确定,您应该检查您所在的区域。
将该值复制到 Lambda 层配置中,如下所示:
然后按“添加”按钮。您现在在您的环境中具有 Sentry 依赖项,因此可以在 Lambda 函数中使用依赖于该库的代码。
测试性能监控
让我们更改 Lambda 函数中的 Python 代码并测试 APM 代理。
确保您已登录您的 Sentry 账户并转到此特定的 AWS Lambda 设置指南。
您将看到一个“DSN 字符串”,我们需要将其设置为 AWS Lambda 上的环境变量以完成设置。复制与您的项目匹配的字符串,如该页面上突出显示的绿色部分所示:
我们将在 AWS Lambda 上使用环境变量来存储和访问值,例如这个 Sentry DSN 密钥。
进入 Lambda 控制台创建一个新的环境变量。为此,请单击 Lambda 中的“配置”选项卡,如下所示:
然后单击“编辑”并使用 SENTRY_DSN
键和您从 Sentry 屏幕复制的 DSN 字符串的值添加一个新的环境变量。
单击“保存”按钮并返回到您的 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 性能监控仪表板时,我们将看到一些初始结果,如下面的屏幕截图所示。
看起来不错,您在仪表板中同时拥有默认和指定的交易性能记录,您可以通过用户界面在它们(或您记录的其他交易)之间切换。
下一步是什么?
我们刚刚在 AWS Lambda 上编写并执行了一个 Python 3 函数,它使用 Sentry APM 的基础知识来获取一些初始性能监控数据。
查看 AWS Lambda 部分,了解其他开发人员提供的更多教程。
还有问题吗?在 Twitter@fullstackpython 或@mattmakai 上联系我。我也在 GitHub 上,用户名是 mattmakai。
这篇文章有问题吗?在 GitHub 上创建此页面的源代码并提交拉取请求。