31

我正在使用 django-sentry 来跟踪网站中的错误。我的问题是数据库变得太大了。'message' 表和 'groupedmessage' 是相关的

有没有办法清除旧条目和特定消息或将哨兵表添加到 django 的管理员?

4

4 回答 4

51

使用清理命令。有两个参数可用:

  • 天数(默认值:30)- 指示对象必须有多久才能被清理
  • project - 指示要删除的项目,因为您可以在单个哨兵服务器中配置许多项目(默认值:全部)

像这样使用它(--config现在已删除):

# sentry --config=sentry.conf.py cleanup --days 360
sentry cleanup --days 360

带有可选项目参数,它必须是整数:

# sentry --config=sentry.conf.py cleanup --days 360 --project 1
sentry cleanup --days 360 --project 1

在发现清理命令之前,我还可以使用 django ORM 手动执行此操作:

#$source bin/activate
#$sentry --config=sentry.conf.py shell
from sentry.models import Event, Alert
Event.objects.all().count()
Alert.objects.all().count()

查看哨兵模型以查询其他对象。从这里您可以在对象上使用 .save()、.remove() 等 django ORM 命令。在此处查看可用的哨兵模型。如果您需要粒度,即修改对象,这种方法会更灵活一些。cleanup 命令缺少的一件事是告诉您它删除了多少对象,而是将已删除的对象转储到屏幕上。

我的清理脚本如下所示,我使用 cron @monthly 运行它:

#!/bin/bash
date
cd /var/web/sentry
source bin/activate
# exec sentry --config=sentry.conf.py cleanup --days 360 #--project 1
# UPDATE: You can now drop the --config param
exec sentry cleanup --days 360
于 2014-04-14T16:40:32.173 回答
15

这是您使用 dockerized Sentry 实例执行清理的方式,该实例具有官方指南中的docker-compose.yml默认

$ # Go to a directory containing the docker-compose.yml:
$ cd sentry-config  
$ docker-compose run --rm worker cleanup --days 90

考虑阅读帮助:

$ docker-compose run --rm worker help
$ docker-compose run --rm worker cleanup --help

使用 cron 定期执行清理。运行crontab -e并添加以下行:

0 3 * * *  cd sentry-config && docker-compose run --rm worker cleanup --days 30

不要忘记VACUUM FULL {{relation_name}};通过在 Postgres 容器中运行来回收磁盘空间:

$ docker exec -it {{postgres_container_id} /bin/bash
$ psql -U postgres
postgres=# VACUUM FULL public.nodestore_node;    
postgres=# VACUUM FULL {{ any large relation }};
postgres=# VACUUM FULL public.sentry_eventtag;

您可以在VACUUM FULL;不指定关系的情况下运行,但这会锁定整个数据库。所以我建议一对一地清理关系。这就是你如何找到你最大的关系的大小。

于 2018-04-26T22:14:23.447 回答
7

有一个清理命令。不幸的是,它的行为似乎没有记录,但代码注释非常有用。

于 2012-08-20T05:33:15.203 回答
2

要继续 radtek 的有用答案,如果您只想删除特定错误,我发现最简单的方法是在Group对象上调用 delete:

from sentry.models import Group
Group.objects.filter(culprit__contains='[SEARCH TERM]').delete()

[SEARCH TERM]您要删除的错误消息中出现的一些文本在哪里。

于 2014-05-21T22:14:36.823 回答