Nettoyage du stockage
Chaque enregistrement existe sous la forme d’un fichier et d’une entrée dans la base de données. OpenReplay déverse ce qui est nécessaire pour rejouer une session (mutations du DOM, coordonnées de la souris, journaux de la console, activité réseau et bien plus encore) dans 3 fichiers (2 pour le replay lui-même et 1 pour les données des DevTools). Ces fichiers sont par défaut stockés sur votre instance, ils constituent donc la majeure partie de son stockage. Les métadonnées de session seront conservées indéfiniment dans la base de données PostgreSQL, mais après 180 jours le fichier contenant l’enregistrement expirera/sera supprimé par une politique de cycle de vie de minio.
Nettoyage du stockage temporaire
Section titled Nettoyage du stockage temporaireOpenReplay stocke les données temporaires dans le système de fichiers avant le traitement et l’envoi vers le service de stockage d’objets (minIO ou S3). Une fois le traitement terminé, les données deviennent obsolètes, et un cronjob supprimera ces fichiers chaque 2e jour de la semaine.
Si vous souhaitez modifier le cronjob :
- Modifiez la configuration :
openreplay -e
- Changez la planification du cronjob en ajoutant la ligne suivante :
utilities:
# Cleanup data everyday morning 3:05 am, server time.
cron: "5 3 * * *"
Il existe 2 façons de nettoyer le stockage dans votre instance OpenReplay : automatisée (CLI) et manuelle.
Nettoyage des données (CLI)
Section titled Nettoyage des données (CLI)Ce processus est entièrement automatisé via notre CLI. Exécutez simplement la commande ci-dessous pour nettoyer votre stockage en supprimant les données à la fois de Postgres (où sont stockés les événements) et de minio (où sont enregistrés les enregistrements) :
# To clean data older than 14 days
openreplay --cleanup 14
Nettoyage des données (Manuel)
Section titled Nettoyage des données (Manuel)Les données peuvent être supprimées à la fois de la base de données (où sont stockés les événements) et de minio (où sont enregistrés les enregistrements).
Nettoyage des enregistrements
Section titled Nettoyage des enregistrementsSi vous avez besoin de libérer de l’espace, connectez-vous à votre instance OpenReplay et suivez les étapes ci-dessous :
- Exécutez
k9s -n db - Utilisez les flèches du clavier pour naviguer dans la liste et atteindre le conteneur
minio-* - Appuyez sur
spour obtenir un accès shell au conteneur Minio (stockage d’objets) - Exécutez
mc alias set minio http://localhost:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD - Exécutez
mc rm --recursive --dangerous --force --older-than 7d minio/mobs(c’est-à-dire supprimer les fichiers vieux de plus de 7 jours) - Utilisez
exitpour quitter le conteneur Minio - Exécutez
:quitpour quitter la CLI Kubernetes
Modifier la politique de cycle de vie par défaut
Section titled Modifier la politique de cycle de vie par défautSi vous utilisez minio (installation standard), vous pouvez modifier la politique de cycle de vie par défaut de cette manière :
- Exécutez
k9s -n db - Utilisez les flèches du clavier pour naviguer dans la liste et atteindre le conteneur
minio-* - Appuyez sur
spour obtenir un accès shell au conteneur Minio (stockage d’objets) - Exécutez
mc alias set minio http://localhost:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD - Pour nettoyer automatiquement les enregistrements 14 jours après leur création
export EXPIRATION_DAYS=14
export DELETE_JOB_DAYS=$((EXPIRATION_DAYS>30 ? 30 : EXPIRATION_DAYS))
cat <<EOF > /tmp/lifecycle.json
{
"Rules": [
{
"Expiration": {
"Days": $EXPIRATION_DAYS
},
"ID": "Delete old mob files",
"Status": "Enabled"
},
{
"Expiration": {
"Days": $DELETE_JOB_DAYS
},
"ID": "Delete flagged mob files after ${DELETE_JOB_DAYS} days",
"Filter": {
"Tag": {
"Key": "to_delete_in_days",
"Value": "${DELETE_JOB_DAYS}"
}
},
"Status": "Enabled"
}
]
}
EOF
mc ilm import minio/mobs < /tmp/lifecycle.json
- Utilisez
exitpour quitter le conteneur Minio - Exécutez
:quitpour quitter la CLI Kubernetes
Nettoyage de la base de données (PostgeSQL)
Section titled Nettoyage de la base de données (PostgeSQL)Selon votre utilisation, les données peuvent être supprimées de différentes tables et de différentes manières.
Se connecter à PostgreSQL
Section titled Se connecter à PostgreSQLConnectez-vous à votre instance OpenReplay, puis :
- Exécutez
k9s -n db - Utilisez les flèches du clavier pour naviguer dans la liste et atteindre le conteneur
postgresql-* - Appuyez sur
spour obtenir un accès shell au conteneur Postgres - Exécutez
PGPASSWORD=MY_PG_PASSWORD psql -U postgres(remplacezMY_PG_PASSWORDpar la valeur de la variablepostgresqlPassworddu fichier/var/lib/openreplay/vars.yaml) - Exécutez votre requête de suppression (ou toute autre requête)
- Tapez
exitpour quitter le client postgresql - Utilisez
exitpour quitter le conteneur Postgres - Exécutez
:quitpour quitter la CLI Kubernetes
Vérifier la taille des tables
Section titled Vérifier la taille des tablesPour vérifier la taille des tables, vous pouvez exécuter la requête suivante :
SELECT nspname AS "name_space",
relname AS "relation",
pg_size_pretty(
pg_total_relation_size(C.oid)
) AS "total_size"
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog','information_schema')
AND C.relkind <> 'i'
AND nspname !~ '^pg_toast'
ORDER BY pg_total_relation_size(C.oid) DESC
LIMIT 20;
Supprimer des événements spécifiques
Section titled Supprimer des événements spécifiquesNous avons remarqué que la plupart des utilisateurs d’OpenReplay, après avoir consulté les résultats de la section précédente, ont décidé de supprimer des événements spécifiques plutôt que de nettoyer des sessions (en particulier events.resources et events_common.requests).
Pour supprimer toutes les données d’événements, vous pouvez exécuter l’une des requêtes suivantes, mais gardez à l’esprit que cela affectera les valeurs des cards, les click-maps, la liste des événements et d’autres fonctionnalités.
--- To delete all data related to a specific event
-- The next 2 tables are usually the biggest ones, and they affect some cards only
TRUNCATE TABLE events.resources;
TRUNCATE TABLE events_common.requests;
-- The next table will affect click-maps and events list of session's replay
TRUNCATE TABLE events.clicks;
TRUNCATE TABLE events.errors;
TRUNCATE TABLE events.graphql;
TRUNCATE TABLE events.inputs;
TRUNCATE TABLE events.pages;
TRUNCATE TABLE events.performance;
TRUNCATE TABLE events.state_actions;
TRUNCATE TABLE events_common.customs;
TRUNCATE TABLE events_common.issues;
Supprimer des sessions spécifiques par date
Section titled Supprimer des sessions spécifiques par dateSi vous souhaitez nettoyer toutes les sessions, passez à la partie suivante, car elle est plus rapide et libère instantanément de l’espace de stockage.
Utilisez la requête SQL ci-dessous si vous souhaitez nettoyer les données de votre base de données (PostgreSQL). Remplacez 2021-01-01 par la date à partir de laquelle conserver les enregistrements. Il s’agit d’une suppression en cascade, donc tous les enregistrements ainsi que leurs événements correspondants seront supprimés de la base de données.
--- Cascade delete all sessions and their related events captured before Jan 1st, 2021
DELETE FROM public.sessions WHERE start_ts < extract(epoch from '2021-01-01'::date) * 1000;
Après avoir exécuté la requête précédente, la base de données ne libérera pas immédiatement l’espace de stockage, car elle planifiera un nettoyage pour plus tard. Pour la forcer manuellement à libérer du stockage, vous pouvez exécuter les requêtes suivantes :
--- Recreate indexes and free unused storage
VACUUM FULL public.sessions;
VACUUM FULL events_common.customs;
VACUUM FULL events_common.issues;
VACUUM FULL events_common.requests;
VACUUM FULL events.pages;
VACUUM FULL events.state_actions;
VACUUM FULL events.errors;
VACUUM FULL events.graphql;
VACUUM FULL events.performance;
VACUUM FULL events.resources;
VACUUM FULL events.inputs;
VACUUM FULL events.clicks;
Supprimer toutes les sessions
Section titled Supprimer toutes les sessionsUtilisez la requête SQL ci-dessous si vous souhaitez nettoyer toutes les données de sessions de votre base de données (PostgreSQL). Il s’agit d’une suppression en cascade, donc tous les enregistrements ainsi que leurs événements correspondants seront supprimés de la base de données.
--- Cascade delete all sessions and their related events
TRUNCATE TABLE public.sessions CASCADE;
TRUNCATE TABLE public.errors CASCADE;
TRUNCATE TABLE public.issues CASCADE;
TRUNCATE TABLE public.autocomplete;
Des questions ?
Section titled Des questions ?Si vous avez des questions sur ce processus, n’hésitez pas à nous contacter sur notre Slack ou consultez notre Forum.