Limpeza do armazenamento
Cada gravação existe na forma de um arquivo e de uma entrada no banco de dados. O OpenReplay grava o que é necessário para reproduzir uma sessão (mutações do DOM, coordenadas do mouse, logs do console, atividade de rede e muito mais) em 3 arquivos (2 para o replay em si e 1 para os dados do DevTools). Por padrão, esses arquivos são armazenados na sua instância, portanto ocupam a maior parte do armazenamento dela. Os metadados da sessão ficarão armazenados para sempre no banco de dados PostgreSQL, mas, após 180 dias, o arquivo que contém a gravação expirará/será excluído por meio de uma política de ciclo de vida do minio.
Limpeza do armazenamento temporário
Section titled Limpeza do armazenamento temporárioO OpenReplay armazena dados temporários no sistema de arquivos antes de processá-los e enviá-los ao serviço de armazenamento de objetos (minIO ou S3). Depois que o processamento é concluído, os dados se tornam obsoletos e um cronjob exclui esses arquivos todo 2º dia da semana.
Se você quiser alterar o cronjob:
- Edite a configuração:
openreplay -e
- Altere o horário do cronjob adicionando a seguinte linha:
utilities:
# Cleanup data everyday morning 3:05 am, server time.
cron: "5 3 * * *"
Há 2 maneiras de limpar o armazenamento na sua instância do OpenReplay: automatizada (CLI) e manual.
Limpeza de dados (CLI)
Section titled Limpeza de dados (CLI)Este processo é totalmente automatizado por meio da nossa CLI. Basta executar o comando abaixo para limpar seu armazenamento, removendo dados tanto do Postgres (onde os eventos são armazenados) quanto do minio (onde as gravações são salvas):
# To clean data older than 14 days
openreplay --cleanup 14
Limpeza de dados (manual)
Section titled Limpeza de dados (manual)Os dados podem ser removidos tanto do banco de dados (onde os eventos são armazenados) quanto do minio (onde as gravações são salvas).
Limpeza de gravações
Section titled Limpeza de gravaçõesSe algum dia você precisar liberar espaço, faça login na sua instância do OpenReplay e siga os passos abaixo:
- Execute
k9s -n db - Use as setas do teclado para navegar pela lista e chegar ao contêiner
minio-* - Pressione
spara obter acesso ao shell do contêiner do Minio (armazenamento de objetos) - Execute
mc alias set minio http://localhost:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD - Execute
mc rm --recursive --dangerous --force --older-than 7d minio/mobs(ou seja, exclui os arquivos com mais de 7 dias) - Use
exitpara sair do contêiner do Minio - Execute
:quitpara sair da CLI do Kubernetes
Alterar a política de ciclo de vida padrão
Section titled Alterar a política de ciclo de vida padrãoSe você estiver usando o minio (instalação padrão), pode alterar a política de ciclo de vida padrão desta forma:
- Execute
k9s -n db - Use as setas do teclado para navegar pela lista e chegar ao contêiner
minio-* - Pressione
spara obter acesso ao shell do contêiner do Minio (armazenamento de objetos) - Execute
mc alias set minio http://localhost:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD - Para limpar automaticamente as gravações 14 dias após a criação
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
- Use
exitpara sair do contêiner do Minio - Execute
:quitpara sair da CLI do Kubernetes
Limpeza do banco de dados (PostgreSQL)
Section titled Limpeza do banco de dados (PostgreSQL)Dependendo do seu uso, os dados podem ser removidos de várias tabelas e de diferentes maneiras.
Conectar ao PostgreSQL
Section titled Conectar ao PostgreSQLConecte-se à sua instância do OpenReplay e, em seguida:
- Execute
k9s -n db - Use as setas do teclado para navegar pela lista e chegar ao contêiner
postgresql-* - Pressione
spara obter acesso ao shell do contêiner do Postgres - Execute
PGPASSWORD=MY_PG_PASSWORD psql -U postgres(substituaMY_PG_PASSWORDpelo valor da variávelpostgresqlPassworddo arquivo/var/lib/openreplay/vars.yaml) - Execute sua consulta de exclusão (ou qualquer outra)
- Digite
exitpara sair do postgresql-client - Use
exitpara sair do contêiner do Postgres - Execute
:quitpara sair da CLI do Kubernetes
Verificar o tamanho das tabelas
Section titled Verificar o tamanho das tabelasPara verificar o tamanho das tabelas, você pode executar a seguinte consulta:
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;
Excluir eventos específicos
Section titled Excluir eventos específicosPercebemos que a maioria dos usuários do OpenReplay, depois de verificar os resultados da seção anterior, decidiu remover eventos específicos em vez de limpar sessões (especialmente events.resources e events_common.requests).
Para descartar todos os dados de eventos, você pode executar qualquer uma das consultas a seguir, mas lembre-se de que isso afetará os valores dos cards, os mapas de cliques, a lista de eventos e outros recursos.
--- 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;
Excluir sessões específicas por período
Section titled Excluir sessões específicas por períodoSe você quiser limpar todas as sessões, pule para a próxima parte, pois é mais rápido e libera espaço de armazenamento instantaneamente.
Use a consulta SQL abaixo se quiser limpar dados do seu banco de dados (PostgreSQL). Substitua 2021-01-01 pela data a partir da qual as gravações devem ser mantidas. Trata-se de uma exclusão em cascata, portanto todas as gravações, bem como seus eventos correspondentes, serão removidos do banco de dados.
--- 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;
Depois de executar a consulta anterior, o banco de dados não liberará o espaço de armazenamento imediatamente, pois agendará uma limpeza para mais tarde. Para forçar manualmente a liberação do espaço, você pode executar as consultas a seguir:
--- 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;
Excluir todas as sessões
Section titled Excluir todas as sessõesUse a consulta SQL abaixo se quiser limpar os dados de todas as sessões do seu banco de dados (PostgreSQL). Trata-se de uma exclusão em cascata, portanto todas as gravações, bem como seus eventos correspondentes, serão removidos do banco de dados.
--- 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;
Tem dúvidas?
Section titled Tem dúvidas?Se você tiver qualquer dúvida sobre este processo, fique à vontade para entrar em contato conosco no nosso Slack .