Pulizia dello storage
Ogni registrazione esiste sotto forma di file e di voce nel database. OpenReplay salva ciò che serve per riprodurre una sessione (mutazioni del DOM, coordinate del mouse, log della console, attività di rete e molto altro) in 3 file (2 per il replay vero e proprio e 1 per i dati di DevTools). Per impostazione predefinita questi file sono archiviati sulla tua istanza e occupano quindi la maggior parte del suo storage. I metadati della sessione vengono conservati per sempre nel database PostgreSQL, ma dopo 180 giorni il file contenente la registrazione scade e viene eliminato tramite una lifecycle policy di minio.
Pulizia dello storage temporaneo
Section titled Pulizia dello storage temporaneoOpenReplay archivia dati temporanei nel filesystem prima di elaborarli e caricarli sul servizio di object storage (minIO o S3). Una volta completata l’elaborazione, i dati diventano obsoleti e un cronjob elimina questi file ogni secondo giorno della settimana.
Se vuoi modificare il cronjob:
- Modifica la configurazione:
openreplay -e
- Cambia la pianificazione del cronjob aggiungendo la riga seguente:
utilities:
# Cleanup data everyday morning 3:05 am, server time.
cron: "5 3 * * *"
Esistono 2 modi per pulire lo storage nella tua istanza di OpenReplay: automatico (CLI) e manuale.
Pulizia dei dati (CLI)
Section titled Pulizia dei dati (CLI)Questo processo è completamente automatizzato tramite la nostra CLI. Ti basta eseguire il comando seguente per pulire lo storage, rimuovendo i dati sia da Postgres (dove sono archiviati gli eventi) sia da minio (dove sono salvate le registrazioni):
# To clean data older than 14 days
openreplay --cleanup 14
Pulizia dei dati (manuale)
Section titled Pulizia dei dati (manuale)I dati possono essere rimossi sia dal database (dove sono archiviati gli eventi) sia da minio (dove sono salvate le registrazioni).
Pulizia delle registrazioni
Section titled Pulizia delle registrazioniSe hai bisogno di liberare spazio, accedi alla tua istanza di OpenReplay e segui i passaggi seguenti:
- Esegui
k9s -n db - Usa le frecce della tastiera per scorrere l’elenco e raggiungere il container
minio-* - Premi
sper ottenere l’accesso shell al container Minio (object storage) - Esegui
mc alias set minio http://localhost:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD - Esegui
mc rm --recursive --dangerous --force --older-than 7d minio/mobs(ad es. elimina i file più vecchi di 7 giorni) - Usa
exitper uscire dal container Minio - Esegui
:quitper uscire dalla CLI di Kubernetes
Modificare la lifecycle policy predefinita
Section titled Modificare la lifecycle policy predefinitaSe utilizzi minio (installazione standard), puoi modificare la lifecycle policy predefinita in questo modo:
- Esegui
k9s -n db - Usa le frecce della tastiera per scorrere l’elenco e raggiungere il container
minio-* - Premi
sper ottenere l’accesso shell al container Minio (object storage) - Esegui
mc alias set minio http://localhost:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD - Per pulire automaticamente le registrazioni 14 giorni dopo la creazione
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
- Usa
exitper uscire dal container Minio - Esegui
:quitper uscire dalla CLI di Kubernetes
Pulizia del database (PostgreSQL)
Section titled Pulizia del database (PostgreSQL)A seconda dell’utilizzo, i dati possono essere rimossi da varie tabelle e in modi diversi.
Connettersi a PostgreSQL
Section titled Connettersi a PostgreSQLConnettiti alla tua istanza di OpenReplay, poi:
- Esegui
k9s -n db - Usa le frecce della tastiera per scorrere l’elenco e raggiungere il container
postgresql-* - Premi
sper ottenere l’accesso shell al container Postgres - Esegui
PGPASSWORD=MY_PG_PASSWORD psql -U postgres(sostituisciMY_PG_PASSWORDcon il valore della variabilepostgresqlPassworddel file/var/lib/openreplay/vars.yaml) - Esegui la tua query di eliminazione (o qualsiasi altra query)
- Digita
exitper uscire dal client postgresql - Usa
exitper uscire dal container Postgres - Esegui
:quitper uscire dalla CLI di Kubernetes
Verificare la dimensione delle tabelle
Section titled Verificare la dimensione delle tabellePer verificare la dimensione delle tabelle, puoi eseguire la query seguente:
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;
Eliminare eventi specifici
Section titled Eliminare eventi specificiAbbiamo notato che la maggior parte degli utenti di OpenReplay, dopo aver controllato i risultati della sezione precedente, decide di rimuovere eventi specifici invece di pulire le sessioni (in particolare events.resources e events_common.requests).
Per eliminare tutti i dati degli eventi puoi eseguire una qualsiasi delle query seguenti, ma tieni presente che questo influirà sui valori delle card, sulle click map, sull’elenco degli eventi e su altre funzionalità.
--- 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;
Eliminare sessioni specifiche in base alla data
Section titled Eliminare sessioni specifiche in base alla dataSe vuoi pulire tutte le sessioni, passa alla parte successiva, perché è più rapido e libera subito lo spazio di storage.
Usa la query SQL seguente se vuoi pulire i dati dal tuo database (PostgreSQL). Sostituisci 2021-01-01 con la data a partire dalla quale conservare le registrazioni. Si tratta di un’eliminazione a cascata, quindi tutte le registrazioni e i relativi eventi verranno rimossi dal database.
--- 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;
Dopo aver eseguito la query precedente, il database non libererà subito lo spazio di storage, perché pianificherà una pulizia per un secondo momento. Per forzare manualmente il rilascio dello spazio, puoi eseguire le query seguenti:
--- 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;
Eliminare tutte le sessioni
Section titled Eliminare tutte le sessioniUsa la query SQL seguente se vuoi pulire i dati di tutte le sessioni dal tuo database (PostgreSQL). Si tratta di un’eliminazione a cascata, quindi tutte le registrazioni e i relativi eventi verranno rimossi dal database.
--- 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;
Hai domande?
Section titled Hai domande?Se hai domande su questa procedura, contattaci pure sul nostro Slack .