Очистка хранилища
Каждая запись существует в виде файла и записи в базе данных. OpenReplay сохраняет всё необходимое для воспроизведения сессии (мутации DOM, координаты мыши, логи консоли, сетевую активность и многое другое) в 3 файла (2 для самого воспроизведения и 1 для данных DevTools). По умолчанию эти файлы хранятся в вашем экземпляре, поэтому именно они занимают большую часть хранилища. Метаданные сессии будут храниться в базе данных PostgreSQL вечно, но через 180 дней файл, содержащий запись, будет просрочен/удалён с помощью политики жизненного цикла minio.
Очистка временного хранилища
Section titled Очистка временного хранилищаOpenReplay хранит временные данные в файловой системе перед обработкой и загрузкой в сервис объектного хранилища (minIO или S3). После завершения обработки данные устаревают, и cronjob будет удалять эти файлы каждый 2-й день недели.
Если вы хотите изменить cronjob:
- Отредактируйте конфигурацию:
openreplay -e
- Измените расписание cronjob, добавив следующую строку:
utilities:
# Cleanup data everyday morning 3:05 am, server time.
cron: "5 3 * * *"
Существует 2 способа очистки хранилища в вашем экземпляре OpenReplay: автоматизированный (CLI) и ручной.
Очистка данных (CLI)
Section titled Очистка данных (CLI)Этот процесс полностью автоматизирован с помощью нашего CLI. Просто выполните приведённую ниже команду, чтобы очистить хранилище, удалив данные как из Postgres (где хранятся события), так и из minio (где сохраняются записи):
# To clean data older than 14 days
openreplay --cleanup 14
Очистка данных (вручную)
Section titled Очистка данных (вручную)Данные можно удалить как из базы данных (где хранятся события), так и из minio (где сохраняются записи).
Очистка записей
Section titled Очистка записейЕсли вам когда-нибудь понадобится освободить место, войдите в свой экземпляр OpenReplay и выполните следующие шаги:
- Выполните
k9s -n db - Используйте стрелки на клавиатуре, чтобы перемещаться по списку и перейти к контейнеру
minio-* - Нажмите
s, чтобы получить доступ к shell контейнера Minio (объектного хранилища) - Выполните
mc alias set minio http://localhost:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD - Выполните
mc rm --recursive --dangerous --force --older-than 7d minio/mobs(то есть удалите файлы старше 7 дней) - Используйте
exit, чтобы выйти из контейнера Minio - Выполните
:quit, чтобы выйти из CLI Kubernetes
Изменение политики жизненного цикла по умолчанию
Section titled Изменение политики жизненного цикла по умолчаниюЕсли вы используете minio (стандартная установка), вы можете изменить политику жизненного цикла по умолчанию следующим образом:
- Выполните
k9s -n db - Используйте стрелки на клавиатуре, чтобы перемещаться по списку и перейти к контейнеру
minio-* - Нажмите
s, чтобы получить доступ к shell контейнера Minio (объектного хранилища) - Выполните
mc alias set minio http://localhost:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD - Чтобы автоматически очищать записи через 14 дней после создания
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
- Используйте
exit, чтобы выйти из контейнера Minio - Выполните
:quit, чтобы выйти из CLI Kubernetes
Очистка базы данных (PostgeSQL)
Section titled Очистка базы данных (PostgeSQL)В зависимости от вашего использования данные можно удалять из различных таблиц и разными способами.
Подключение к PostgreSQL
Section titled Подключение к PostgreSQLПодключитесь к своему экземпляру OpenReplay, затем:
- Выполните
k9s -n db - Используйте стрелки на клавиатуре, чтобы перемещаться по списку и перейти к контейнеру
postgresql-* - Нажмите
s, чтобы получить доступ к shell контейнера Postgres - Выполните
PGPASSWORD=MY_PG_PASSWORD psql -U postgres(заменитеMY_PG_PASSWORDзначением переменнойpostgresqlPasswordиз файла/var/lib/openreplay/vars.yaml) - Выполните свой запрос на удаление (или любой другой)
- Введите
exit, чтобы выйти из клиента postgresql - Используйте
exit, чтобы выйти из контейнера Postgres - Выполните
:quit, чтобы выйти из CLI Kubernetes
Проверка размера таблиц
Section titled Проверка размера таблицЧтобы проверить размер таблиц, вы можете выполнить следующий запрос:
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;
Удаление определённых событий
Section titled Удаление определённых событийМы заметили, что большинство пользователей OpenReplay, изучив результаты предыдущего раздела, решили удалять определённые события вместо очистки сессий (особенно events.resources и events_common.requests).
Чтобы удалить все данные событий, вы можете выполнить любой из следующих запросов, но имейте в виду, что это повлияет на значения cards, click-maps, список событий и другие функции.
--- 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;
Удаление определённых сессий по времени
Section titled Удаление определённых сессий по времениЕсли вы хотите очистить все сессии, перейдите к следующей части, так как она быстрее и мгновенно освобождает место в хранилище.
Используйте приведённый ниже SQL-запрос, если хотите очистить данные из своей базы данных (PostgreSQL). Замените 2021-01-01 датой, начиная с которой следует сохранять записи. Это каскадное удаление, поэтому из базы данных будут удалены как все записи, так и соответствующие им события.
--- 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;
После выполнения предыдущего запроса база данных не освободит место в хранилище сразу же, так как запланирует очистку на потом. Чтобы вручную заставить её освободить хранилище, вы можете выполнить следующие запросы:
--- 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;
Удаление всех сессий
Section titled Удаление всех сессийИспользуйте приведённый ниже SQL-запрос, если хотите очистить все данные сессий из своей базы данных (PostgreSQL). Это каскадное удаление, поэтому из базы данных будут удалены как все записи, так и соответствующие им события.
--- 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;
Есть вопросы?
Section titled Есть вопросы?Если у вас есть какие-либо вопросы об этом процессе, свяжитесь с нами в нашем Slack или загляните на наш Форум.