开放的编程资料库

当前位置:我爱分享网 > Python教程 > 正文

如何使用 Sentry 监控 AWS Lambda 上的 Python 函数

Amazon Web Services (AWS) Lambda 是一种基于使用情况的计算服务,可以运行 Python 3 代码。在您运行应用程序的任何环境中都可能发生错误,因此有必要进行可靠的监控,以便在出现问题时能够看到。

在这篇文章中,我们将安装和配置 Sentry 的应用程序监控服务,该服务专门用于在 AWS Lambda 上运行的代码。

应用依赖

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

示例代码可以从这篇博文中复制和粘贴,或者您可以在 GitHub 上的 monitor-python-aws-lambda-sentry 目录中的 Full Stack Python blog-post-examples 存储库下访问它。

访问 AWS Lambda 服务

登录您现有的 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 以捕获执行期间发生的任何错误。

测试入门 Python 应用

返回 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

这意味着测试用例是成功的,但是即使代码中存在直接错误(例如尝试访问未声明的变量)会发生什么情况?

进入代码编辑器,您应该会看到像这样的起始代码:

AWS Lambda 中的代码编辑器。

使用新突出显示的行更新代码,该行尝试访问第四个变量,我们尝试运行它的测试配置中不存在该变量。

import json

print('Loading function')


def lambda_handler(event, context):
    #print("Received event: " + json.dumps(event, indent=2))
    print("value1 = " + event['key1'])
    print("value2 = " + event['key2'])
    print("value3 = " + event['key3'])
    print("value4 = " + event['key4'])
    return event['key1']  # Echo back the first key value
    #raise Exception('Something went wrong')

添加一行新代码后,点击“部署”按钮,然后点击“测试”按钮。您应该会看到一些错误输出:

Response
{
  "errorMessage": "'key4'",
  "errorType": "KeyError",
  "stackTrace": [
    [
      "/var/task/lambda_function.py",
      11,
      "lambda_handler",
      "print(\"value4 = \" + event['key4'])"
    ]
  ]
}

Function Logs
START RequestId: a4e956bd-cce4-403e-b5e7-e95bc3ffa2cb Version: $LATEST
value1 = value1
value2 = value2
value3 = value3
'key4': KeyError
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 11, in lambda_handler
    print("value4 = " + event['key4'])
KeyError: 'key4'

END RequestId: a4e956bd-cce4-403e-b5e7-e95bc3ffa2cb
REPORT RequestId: a4e956bd-cce4-403e-b5e7-e95bc3ffa2cb  Duration: 0.81 ms   Billed Duration: 1 ms   Memory Size: 128 MB Max Memory Used: 43 MB  Init Duration: 1.61 ms

Request ID
a4e956bd-cce4-403e-b5e7-e95bc3ffa2cb

当我们在控制台中工作时,很明显发生了一个错误。然而,在大多数情况下,错误会偶尔发生,这就是为什么我们需要一个监控系统来捕获和报告这些异常。

使用 Sentry 监控 AWS 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 函数中使用依赖于该库的代码。

接下来我们需要进入 Sentry 仪表板创建一个项目,获取我们的唯一标识符,并将其连接到我们的 Lambda 函数。

Sentry 可以通过 Sentry.io 自托管或用作云服务。我们将使用云托管版本,因为它比设置您自己的服务器更快,而且对于较小的项目是免费的。

转到 Sentry.io 的主页。

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

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

我们的帐户控制面板上还没有记录任何错误,这符合预期,因为我们尚未将我们的帐户连接到我们的 Lambda 函数。

点击左侧导航栏的“项目”,然后点击右上角的“创建项目”。

在“选择平台”下,选择“无服务器”,然后选择“AWS Lambda (Python)”,如下所示:

在平台选项下选择 AWS Lambda (Python)。

决定它应该根据什么标准从 Lambda 中发送错误信息。对于本教程,我们将让它发送每个异常。然后单击“创建项目”。按钮。

您可以让 Sentry 自动处理检测,但我们将为我们的函数手动处理。在下一个屏幕上,Sentry 将为您提供您唯一的 DSN 字符串,我们的功能将需要它。

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

通常,您会希望在 AWS Lambda 上使用环境变量来存储和访问 Sentry 密钥等值。

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

单击 Lambda 配置选项卡。

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

在 AWS Lambda 中添加环境变量。

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

使用以下突出显示的新代码行更新您的 Lambda 函数,以将错误发送到 Sentry。

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

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

print('Loading function')


def lambda_handler(event, context):
    #print("Received event: " + json.dumps(event, indent=2))
    print("value1 = " + event['key1'])
    print("value2 = " + event['key2'])
    print("value3 = " + event['key3'])
    print("value4 = " + event['key4'])
    return event['key1']  # Echo back the first key value
    #raise Exception('Something went wrong')

单击“部署”按钮,然后单击“测试”。该代码将抛出错误,当我们返回到 Sentry 仪表板时,我们将看到它被捕获并可以查看以供进一步检查。

Sentry 仪表板中的 AWS Lambda 异常。

有效!接下来,您可能希望调整异常报告标准,以确保在您不想看到所有异常时收到正确数量的异常警报。

下一步是什么?

我们刚刚在 AWS Lambda 上编写并执行了一个 Python 3 函数,然后将异常消息捕获到 Sentry 日志中。您现在可以继续构建您的 Python 代码,因为您知道当出现问题时您将完全了解发生了什么。

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

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

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

未经允许不得转载:我爱分享网 » 如何使用 Sentry 监控 AWS Lambda 上的 Python 函数

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏