Limpeza do armazenamento

Exclua gravações em massa do banco de dados e limpe seu armazenamento.

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ário

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

  1. Edite a configuração:
openreplay -e
  1. 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.

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

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

Se algum dia você precisar liberar espaço, faça login na sua instância do OpenReplay e siga os passos abaixo:

  1. Execute k9s -n db
  2. Use as setas do teclado para navegar pela lista e chegar ao contêiner minio-*
  3. Pressione s para obter acesso ao shell do contêiner do Minio (armazenamento de objetos)
  4. Execute mc alias set minio http://localhost:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD
  5. Execute mc rm --recursive --dangerous --force --older-than 7d minio/mobs (ou seja, exclui os arquivos com mais de 7 dias)
  6. Use exit para sair do contêiner do Minio
  7. Execute :quit para 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ão

Se você estiver usando o minio (instalação padrão), pode alterar a política de ciclo de vida padrão desta forma:

  1. Execute k9s -n db
  2. Use as setas do teclado para navegar pela lista e chegar ao contêiner minio-*
  3. Pressione s para obter acesso ao shell do contêiner do Minio (armazenamento de objetos)
  4. Execute mc alias set minio http://localhost:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD
  5. 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
  1. Use exit para sair do contêiner do Minio
  2. Execute :quit para 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.

Conecte-se à sua instância do OpenReplay e, em seguida:

  1. Execute k9s -n db
  2. Use as setas do teclado para navegar pela lista e chegar ao contêiner postgresql-*
  3. Pressione s para obter acesso ao shell do contêiner do Postgres
  4. Execute PGPASSWORD=MY_PG_PASSWORD psql -U postgres (substitua MY_PG_PASSWORD pelo valor da variável postgresqlPassword do arquivo /var/lib/openreplay/vars.yaml)
  5. Execute sua consulta de exclusão (ou qualquer outra)
  6. Digite exit para sair do postgresql-client
  7. Use exit para sair do contêiner do Postgres
  8. Execute :quit para sair da CLI do Kubernetes

Verificar o tamanho das tabelas

Section titled Verificar o tamanho das tabelas

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

Percebemos 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íodo

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

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

Se você tiver qualquer dúvida sobre este processo, fique à vontade para entrar em contato conosco no nosso Slack .