ストレージのクリーンアップ
各録画は、ファイルとデータベース内のエントリーという形で存在します。OpenReplay は、セッションを再生するために必要なもの(DOM の変更、マウス座標、コンソールログ、ネットワークアクティビティなど)を 3 つのファイル(リプレイ自体用に 2 つ、DevTools データ用に 1 つ)に書き出します。これらのファイルはデフォルトでインスタンス上に保存されるため、ストレージの大部分を占めます。セッションのメタデータは 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 * * *"
OpenReplay インスタンスのストレージをクリーンアップする方法は、自動(CLI)と手動の 2 つがあります。
データのクリーンアップ(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を押して、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を実行して Kubernetes CLI を終了します
デフォルトのライフサイクルポリシーの変更
Section titled デフォルトのライフサイクルポリシーの変更minio(標準インストール)を使用している場合は、次の方法でデフォルトのライフサイクルポリシーを変更できます。
k9s -n dbを実行します- キーボードの矢印キーでリスト内を移動し、
minio-*コンテナーを選択します sを押して、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を実行して Kubernetes CLI を終了します
データベースのクリーンアップ(PostgreSQL)
Section titled データベースのクリーンアップ(PostgreSQL)利用状況に応じて、さまざまなテーブルから、さまざまな方法でデータを削除できます。
PostgreSQL への接続
Section titled PostgreSQL への接続OpenReplay インスタンスに接続し、次の手順に従います。
k9s -n dbを実行します- キーボードの矢印キーでリスト内を移動し、
postgresql-*コンテナーを選択します sを押して、Postgres コンテナーのシェルにアクセスしますPGPASSWORD=MY_PG_PASSWORD psql -U postgresを実行します(MY_PG_PASSWORDは、/var/lib/openreplay/vars.yamlファイルのpostgresqlPassword変数の値に置き換えてください)- 削除(またはその他の)クエリを実行します
exitと入力して postgresql-client を終了しますexitを使用して Postgres コンテナーを終了します:quitを実行して Kubernetes CLI を終了します
テーブルサイズの確認
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)を削除することを選んでいます。
すべてのイベントデータを破棄するには、次のいずれかのクエリを実行できますが、カードの値、クリックマップ、イベント一覧、その他の機能に影響することに注意してください。
--- 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 期間を指定したセッションの削除すべてのセッションをクリーンアップする場合は、より高速でストレージ容量もすぐに解放されるため、次のパートに進んでください。
データベース(PostgreSQL)のデータをクリーンアップする場合は、次の SQL クエリを使用します。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 すべてのセッションの削除データベース(PostgreSQL)からすべてのセッションデータをクリーンアップする場合は、次の SQL クエリを使用します。これはカスケード削除であるため、すべての録画と、それに対応するイベントがデータベースから削除されます。
--- 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 までお気軽にお問い合わせください。