تنظيف التخزين
يوجد كل تسجيل على هيئة ملف وإدخال في قاعدة البيانات. يقوم OpenReplay بتفريغ كل ما هو ضروري لإعادة تشغيل جلسة (تغييرات DOM، وإحداثيات الماوس، وسجلات وحدة التحكم، ونشاط الشبكة وغير ذلك الكثير) في 3 ملفات (2 لإعادة التشغيل نفسها و1 لبيانات DevTools). تُخزَّن هذه الملفات افتراضيًا على نسختك (instance)، لذا فهي تشكّل معظم مساحة تخزينها. ستُخزَّن البيانات الوصفية للجلسة في قاعدة بيانات PostgreSQL إلى الأبد، ولكن بعد 180 يومًا ستنتهي صلاحية الملف الذي يحتوي على التسجيل أو سيُحذف من خلال سياسة دورة حياة في minio.
تنظيف التخزين المؤقت
Section titled تنظيف التخزين المؤقتيخزّن OpenReplay البيانات المؤقتة في نظام الملفات قبل معالجتها ورفعها إلى خدمة تخزين الكائنات (minIO أو S3). بمجرد اكتمال المعالجة، تصبح البيانات مهملة، وستقوم مهمة cronjob بحذف هذه الملفات في اليوم الثاني من كل أسبوع.
إذا كنت ترغب في تعديل مهمة cronjob:
- حرّر الإعدادات:
openreplay -e
- غيّر توقيت مهمة cronjob بإضافة السطر التالي:
utilities:
# Cleanup data everyday morning 3:05 am, server time.
cron: "5 3 * * *"
هناك طريقتان لتنظيف التخزين في نسخة 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للخروج من واجهة سطر أوامر 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للخروج من واجهة سطر أوامر 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للخروج من واجهة سطر أوامر 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)، لذا ستُزال جميع التسجيلات وكذلك الأحداث المقابلة لها من قاعدة البيانات.
--- 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)، لذا ستُزال جميع التسجيلات وكذلك الأحداث المقابلة لها من قاعدة البيانات.
--- 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 الخاص بنا أو الاطلاع على المنتدى الخاص بنا.