Sentry 后端监控 - 最佳实践(官方教程)
系列
- 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本
- 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps
- Sentry For React 完整接入详解
- Sentry For Vue 完整接入详解
- Sentry-CLI 使用详解
- Sentry Web 性能监控 - Web Vitals
- Sentry Web 性能监控 - Metrics
- Sentry Web 性能监控 - Trends
- Sentry Web 前端监控 - 最佳实践(官方教程)
目录
- 快速开始
- 前置条件
- Step 1: 获取代码
- Step 2: 为您的存储库启用提交跟踪
- Step 3: 安装
SDK
- Step 4: 安装依赖项 & 运行
Demo App
- 配置选项
- 发布版本(
Releases
) - 面包屑(
Breadcrumbs
) - 环境变量(
Environment
)
- 发布版本(
- 捕获错误
- 未处理的错误
- 处理的错误
- 捕获
Exception
- 捕获
Message
- 捕获
- 增强事件数据
快速入门
前置条件
demo app
源代码需要Python
开发环境来构建安装和运行应用程序。确保您已准备好以下各项:- 源代码编辑器(如
VS-Code
) Python3
Sentry-CLI
NPM
- 源代码编辑器(如
- 要开始监控应用程序中的错误,您需要在 Sentry 帐户中创建一个新项目。请查看Sentry Web 前端监控 - 最佳实践(官方教程)以了解有关如何创建项目和定义警报规则的更多信息。
Step 1: 获取代码
- 在
GitHub
上打开示例代码存储库 - 单击
Fork
并选择您希望将此存储库分叉到的目标GitHub
帐户 - 分叉完成后,单击
Clone
或download
并复制存储库HTTPS URL
4. 将分叉的存储库克隆到您的本地环境
> git clone <repository HTTPS url>
- 既然示例代码在本地可用,请在您首选的代码编辑器中打开
backend-monitoring
项目
Step 2: 为您的存储库启用提交跟踪
Sentry
可以通过建议可能将错误引入您的代码库的可疑提交来帮助您更快地解决错误。 这是通过配置提交跟踪启用的。 需要集成您的源代码管理解决方案并添加您的代码存储库才能启用提交跟踪,有关更多信息,请参阅此链接。
- 打开您的
Sentry
帐户并导航到Settings > Integrations
以启用GitHub 集成
并添加您的backend-monitoring
存储库。 有关更多信息,请按照我们的 GitHub 文档中描述的步骤操作。
Step 3: 安装 SDK
Sentry 通过在应用程序运行时中使用特定于平台的 SDK 来捕获数据。 要使用 SDK,请在源代码中导入、初始化和配置它。
- 要开始在我们的
Django
应用程序中使用SDK
,我们通过在requirements.txt
文件中定义依赖项来安装sentry-sdk
。Sentry SDK GitHub
存储库中提供了SDK
文档和release
信息。 - 打开
settings.py
文件(位于 ./backend-monitoring/myproject/settings.py 下)。 这是我们在应用程序中初始化和配置Sentry SDK
的地方。 - 将
Sentry SDK
导入应用程序后,导入Sentry Django
集成也很重要。集成扩展了SDK
的一些常见框架和库的功能。import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration
- 在
Sentry SDK
配置中,输入您从上一教程中创建的项目中复制的dsn key
。sentry_sdk.init(
dsn="YOUR_DSN",
integrations=[DjangoIntegration()]
)
Step 4: 安装依赖项 & 运行 Demo App
在 localhost
上构建和运行 Demo
应用程序
打开 shell 终端并将目录更改为
backend-monitoring
项目根文件夹如果您尚未安装 Python3,请运行以下命令:
brew install python3
安装
virtualenv
和virtualenvwrapper
:pip3 install virtualenv virtualenvwrapper
echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc
exec bash
安装
Sentry
的命令行工具以使用release tracking
和GitHub integration
来提交数据:npm install -g @sentry/cli
在项目根目录中设置并激活
Python 3
虚拟环境。mkvirtualenv --python=python3 sentry-demo-django
您可以随意命名 virtual environment,在我们的例子中,我们将其命名为 sentry-demo-django
要激活虚拟环境,请运行:
workon sentry-demo-django
打开包含在项目根文件夹中的
Makefile
。 该文件在此处用于模拟CI/CD
流程。遵循
deploy
目标执行流程。请注意,除了安装 Python 要求和运行服务器之外,我们还利用
sentry-cli
创建一个新的Sentry Release
,并将提交与该版本相关联。在为您的项目问题建议可疑提交时,Sentry 将查找这些提交。 Makefile 中提到的命令将在下一部分配置选项中详细解释要执行
sentry-cli
命令,请按照此处描述的说明获取SENTRY_AUTH_TOKEN
、SENTRY_ORG
和SENTRY_PROJECT
环境变量的值。可以通过环境变量或专用配置文件提供这些值来配置
sentry-cli
。 有关更多信息,请参阅Sentry CLI > Configuration and Authentication
运行以下命令安装所需的
Python
库,设置Sentry Release
,并运行Django server
:make deploy
在终端中,请注意创建了一个新 release 并且提交与其相关联。 部署成功完成后,您将在终端中看到确认信息
配置选项
发布版本(Releases)
release
是部署到环境中的代码版本。 配置 Release
有助于您确定代码中是否存在回归(regression
)、追究责任(hold accountability
)、解决 Sentry
中的问题(issues
)以及与部署保持同步。 Releases
需要在您的 SDK
中进行配置,然后通过 sentry-cli
进行管理以支持额外的功能,例如可疑提交(suspect commits
)和建议的受理人(suggested assignee
)。
- sentry-cli:https://docs.sentry.io/product/cli/
Sentry
目前支持与 GitHub
、Bitbucket
、Azure DevOps
、GitLab
等的集成。 有关我们集成的完整列表,请查看我们关于集成的文档。
- Integrations:https://docs.sentry.io/product/integrations/
让我们看看我们如何在这个项目中设置 release
:
打开文件
settings.py
。请注意,我们在初始化SDK
时添加了release
配置选项。release=os.environ.get("VERSION"),
打开您在上一教程中运行的
Makefile
。
请注意,我们将
release version
名称设置为环境变量,然后在应用程序的运行时中使用。我们让CLI
建议release version
名称,但您可能希望应用您的命名约定:VERSION=`sentry-cli releases propose-version`
然后我们使用
建议/选择(proposed/selected)
的名称为我们的项目创建新release
> create_release:
sentry-cli releases -o $(SENTRY_ORG) new -p $(SENTRY_PROJECT) $(VERSION)
在上一个教程中,我们配置了 GitHub 集成并添加了用于提交跟踪的代码存储库。 现在我们可以通过运行以下命令将来自该存储库的提交与新版本相关联:
> associate_commits:
sentry-cli releases -o $(SENTRY_ORG) -p $(SENTRY_PROJECT) \
set-commits $(VERSION) --auto
面包屑(Breadcrumbs)
Breadcrumbs
是导致错误的事件的踪迹。在尝试重现问题时,它们非常有用。 根据平台,SDK
将默认跟踪各种类型的面包屑(对于后端 SDK
,这些是数据库查询、网络事件、日志记录等),您也可以添加自定义面包屑。
让我们看看如何将面包屑添加到我们的应用程序中:
打开文件
myapp > view.py
请注意,我们从
SDK
库中导入了add_breadcrumb
。from sentry_sdk import add_breadcrumb
我们为视图类中的每个方法处理程序创建一个自定义面包屑。 此面包屑将添加到与通过这些方法调用流触发的任何错误相关联的面包屑轨迹中。 例如,在
HandledErrorView:get
下:add_breadcrumb(
category='URL Endpoints',
message='In the handled function',
level='info',
)
环境变量(Environment)
Environment
是一个强大的配置选项,它使开发人员能够使用 Sentry
在发生错误的部署环境的上下文中执行各种工作流(过滤问题、触发警报等)。
- 打开
settings.py
文件 - 请注意,我们使用环境配置选项初始化
SDK
。SDK
将捕获的任何事件都将使用配置的环境值进行标记。environment:"Production"
注意:Environment 值是自由格式的字符串。
Sentry SDK
或UI
不会限制您使用任何特定值或格式。在本例中,我们对值进行了硬编码。 在现实生活中的应用程序中,该值可能会通过属性配置文件、系统或环境变量动态确定。
捕获错误
未处理的错误
Sentry SDK
将自动捕获并报告在您的应用程序运行时发生的任何未处理的错误,无需任何额外配置或显式处理。 通常,未处理的错误是没有被任何 except
(或 try/catch
)子句捕获的错误。
在您的浏览器中,在以下端点中启动本地
Django
应用程序以触发未处理的错误:http://localhost:8000/unhandled
。如果您设置了警报规则,您应该会收到有关错误的通知。否则,在您的
Sentry
帐户中打开问题(Issues
)视图。请注意未处理的异常出现在您的问题流(
Issues Stream
)中。
单击
issue
,打开issue
详细信息页面。
注意事件:
- 用我们在上一教程中设置的
environment
和release
选项进行标记并handled:no
- 将此事件标记为未处理的错误。 - 包含由我们之前启用的提交跟踪功能启用的可疑提交(
Suspect Commit
)。 - 包含我们通过
SDK
添加的自定义面包屑。
- 用我们在上一教程中设置的
处理的错误
Sentry SDK
包含多种方法,您可以利用这些方法在 except
子句、代码的关键区域等中显式(explicitly
)报告错误、事件和自定义消息。
捕获 Exception
打开
views.py
文件。请注意,我们导入了包含capture_exception
方法的sentry_sdk
库。import sentry_sdk
该方法用于捕获由
HandledErrorView
中的except
子句处理的异常。
要在您的本地主机上试用,请触发以下端点:
http://localhost:8000/handled
。与未处理的错误类似,打开新问题(
issue
)的详细信息页面。请注意,该事件使用相同的
environment
和environment
配置选项进行标记。 将鼠标悬停在release tag
中的i
图标上以显示release
信息和与其关联的提交。
单击
release
的i
图标以导航到release
页面。
捕获 Message
通常,不会发出 capture_message
,但有时开发人员可能希望在他们的应用程序中添加一条简单的消息以进行调试,而 capture_message
对此非常有用。
在
views.py
文件中,capture_message
方法通过sentry_sdk
库导入提供。您可以在应用程序中的任何位置使用它。 在我们的示例中,我们创建了一个专用的视图类
CaptureMessageView
来触发和捕获我们想要跟踪的消息sentry_sdk.capture_message("You caught me!")
要在您的本地主机上试用,请触发以下端点:
http://localhost:8000/message
。和以前一样,从您的问题流(
Issues Stream
)中打开新问题的详细信息页面。
默认情况下,捕获的消息用严重(
severity
)级别标记level:info
标记,如标记部分所示。 但是,capture_message
方法接受可选的严重性级别参数。在
views.py
文件中,继续将capture_message
方法更改为:sentry_sdk.capture_message("You caught me!", "fatal")
保存更改并再次触发
/message
端点。(更改应立即通过StateReloader
应用)请注意,新事件的严重性级别标签现在显示
level:fatal
。
增强事件数据
您可以通过添加自定义标签和用户上下文属性,通过 Sentry SDK
丰富您的事件和错误数据。 除了为您的错误提供更多上下文之外,这些还将扩展您的选项以通过事件元数据进行搜索、过滤和查询。有关丰富数据的优势的更多信息,请参阅让数据发挥作用。
- Put your Data to Work:https://docs.sentry.io/product/sentry-basics/guides/enrich-data/
让我们用 capture_message
丰富我们捕获的消息事件的数据。
在
views.py
文件中,找到触发sentry_sdk.capture_message
的行。用以下代码替换该行:
with sentry_sdk.push_scope() as scope:
scope.set_tag("my-tag", "my value")
scope.user = { "email" : "my.email@your.domain.com" }
scope.set_extra("someVariable", "some data") sentry_sdk.capture_message("You caught me!", "fatal")
注意:我们正在使用 push_scope 方法,该方法允许我们在本地范围内发送具有一个特定事件的数据。 我们在本地范围内设置自定义标签、用户上下文属性(电子邮件)和额外数据,以丰富消息事件的数据。
保存更改并再次触发
/message
端点。从您的问题流(
Issues Stream
)打开问题的详细信息页面。请注意:
user email
现在显示在详细信息页面上,受此事件影响的唯一用户数反映在issue
的标题中。custom tag
现在在标签列表中可用(和可搜索)。
公众号:黑客下午茶
Sentry 后端监控 - 最佳实践(官方教程)的更多相关文章
- Sentry Web 前端监控 - 最佳实践(官方教程)
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- 快速web开发中的前后端框架选型最佳实践
这个最佳实践是我目前人在做的一个站点,主要功能: oauth登录 发布文章(我称为"片段"),片段可以自定义一些和内容有关的指标,如“文中人物:12”.支持自定义排版.插图.建立相 ...
- Kubernetes集群的监控报警策略最佳实践
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/M2l0ZgSsVc7r69eFdTj/article/details/79652064 本文为Kub ...
- 转载:Google 官方应用架构的最佳实践指南 赞👍
官方给的实践指南,很有实际的指导意义, 特别是对一些小公司,小团队,给了很好的参考意义. 原文地址: https://developer.android.com/topic/libraries/ar ...
- 京东前端:PhantomJS 和NodeJS在网站前端监控平台的最佳实践
1. 为什么需要一个前端监控系统 通常在一个大型的 Web 项目中有很多监控系统,比如后端的服务 API 监控,接口存活.调用.延迟等监控,这些一般都用来监控后台接口数据层面的信息.而且对于大型网站系 ...
- Sentry-JS-SDK-Browser 官方示例最佳实践
系列 SDK 开发 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(理念与设计原则篇) 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(开发基础篇) 顶级开源项目 Sent ...
- ****RESTful API 设计最佳实践(APP后端API设计参考典范)
http://blog.jobbole.com/41233/ 背景 目前互联网上充斥着大量的关于RESTful API(为方便,下文中“RESTful API ”简写为“API”)如何设计的文章,然而 ...
- EffectiveTensorflow:Tensorflow 教程和最佳实践
Tensorflow和其他数字计算库(如numpy)之间最明显的区别在于Tensorflow中的操作是符号. 这是一个强大的概念,允许Tensorflow进行所有类型的事情(例如自动区分),这些命令式 ...
- 听说你还不会用Dagger2?Dagger2 For Android最佳实践教程
前言 Dagger2是现在非常火的一个依赖注入框架,目前由Google维护,在Github上面已经有12K star了.Dagger2的入门门槛其实是比较高的,据了解,目前有很多Android工程师对 ...
随机推荐
- 洛谷P2858题解
这是一道裸的第二类区间DP(由已知区间向外扩展)题. 首先定义 \(f_{i,j}\) 为最后 \(j-i+1\) 个数取 \([i,j]\) 这个区间时,\([i,j]\) 这个区间可以产生的最大价 ...
- 工具idea 基于maven 创建springMVC项目
SpringMVC Spring MVC是Spring提供的一个强大而灵活的web框架.借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单.这些控制器一般不 ...
- Xmind-xss漏洞复现并上线Coblat-strike
前言:本漏洞由WebRay烽火台实验室发现,Xmind2020存在xss漏洞,并且可以进行任意代码执行,目前官方还未进行补丁修复,所以请目前Xmind用户警惕Xmind文件. 本博客讲复现漏洞及上线到 ...
- Windows协议 Kerberos篇
认证流程 角色 功能 Domain Controller 也就是域控 Key Distribution Center 秘钥分发中心,简称KDC,默认安装在域控里,包括AS.AD和TGS. Accoun ...
- 中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂(上)
前言 当下,正面临着近几年来的最严重的互联网寒冬,听得最多的一句话便是:相见于江湖~.缩减HC.裁员不绝于耳,大家都是人心惶惶,年前如此,年后想必肯定又是一场更为惨烈的江湖厮杀.但博主始终相信,寒冬之 ...
- Nacos 权限控制介绍及实战
方案背景 Nacos自开源依赖,权限控制一直需求比较强烈,这也反应了用户需求将Nacos部署到生产环境的需求.最新发布的Nacos 1.2.0版本已经支持了服务发现和配置管理的权限控制,保障用户安全上 ...
- Numpy数组的组合与分割详解
在介绍数组的组合和分割前,我们需要先了解数组的维(ndim)和轴(axis)概念. 如果数组的元素是数组,即数组嵌套数组,我们就称其为多维数组.几层嵌套就称几维.比如形状为(a,b)的二维数组就可以看 ...
- 目录已存在导致Jenkins项目构建失败的解决方法
Jenkins中的项目在下载源代码时,如果Working Directory中存在未加入版本控制的文件或者目录已经存在于SVN库中,会导致更新失败,整个构建终止,解决方法是将SVN的检出策略由&quo ...
- 5、Python断言及常用断言函数总结
Python断言 Python assert 语句,又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行:反之,Python 解释器会报 As ...
- Java 横向技术 Spring框架【笔记】
Java横向技术 spring框架[笔记] Spring 的两大特性是什么? AOP(Aspect Oriented Programming,面向切面编程)与 IOC(Inverse of Contr ...