当前位置: 首页 > 科技观察

Sentry后台监控实践

时间:2023-03-12 14:23:29 科技观察

DirectoryQuickStartPrerequisitesStep1:GetCodeStep2:EnableCommitTrackingforYourRepositoryStep3:InstallDependencies&RunDemoAppConfigureOptionsReleaseVersion(Releases)BreadcrumbsEnvironmentVariables(Environment)CatchErrorCatchExceptionCatchMessage未处理的错误已处理的错误增强型事件数据快速入门先决条件演示应用程序源代码需要Python开发环境来构建、安装和运行应用程序。确保您拥有以下内容:https://www.npmjs.com/https://docs.sentry.io/product/cli/https://www.python.org/download/releases/3.0/https://code.visualstudio.com/源代码编辑器(如VS-Code)Python3Sentry-CLINPM要开始监控应用程序的错误,您需要在您的Sentry帐户中创建一个新项目。查看SentryWeb前端监控-最佳实践(官方教程)以了解有关如何创建项目和定义警报规则的更多信息。第1步:获取代码在GitHub上打开示例代码存储库https://github.com/sentry-tutorials/backend-monitoring单击Fork并选择要将此存储库分叉到的目标GitHub帐户分叉完成后,单击克隆或下载并复制存储库HTTPSURL以将分叉的存储库克隆到您的本地环境>gitclone现在示例代码在本地可用,请在您首选的代码编辑器中打开后端监控项目第2步:启用提交跟踪您的存储库哨兵可以通过建议可能将错误引入您的代码库的可疑提交来帮助您更快地解决错误。这是通过配置提交跟踪启用的。需要集成您的源代码控制解决方案并添加您的代码存储库才能启用提交跟踪,请参阅此链接了解更多信息。打开您的Sentry帐户并导航至“设置”>“集成”以启用GitHub集成并添加您的后端监控存储库。有关更多信息,请按照我们的GitHub文档中描述的步骤操作。https://docs.sentry.io/product/releases/?platform=node/suspect-commits/https://docs.sentry.io/product/integrations/source-code-mgmt/github/第三步:安装SDKSentry在应用程序运行时使用特定于平台的SDK捕获数据。要使用SDK,请在源代码中导入、初始化和配置它。要开始在我们的Django应用程序中使用SDK,我们通过在requirements.txt文件中定义依赖项来安装sentry-sdk。SentrySDKGitHub存储库中提供了SDK文档和发布信息。https://github.com/getsentry/sentry-python打开settings.py文件(位于./backend-monitoring/myproject/settings.py下)。这是我们在应用程序中初始化和配置SentrySDK的地方。在应用程序中导入SentrySDK之后,导入SentryDjango集成也很重要。集成扩展了SDK的一些通用框架和库的功能。importsentry_sdkfromsentry_sdk.integrations.djangoimportDjangoIntegration在SentrySDK配置中,输入您从上一教程中创建的项目中复制的dsn密钥。sentry_sdk.init(dsn="YOUR_DSN",integrations=[DjangoIntegration()])第4步:安装依赖项并运行演示应用程序在本地主机上构建并运行演示应用程序打开shell终端并将目录更改为后端监控项目根文件夹如果您没有安装Python3,运行以下命令:brewinstallpython3安装virtualenv和virtualenvwrapper:pip3installvirtualenvvirtualenvwrapperecho"source/usr/local/bin/virtualenvwrapper.sh">>~/.bashrcexecbash安装Sentry的命令行工具以使用发布跟踪和GitHub集成提交数据:npminstall-g@sentry/cli在项目根目录下设置并激活Python3虚拟环境。mkvirtualenv--python=python3sentry-demo-django您可以随意命名虚拟环境,在我们的例子中,我们将其命名为sentry-demo-django要激活虚拟环境,请运行:workonsentry-demo-django打开Makefile中包含的项目在根文件夹中。这里使用这个文件来模拟一个CI/CD过程。遵循部署目标执行流程。请注意,除了安装Python要求和运行服务器之外,我们还利用sentry-cli创建一个新的SentryRelease并将提交与该版本相关联。当Sentry建议您的项目出现问题时,他们会查找可疑的提交。Makefile中提到的命令将在下一节配置选项中详细解释要执行sentry-cli命令,请按照此处描述的说明获取SENTRY_AUTH_TOKEN、SENTRY_ORG和SENTRY_PROJECT环境变量的值。可以通过环境变量或专用配置文件提供这些值来配置Sentry-cli。有关详细信息,请参阅SentryCLI>配置和身份验证https://docs.sentry.io/product/cli/configuration/运行以下命令以安装所需的Python库、设置SentryRelease并运行Django服务器:makedeploy在终端中,注意创建了一个新版本并且提交与它相关联。部署成功完成后,您将在终端中看到配置选项Releasesrelease是部署到环境中的代码版本的确认信息。配置Release可帮助您识别代码中的回归、追究责任、解决Sentry中的问题并与部署保持同步。发布需要在您的SDK中配置,然后通过sentry-cli进行管理,以支持其他功能,例如可疑提交和建议的受让人。sentry-cli:https://docs.sentry.io/product/cli/Sentry目前支持与GitHub、Bitbucket、AzureDevOps、GitLab等的集成。有关我们集成的完整列表,请查看我们的集成文档。集成:https://docs.sentry.io/product/integrations/让我们看看我们如何在此项目中设置发布:打开文件settings.py。请注意,我们在初始化SDK时添加了发布配置选项。release=os.environ.get("VERSION"),打开您在上一教程中运行的Makefile。请注意,我们将发布版本名称设置为环境变量,然后在应用程序的运行时中使用。我们让CLI建议发布版本名称,但您可能希望应用您的命名约定:VERSION=`sentry-clireleasespropose-version`然后我们使用建议/选择的名称为我们的项目创建一个新版本>create_release:sentry-clireleases-o$(SENTRY_ORG)new-p$(SENTRY_PROJECT)$(VERSION)在之前的教程中,我们配置了GitHub集成并添加了一个用于提交跟踪的代码存储库。现在我们可以通过运行以下命令将来自该存储库的提交与新版本相关联:导致错误的事件。它们在尝试重现问题时非常有用。根据平台的不同,SDK将默认跟踪各种类型的面包屑(对于后端SDK,这些是数据库查询、网络事件、日志记录等),您还可以添加自定义面包屑。让我们看看如何将面包屑添加到我们的应用程序:打开文件myapp>view.py并注意我们从SDK库中导入了add_breadcrumb。fromsentry_sdkimportadd_breadcrumb我们为视图类中的每个方法处理程序创建一个自定义面包屑。此面包屑将添加到与通过这些方法调用流程触发的任何错误相关联的面包屑轨迹中。例如在HandledErrorView:get:add_breadcrumb(category='URLEndpoints',message='Inthehandledfunction',level='info',)环境变量(Environment)Environment是一个强大的配置选项,可以让开发者在各种工作流中使用Sentry(过滤问题、触发警报等)在发生错误的部署环境的上下文中执行。打开settings.py文件,注意我们使用环境配置选项初始化SDK。SDK将捕获的任何事件都将使用配置的环境值进行标记。environment:"Production"注意:Environment值是一个自由格式的字符串。SentrySDK或UI不限制您使用任何特定的值或格式。在此示例中,我们对值进行了硬编码。在实际应用程序中,此值可能通过属性配置文件、系统或环境变量动态确定。CatchingErrorsUnhandledErrorsSentrySDK将自动捕获并报告应用程序运行时发生的任何未处理错误,无需任何额外配置或显式处理。通常,未处理的错误是未被任何except(或try/catch)子句捕获的错误。在浏览器中,在以下端点启动本地Django应用程序以触发未处理的错误:http://localhost:8000/unhandled。如果您设置了警报规则,您应该会收到有关错误的通知。否则,请在您的Sentry帐户中打开问题视图。请注意,未处理的异常出现在您的问题流中。单击问题以打开问题详细信息页面。请注意事件:标记为我们在上一教程中设置的环境和发布选项并处理:否-将此事件标记为未处理的错误。包含我们之前启用的提交跟踪功能启用的可疑提交。包含我们通过SDK添加的自定义面包屑。已处理的错误SentrySDK包含可用于在异常子句、代码的关键区域等中显式报告错误、事件和自定义消息的方法。捕获异常会打开views.py文件。请注意,我们导入了包含capture_exception方法的sentry_sdk库。importsentry_sdk该方法用于捕获HandledErrorView中except子句处理的异常。要在您的本地主机上试用它,请触发以下端点:http://localhost:8000/handled。类似于未处理的错误,打开新问题的详细信息页面。请注意,事件标记有相同的环境和环境配置选项。将鼠标悬停在发布标签中的i图标上以显示发布信息和与之关联的提交。单击发布的i图标以导航到发布页面。捕获消息通常,不会发出capture_message,但有时开发人员可能希望向其应用程序添加一条简单的消息以进行调试,而capture_message对此非常有用。在views.py文件中,通过sentry_sdk库导入提供了capture_message方法。您可以在应用程序的任何位置使用它。在我们的示例中,我们创建了一个专用视图类CaptureMessageView来触发和捕获我们想要跟踪的消息sentry_sdk.capture_message("Youcaughtme!")要在您的本地主机上试用它,请触发以下端点:http://localhost:8000/信息。和以前一样,从您的问题流中打开新问题的详细信息页面。默认情况下,捕获的消息被标记为level:info的严重级别,如标志部分所示。但是,capture_message方法接受一个可选的严重级别参数。在views.py文件中,继续将capture_message方法更改为:sentry_sdk.capture_message("Youcaughtme!","fatal")保存更改并再次触发/message端点。(更改应立即通过StateReloader应用)请注意,新事件的严重性级别标签现在显示级别:致命。增强事件数据您可以通过添加自定义标签和用户上下文属性,使用SentrySDK来丰富您的事件和错误数据。除了为您的错误提供更多上下文之外,它们还将扩展您的选项以按事件元数据进行搜索、过滤和查询。有关丰富数据优势的更多信息,请参阅让数据发挥作用。让您的数据发挥作用:https://docs.sentry.io/product/sentry-basics/guides/enrich-data/让我们使用capture_message来丰富我们捕获的消息事件的数据。在views.py文件中,找到触发sentry_sdk.capture_message的行。将此行替换为以下代码:withsentry_sdk.push_scope()asscope:scope.set_tag("my-tag","myvalue")scope.user={"email":"my.email@your.domain.com"}scope.set_extra("someVariable","somedata")sentry_sdk.capture_message("Youcaughtme!","fatal")注意:我们正在使用push_scope方法,它允许我们在本地范围内发送带有一个特定事件的数据。我们在本地设置自定义标签、用户上下文属性(电子邮件)和额外数据,以丰富消息事件的数据。保存更改并再次触发/message端点。从您的问题流中打开问题的详细信息页面。请注意:用户电子邮件现在显示在详细信息页面上,受此事件影响的唯一用户数反映在问题标题中。自定义标签现在在标签列表中可用(并且可搜索)。