Django中间件,用于记录慢请求的堆栈跟踪到Sentry。
项目描述
概述
Dogslow是一个Django watchdog中间件,用于记录慢请求的堆栈跟踪。Dogslow-sentry需要Python 3.7+,Django 2.2+。
它最初是Bitbucket内部的一个内部项目,旨在帮助追踪操作问题。
2021年,创建了dogslow-sentry分支,以便在报告中添加Sentry特定信息,如完整堆栈跟踪、请求信息、问题分组指纹、面包屑等。
安装
安装dogslow-sentry
$ pip install dogslow-sentry
然后将dogslow_sentry.WatchdogMiddleware添加到您的Django设置文件中
MIDDLEWARE = [ 'dogslow_sentry.WatchdogMiddleware', ... ]
为了获得最佳效果,请将其设置为运行的第一批中间件之一。
配置
自然地,dogslow-sentry期望有一个适用于Django的Sentry配置。
您可以在您的 settings.py 文件中使用以下配置来调整 watchdog。
# Watchdog is enabled by default, to temporarily disable, set to False: DOGSLOW = True # Log requests taking longer than 25 seconds: DOGSLOW_TIMER = 25 # Enable logging to Sentry DOGSLOW_SENTRY = True # Also log slow request tracebacks to Python logger DOGSLOW_LOGGER = 'dogslow_sentry' DOGSLOW_LOG_LEVEL = 'WARNING' # Tuple of url pattern names that should not be monitored: # (defaults to none -- everything monitored) DOGSLOW_IGNORE_URLS = ('some_view', 'other_view')
使用方法
每个进入的 HTTP 请求在 watchdog 中都会有一个 25 秒的超时时间。如果请求没有在规定时间内返回,watchdog 就会激活,并查看请求线程的堆栈,并将回溯信息(包括所有局部堆栈变量 - Django 风格)写入日志文件。
注意,dogslow 只会查看线程的堆栈。它不会中断请求或以任何方式影响请求。因此,在生产环境中使用 dogslow 是安全的。
变更日志
2.0.1 (2023-12-08)
使用类似于 ISO 8601 的 YYYY-MM-DD 日期格式进行电子邮件/文件日志。
在 Python 3.12 上修复了弃用警告(utcnow 函数)。
启用了 Python 3.11、3.12 和 Django 5.0、4.2、4.1 的 CI 测试。
2.0.0 (2021-12-13)
为 CI 配置了 GitHub Actions。
启用了 Python 3.10 和 Django 4.0 的测试。
修复了使用 Python 3.10 时的弃用警告。
2.0.0b1 (2021-07-19)
dogslow-sentry 分支的初始预发布版。
改进了 Sentry 集成。
放弃了 Python 2.7 支持,现在需要 Python 3.7+、Django 2.2+。
许多小的调整。使用 Black 重构了代码。
1.2 (2018-01-04)
上游 dogslow 包的最后发布版。
注意事项
Dogslow 使用多线程。它有一个单独的后台线程来处理 watchdog 超时和捕获回溯,这样原始的请求线程就不会被打断。这带来了一些后果。
多线程和 GIL
在 CPython 中,GIL(全局解释器锁)阻止多个线程同时执行 Python 代码。只有当线程显式释放对 GIL 的锁时,第二个线程才能运行。
释放 GIL 是在 Python 程序在解释器外进行阻塞调用时自动完成的,例如进行 IO。
对于 dogslow 来说,这意味着它只能可靠地拦截那些因为执行 IO、调用 sleep 或忙等待获取锁而变慢的请求。
在大多数情况下,这是没有问题的。Django 请求变慢的一个重要原因是昂贵的数据库查询。由于这是 IO,dogslow 可以很好地拦截这些请求。CPython 的 GIL 成为问题的情况是,请求的线程在 Python 代码中遇到无限循环(或合法但非常昂贵且执行时间很长的 Python 代码),永远不会释放 GIL。即使 dogslow 的 watchdog 计时器线程变成可运行的,也无法记录堆栈。
协程和 Greenlets
Dogslow 旨在用于同步工作进程配置。一个使用专用线程(或单线程、专用工作进程)来处理请求的 Web 服务器。Django 内置的 wsgi 服务器以及默认同步工作进程模式的 Gunicorn 都是这样做的。
在运行“协程框架”时,其中多个请求由一个线程并发处理,回溯可能会变得没有意义。
项目详情
下载文件
下载适合您平台的文件。如果您不确定该选择哪个,请了解更多关于 安装包 的信息。
源分布
构建分布
dogslow-sentry-2.0.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6d518de06a0ec3af5558deca2bc024861bfc5e1344e8441ecd75c0ac57687d21 |
|
MD5 | c2e556e1b32760e5745bebf3ccff35c5 |
|
BLAKE2b-256 | f63ca4b2571aefe0549ac8475d2222c4c6e8169516bb45d8518390137db4b4e7 |
dogslow_sentry-2.0.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4554986b0f7ab902c14b677c0885ded1c4e1dc83c13ba952096e7167beabb904 |
|
MD5 | 8a29ad463fd1de510bf801170379e106 |
|
BLAKE2b-256 | 1b4039cc034d52092c7b6d3a765942e7a5de9451300f570a71fa5b48a56fa590 |