sentry中python sdk 捕捉异常原理

最近有个任务把线上的异常用sentry收集,搭建和上报还是比较顺利。官网文档详细。点个赞。部署上线后,我对它是怎么捕捉异常的产生疑问,下载了源码(https://github.com/getsentry/sentry-python),分析了一下。

 

首先,查看sentry_sdk中api.py文件,这里的一个capture_exception方法引起了我的注意,应该能顺着它知道捕捉异常的地方;

跳转进入hub.capture_execption:

貌似并没有什么特殊。再看看event_from_exception

也没有看出它在哪里捕捉了原来的异常。

再看看integrations(集成)目录,像是适配不同的服务的日志收集,应该是我们要找的东西,要找到异常,那应该是跟except有关,打开可疑的excepthook目录瞧一瞧。

果然就是它了。

它通过python的excepthook实现捕捉异常,上报。

写一个简单例子,让python触发异常的时候,先调用一些我们定义的东西:

>>> import sys
>>> def myExcepthook(ttype, tvalue, ttraceback):
...     print("进入我定义的异常")
...     print("例外类型:{}".format(ttype))
...     print("例外对象:{}".format(tvalue))
...     print("结束我定义的异常")
...
>>> sys.excepthook = myExcepthook
>>> 1/0
进入我定义的异常
例外类型:<type 'exceptions.ZeroDivisionError'>
例外对象:integer division or modulo by zero
结束我定义的异常

在把excepthook设置回None.

>>> sys.excepthook = None
>>> 1/0
sys.excepthook is missing
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero

又恢复了。

更多excepthook使用例子:https://www.programcreek.com/python/example/1013/sys.excepthook

 

### 使用 Sentry SDK Profiler 功能 为了启用和配置 Sentry SDK 的性能分析 (profiler) 功能,可以按照如下方法操作: 在 Python 应用程序中集成 Sentry 并开启性能监控支持时,除了常规初始化外还需要特别指定 `profiles_sample_rate` 参数。此参数决定了有多少比例的事务会被采样用于性能剖析。 ```python import sentry_sdk sentry_sdk.init( dsn="YOUR_DSN", traces_sample_rate=1.0, # 控制追踪样本率 profiles_sample_rate=1.0 # 控制性能剖面样本率 ) ``` 当设置了上述参数之后,Sentry 将会自动收集应用程序运行期间的关键路径上的调用栈信息以及其他元数据,并将其上传至服务器以便进一步处理与展示[^1]。 对于更细粒度控制哪些部分应该被纳入性能监测范围之内,则可以通过手动创建带有特定上下文环境或者标签标记的自定义事务来进行更加精确的数据捕捉[^4]。 值得注意的是,在开发环境中过度频繁地触发完整的性能快照可能会带来额外开销;因此建议合理调整 `sampleRate` 或者仅针对生产环境下重要的业务逻辑执行性能检测[^2]。 此外,如果希望获取关于具体函数级别的性能瓶颈洞察,还可以考虑结合其他工具如 SkyWalking 来实现更为全面的服务端到客户端全链路可视化跟踪能力[^3]。 #### 注意事项 - 确保已正确安装并导入了 `sentry_sdk` 模块。 - 替换 `"YOUR_DSN"` 为实际项目对应的 DSN 地址。 - 考虑到资源消耗问题,请谨慎设定 `traces_sample_rate` 和 `profiles_sample_rate` 值大小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值