template - ¿Cómo borrar/mantener una base de datos django-sentry?
load django template (4)
Esta es la forma en que realiza una limpieza utilizando una instancia de Sentry acoplada con un docker-compose.yml
predeterminado de la guía oficial :
$ # Go to a directory containing the docker-compose.yml:
$ cd sentry-config
$ docker-compose run --rm worker cleanup --days 90
Considere la posibilidad de leer la ayuda:
$ docker-compose run --rm worker help
$ docker-compose run --rm worker cleanup --help
Utilice cron para realizar la limpieza regularmente. Ejecute crontab -e
y agregue allí la siguiente línea:
0 3 * * * cd sentry-config && docker-compose run --rm worker cleanup --days 30
No olvide recuperar el espacio en disco ejecutando VACUUM FULL {{relation_name}};
Dentro de un contenedor de 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;
Puedes ejecutar VACUUM FULL;
sin especificar una relación, pero esto bloqueará toda la base de datos. Así que recomiendo aspirar las relaciones uno por uno. Así es como puedes encontrar el tamaño de tus relaciones más grandes.
Estoy usando django-sentry para rastrear errores en un sitio web. Mi problema es que la base de datos ha crecido demasiado. La tabla ''mensaje'' y el ''mensaje agrupado'' están relacionados
¿Hay alguna forma de borrar entradas antiguas y mensajes específicos o agregar las tablas de centinela al administrador de django?
Hay un comando de cleanup . Desafortunadamente, su comportamiento parece no documentado, pero los comentarios del código son bastante informativos.
Para continuar con la útil respuesta de radtek, si solo desea eliminar errores particulares, la forma más sencilla que he encontrado es llamar a eliminar en el objeto Group
:
from sentry.models import Group
Group.objects.filter(culprit__contains=''[SEARCH TERM]'').delete()
Donde [SEARCH TERM]
es un texto que aparece dentro de los mensajes de error que desea eliminar.
Utilice el comando de limpieza. Dos parámetros están disponibles:
- días (valor predeterminado: 30): indica la antigüedad del objeto para que se pueda limpiar.
- proyecto: indica de qué proyecto se eliminará, ya que puede tener muchos configurados en un solo servidor centinela (predeterminado: todos)
Úsalo como tal ( --config
ahora eliminado):
# sentry --config=sentry.conf.py cleanup --days 360
sentry cleanup --days 360
O con un parámetro de proyecto opcional, debe ser un entero:
# sentry --config=sentry.conf.py cleanup --days 360 --project 1
sentry cleanup --days 360 --project 1
También pude usar el ORM de django para hacer esto manualmente, antes de descubrir el comando de limpieza:
#$source bin/activate
#$sentry --config=sentry.conf.py shell
from sentry.models import Event, Alert
Event.objects.all().count()
Alert.objects.all().count()
Echa un vistazo a los modelos de centinela para consultar otros objetos. Desde aquí puede usar los comandos ORM de django como .save (), .remove () etc. en los objetos. Echa un vistazo a los modelos de centinela disponibles here . Este enfoque es un poco más flexible si necesita la granularidad, es decir, la modificación de objetos. Una cosa de la que carece el comando de limpieza es que le dice cuántos objetos eliminó, en su lugar, descarga los objetos eliminados en la pantalla.
Mi script de limpieza tiene este aspecto y lo ejecuto @monthly usando cron:
#!/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