Nettoyage du stockage

Supprimez des enregistrements en masse de la base de données et nettoyez votre stockage.

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 temporaire

OpenReplay 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 :

  1. Modifiez la configuration :
openreplay -e
  1. 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.

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).

Si vous avez besoin de libérer de l’espace, connectez-vous à votre instance OpenReplay et suivez les étapes ci-dessous :

  1. Exécutez k9s -n db
  2. Utilisez les flèches du clavier pour naviguer dans la liste et atteindre le conteneur minio-*
  3. Appuyez sur s pour obtenir un accès shell au conteneur Minio (stockage d’objets)
  4. Exécutez mc alias set minio http://localhost:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD
  5. Exécutez mc rm --recursive --dangerous --force --older-than 7d minio/mobs (c’est-à-dire supprimer les fichiers vieux de plus de 7 jours)
  6. Utilisez exit pour quitter le conteneur Minio
  7. Exécutez :quit pour 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éfaut

Si vous utilisez minio (installation standard), vous pouvez modifier la politique de cycle de vie par défaut de cette manière :

  1. Exécutez k9s -n db
  2. Utilisez les flèches du clavier pour naviguer dans la liste et atteindre le conteneur minio-*
  3. Appuyez sur s pour obtenir un accès shell au conteneur Minio (stockage d’objets)
  4. Exécutez mc alias set minio http://localhost:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD
  5. 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
  1. Utilisez exit pour quitter le conteneur Minio
  2. Exécutez :quit pour 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.

Connectez-vous à votre instance OpenReplay, puis :

  1. Exécutez k9s -n db
  2. Utilisez les flèches du clavier pour naviguer dans la liste et atteindre le conteneur postgresql-*
  3. Appuyez sur s pour obtenir un accès shell au conteneur Postgres
  4. Exécutez PGPASSWORD=MY_PG_PASSWORD psql -U postgres (remplacez MY_PG_PASSWORD par la valeur de la variable postgresqlPassword du fichier /var/lib/openreplay/vars.yaml)
  5. Exécutez votre requête de suppression (ou toute autre requête)
  6. Tapez exit pour quitter le client postgresql
  7. Utilisez exit pour quitter le conteneur Postgres
  8. Exécutez :quit pour quitter la CLI Kubernetes

Vérifier la taille des tables

Section titled Vérifier la taille des tables

Pour 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écifiques

Nous 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 date

Si 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;

Utilisez 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;

Si vous avez des questions sur ce processus, n’hésitez pas à nous contacter sur notre Slack ou consultez notre Forum.