https://blog.windrunner.me/tool/sentry.html
Sentry 是一个开源的实时错误报告工具,支持 web 前后端、移动应用以及游戏,支持 Python、OC、Java、Go、Node、Django、RoR 等主流编程语言和框架 ,还提供了 GitHub、Slack、Trello 等常见开发工具的集成。
通常我们所说的 Sentry 是指 Sentry 的后端服务,由 Django 编写。8.0 版本使用了 React.js 构建前端 UI。使用 Sentry 前还需要在自己的应用中配置 Sentry 的 SDK —— 通常在各语言的包管理工具中叫做 Raven。
当然,Sentry 还可以是其公司所提供的 Sentry SaaS 服务。
Sentry 服务支持多用户、多团队、多应用管理,每个应用都对应一个 PROJECT_ID,以及用于身份认证的 PUBLIC_KEY 和 SECRET_KEY。由此组成一个这样的 DSN:
'{PROTOCOL}://{PUBLIC_KEY}:{SECRET_KEY}@{HOST}/{PATH}{PROJECT_ID}'
PROTOCOL 通常会是 http
或者 https
,HOST 为 Sentry 服务的主机名和端口,PATH 通常为空。
由于 Sentry 依赖众多,建议在独立的 Virtualenv 中安装。Sentry 依赖 Unix 兼容系统、Python 2.7、 PostgreSQL 以及 Redis,确保你已经安装好了这些依赖。考虑到 Python WSGI 应用的部署, 你可能还需要 Nginx 或者 Apache 2 作为前端服务器,以及 supervisor 管理应用。
有了这些以后,Sentry 的安装就非常简单:pip install sentry
。
我自己写了个简单的 Supervisor配置文件,可供参考。
Sentry 的 SDK 通常在各语言的包管理器中成为 Raven,使用起来也非常简单。以 Python 为例:
from raven import Client
client = Client('https://:@app.getsentry.com/' )
try:
1 / 0
except ZeroDivisionError:
client.captureException()
这样就可以使用 client
对象向 Sentry 服务器中提交日志信息了。
当然 Sentry 还为知名 web 框架提供了便捷的封装,以 Python Flask 框架为例:
sentry = Sentry(dsn='http://public_key:[email protected]/1')
def create_app():
app = Flask(__name__)
sentry.init_app(app, logging=True, level=logging.ERROR)
return app
为了解决问题,通常还会需要上下文信息重现当时的问题,以及快速了解影响的范围。
client.user_context({
'email': request.user.email
})
Sentry 的搜索支持 token:value
语法,例如:
is:resolved user.username:"Jane Doe" server:web-8 example error
支持的 token 包括:
me
)参考:
- [Sentry Python 文档](https://docs.getsentry.com/on-premise/clients/python)