Python中Sentry的使用体验与常见问题吐槽

  • 基于 docker 的安装,仍然需要手动敲一大堆部署命令
  • 仍然是基于 python2 的
  • 自己内部错误都会提示 This event was reported with an old version of the python SDK.
  • 基于 py2 导致了必须还基于 django 1.6
  • django 1.7 才支持 SSL 方式的 SMTP。django 1.6 只支持 TLS 的
  • smtp.exmail.qq.com:465 只支持 SSL 的
  • 报错提示 timeout。没什么帮助。
  • docker 起一大堆没用的 container 而不是单一 container 完成任务
  • 太重了

所以,有什么良好的替代品推荐么?


Python中Sentry的使用体验与常见问题吐槽

16 回复

自己手动部署一个把. 这货起一堆容器确实太多.


Sentry在Python项目里确实是个好东西,能帮你把线上错误抓得死死的。不过用起来也踩过不少坑,这里分享点经验。

安装和基础配置其实挺简单:

import sentry_sdk
from sentry_sdk.integrations.flask import FlaskIntegration

sentry_sdk.init(
    dsn="https://your-dsn@sentry.io/your-project",
    integrations=[FlaskIntegration()],
    traces_sample_rate=1.0,
    environment="production"
)

常见的问题和解决方案:

  1. 异步任务错误抓不到 - 特别是用Celery的时候,得单独配置:
from sentry_sdk.integrations.celery import CeleryIntegration

sentry_sdk.init(
    dsn=dsn,
    integrations=[CeleryIntegration()]
)
  1. 日志太多被限流 - Sentry有采样率控制,别啥都往上扔:
sentry_sdk.init(
    dsn=dsn,
    traces_sample_rate=0.2,  # 只采样20%的请求
    profiles_sample_rate=0.1  # 性能分析采样率更低
)
  1. 本地开发环境也上报 - 记得区分环境:
import os

sentry_sdk.init(
    dsn=dsn if os.getenv("ENV") == "production" else None,
    environment=os.getenv("ENV", "development")
)
  1. 自定义错误分组 - 有时候同类错误会被分到不同issue里,可以手动设置fingerprint:
try:
    # some code
except Exception as e:
    with sentry_sdk.configure_scope() as scope:
        scope.fingerprint = ["my-custom-error-type"]
    sentry_sdk.capture_exception(e)
  1. 敏感信息泄露 - 默认会抓request数据,记得过滤:
sentry_sdk.init(
    dsn=dsn,
    send_default_pii=False,  # 不发送个人身份信息
    request_bodies="never"    # 不记录请求体
)

个人觉得不爽的地方:

  • 错误堆栈有时候不够详细,特别是异步场景
  • 自定义错误分组逻辑不够灵活
  • 免费版的功能限制比较多

总结:配置要细致,别一股脑全上。

没用 docker
自己搭一个 pg,剩下的不就是 sentry start xxx 了吗……

某些地方难用确实是难用

古人云:多一层 docker,多一类坑

  1. 如果做得很好用,谁还用官方的付费服务?商业的本质不是慈善而是在给你创造价值的同时一定要赚钱
    2. 如果服务器足够多资源可以起个 Rancher 部署 sentry,很轻松。

用 docker-compose 部署。

https://github.com/getsentry/onpremise

很舒服。也就几个命令而已…

那个作者似乎对 django 很有意见。在 sentry 里,django 自己的内容被 sentry 作者一一替换掉,已经不剩多少了

flask 作者在 sentry 公司吧…不知道记错了没有

好像记错了…

qq 邮箱 smtp 应该也可以用 port 25 tls true ssl false 的

没记错,就是 flask 的作者在里面,不是说用 rust 替代了蛮多对性能要求高的地方吗?

要不写一个 fundebug ? (手动滑稽

感谢。后来发现了。


然而 sentry 是 django 写的。。。

其实 说了 sentry 自己已经开始替换一些 django 的内置功能了。也有人在 issue 里吐槽 sentry 为什么还不支持 django1.8,创始人也回答了,感兴趣的可以看看这个 ISSUEhttps://github.com/getsentry/sentry/issues/2429。
基于 py2 并不只是能用 django1.6。django 对 py2 的支持是到 1.11 的。 说的用 docker-compose 搭起来能解决你很多问题。
基本上错误监控能开源的我目前知道的也只有 sentry 了。功能绝对是完虐 fundebug。但 fundebug 对国内的业务场景有定制,这个比 sentry 要接地气。

功能完虐 fundebug 这个说的有点夸张了哈。Fundebug 录屏功能他们可是没有的,其他基本功能其实没啥太大差距,不过产品看个人喜好咯。

回到顶部