مراقبة وتصحيح Redis
مراقبة وتصحيح Redis
المراقبة والتصحيح الفعالان ضروريان للحفاظ على أداء Redis، وتحديد المشكلات قبل أن تؤثر على المستخدمين، وتحسين استخدام الموارد في بيئات الإنتاج.
أمر INFO - إحصائيات شاملة للخادم
يوفر أمر INFO معلومات مفصلة حول حالة خادم Redis، منظمة في أقسام:
# الحصول على جميع المعلومات
INFO
# الحصول على قسم محدد
INFO server
INFO clients
INFO memory
INFO persistence
INFO stats
INFO replication
INFO cpu
INFO commandstats
INFO cluster
INFO keyspace
# قسم الخادم
redis_version:7.0.5
uptime_in_seconds:864000
uptime_in_days:10
# قسم العملاء
connected_clients:42
blocked_clients:0
tracking_clients:0
# قسم الذاكرة
used_memory_human:2.50M
used_memory_rss_human:8.20M
mem_fragmentation_ratio:1.23
maxmemory_human:4.00G
# قسم الإحصائيات
total_connections_received:10523
total_commands_processed:1045234
instantaneous_ops_per_sec:1250
keyspace_hits:984521
keyspace_misses:60713
evicted_keys:0
expired_keys:12453
- mem_fragmentation_ratio: يجب أن يكون 1.0-1.5 (أعلى = ذاكرة مهدرة)
- keyspace_hits/misses: نسبة الإصابة = الإصابات/(الإصابات+الإخفاقات)، استهدف >80%
- evicted_keys: غير الصفر = ضغط الذاكرة، فكر في زيادة maxmemory
- connected_clients: راقب تسربات الاتصال
- instantaneous_ops_per_sec: الإنتاجية الحالية
أمر MONITOR - تسجيل الأوامر في الوقت الفعلي
يعرض MONITOR كل أمر تتم معالجته بواسطة Redis في الوقت الفعلي، مفيد للتصحيح ولكنه يؤثر على الأداء:
redis-cli MONITOR
مثال الإخراج:
1634567890.123456 [0 127.0.0.1:54321] "GET" "user:1000:name"
1634567890.234567 [0 127.0.0.1:54322] "SET" "session:abc" "data"
1634567890.345678 [0 192.168.1.50:12345] "HGETALL" "cart:5000"
1634567890.456789 [0 127.0.0.1:54321] "INCR" "counter:pageviews"
# مراقبة أوامر SET فقط
redis-cli MONITOR | grep SET
# مراقبة الأوامر من IP محدد
redis-cli MONITOR | grep "192.168.1.50"
# مراقبة الأوامر على مفاتيح محددة
redis-cli MONITOR | grep "user:*"
# حفظ في ملف للتحليل
redis-cli MONITOR > redis-monitor.log
SLOWLOG - تحليل الاستعلام البطيء
يسجل SLOWLOG الاستعلامات التي تتجاوز عتبة مكوّنة، ضروري لتحديد عنق الزجاجة في الأداء:
# تعيين العتبة إلى 10ms (10000 ميكروثانية)
CONFIG SET slowlog-log-slower-than 10000
# الاحتفاظ بآخر 128 استعلام بطيء
CONFIG SET slowlog-max-len 128
# جعله دائمًا في redis.conf
slowlog-log-slower-than 10000
slowlog-max-len 128
# الحصول على آخر 10 استعلامات بطيئة
SLOWLOG GET 10
تنسيق الإخراج:
1) 1) (integer) 14 # معرف فريد
2) (integer) 1634567890 # طابع زمني Unix
3) (integer) 23451 # وقت التنفيذ (ميكروثانية)
4) 1) "KEYS" # الأمر
2) "user:*" # المعاملات
5) "127.0.0.1:54321" # IP:port العميل
6) "" # اسم العميل
# الحصول على عدد الإدخالات في السجل
SLOWLOG LEN
# مسح السجل البطيء
SLOWLOG RESET
أدوات التشخيص redis-cli
يتضمن redis-cli أدوات مدمجة لتحليل الأداء والتشخيص:
redis-cli --bigkeys
مثال الإخراج:
Scanning the entire keyspace...
Biggest string: "cache:homepage" (2048576 bytes)
Biggest list: "queue:emails" (50000 items)
Biggest set: "tags:all" (8934 members)
Biggest hash: "user:1000:profile" (1000 fields)
Biggest zset: "leaderboard:global" (100000 members)
# خيارات
--bigkeys --i 0.1 # عينة كل 0.1 ثانية
--bigkeys -a mypass # مع المصادقة
# اختبار الكمون الأساسي
redis-cli --latency
# الإخراج: min: 0, max: 2, avg: 0.15 (1234 samples)
# تاريخ الكمون (يتتبع مع مرور الوقت)
redis-cli --latency-history
# توزيع الكمون
redis-cli --latency-dist
# الكمون الجوهري (تأخيرات النظام)
redis-cli --intrinsic-latency 100
redis-cli --stat
الإخراج (يتم التحديث كل ثانية):
------- data ------ --------------------- load -------------------- - child -
keys mem clients blocked requests connections
506 1.45M 10 0 10000 (+0) 50
506 1.45M 10 0 10234 (+234) 50
506 1.47M 11 0 10567 (+333) 51
# فحص جميع المفاتيح
redis-cli --scan
# فحص مع نمط
redis-cli --scan --pattern "user:*"
# عد المفاتيح المطابقة للنمط
redis-cli --scan --pattern "session:*" | wc -l
# حذف المفاتيح المطابقة للنمط بأمان
redis-cli --scan --pattern "temp:*" | xargs redis-cli DEL
أوامر تحليل الذاكرة
تحليل مفصل لاستخدام الذاكرة للتحسين:
# استخدام الذاكرة لمفتاح محدد
MEMORY USAGE user:1000
# الإخراج: (integer) 1024
# إحصائيات الذاكرة
MEMORY STATS
# الإخراج: توزيع تفصيلي لتخصيص الذاكرة
# طبيب الذاكرة (اقتراحات التحسين)
MEMORY DOCTOR
# الإخراج: اقتراحات بناءً على أنماط الاستخدام الحالية
# استخدام الذاكرة بالعينة
MEMORY MALLOC-STATS
# تطهير الذاكرة (تشغيل إلغاء التجزئة)
MEMORY PURGE
INFO memory | grep fragmentation
# mem_fragmentation_ratio:1.23
# إذا كانت النسبة > 1.5، فكر في:
# 1. إعادة تشغيل Redis لإلغاء التجزئة
# 2. تمكين إلغاء التجزئة النشط
CONFIG SET activedefrag yes
CONFIG SET active-defrag-threshold-lower 10
CONFIG SET active-defrag-threshold-upper 100
أوامر CLIENT - تصحيح الاتصال
راقب وأدر اتصالات العميل:
# عرض جميع العملاء المتصلين
CLIENT LIST
تنسيق الإخراج:
id=123 addr=127.0.0.1:54321 fd=8 name= age=300 idle=5 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=get
# شرح الحقول:
# id: معرف العميل الفريد
# addr: IP والمنفذ للعميل
# age: عمر الاتصال (ثواني)
# idle: وقت الخمول (ثواني)
# flags: N=عادي، M=رئيسي، S=تابع، P=pubsub
# db: رقم قاعدة البيانات الحالية
# cmd: آخر أمر تم تنفيذه
# الحصول على معرف العميل الحالي
CLIENT ID
# تعيين اسم العميل
CLIENT SETNAME myapp-web-1
# الحصول على اسم العميل
CLIENT GETNAME
# قتل عميل محدد
CLIENT KILL 127.0.0.1:54321
# قتل جميع العملاء المطابقين للفلتر
CLIENT KILL TYPE normal SKIPME yes
# إيقاف جميع العملاء مؤقتًا لمدة 1000ms
CLIENT PAUSE 1000
# تتبع ذاكرة العميل
CLIENT TRACKING ON
مراقبة الكمون
اكتشف وشخص ارتفاعات الكمون:
# مراقبة الأحداث التي تستغرق > 100ms
CONFIG SET latency-monitor-threshold 100
# عرض أحداث الكمون الأخيرة
LATENCY LATEST
الإخراج:
1) 1) "command"
2) (integer) 1634567890
3) (integer) 250
4) (integer) 350
# عرض تاريخ الكمون لحدث محدد
LATENCY HISTORY command
# طبيب الكمون (التشخيص)
LATENCY DOCTOR
# إعادة تعيين بيانات الكمون
LATENCY RESET
command # أوامر بطيئة
fast-command # أمر سريع يستغرق وقتًا طويلاً
fork # عملية Fork للاستمرارية
aof-write # عملية كتابة AOF
aof-fsync-always # مزامنة AOF إلى القرص
rdb-unlink-temp-file # تنظيف ملف RDB
Redis Insight - أداة مراقبة GUI
يوفر Redis Insight واجهة رسومية للمراقبة والتوصيف والتصحيح:
- المتصفح: متصفح مفاتيح مرئي مع البحث والفلاتر
- الملف الشخصي: توصيف الأوامر في الوقت الفعلي (مثل MONITOR)
- Slowlog: تحليل مرئي للاستعلامات البطيئة
- تحليل الذاكرة: مخططات استخدام الذاكرة والتوصيات
- CLI: واجهة سطر أوامر مدمجة
- إدارة المجموعة: نظرة عامة على المجموعة متعددة العقد
- Workbench: تنفيذ الأوامر والسكريبتات
# التنزيل من RedisLabs
https://redis.com/redis-enterprise/redis-insight/
# أو عبر Docker
docker run -d -p 8001:8001 redislabs/redisinsight:latest
# الوصول على http://localhost:8001
إحصائيات الأوامر
تتبع الأوامر الأكثر استخدامًا:
INFO commandstats
الإخراج:
cmdstat_get:calls=458234,usec=1234567,usec_per_call=2.69
cmdstat_set:calls=312456,usec=987654,usec_per_call=3.16
cmdstat_hgetall:calls=12345,usec=456789,usec_per_call=37.01
# إعادة تعيين إحصائيات الأوامر
CONFIG RESETSTAT
مراقبة الاستمرارية
راقب عمليات RDB و AOF:
INFO persistence
rdb_last_save_time:1634567890
rdb_changes_since_last_save:12345
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:5
rdb_current_bgsave_time_sec:-1
حالة AOF:
aof_enabled:1
aof_rewrite_in_progress:0
aof_last_rewrite_time_sec:12
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
تصحيح المشكلات الشائعة
1. قم بتشغيل
redis-cli --bigkeys للعثور على مفاتيح كبيرة2. تحقق من
INFO memory لـ mem_fragmentation_ratio3. راجع evicted_keys - إذا >0، زد maxmemory
4. تحقق من المفاتيح بدون TTL:
redis-cli --scan | xargs redis-cli TTL | grep -c "\-1"المشكلة: أداء بطيء
1. تحقق من
SLOWLOG GET 100 للاستعلامات البطيئة2. قم بتشغيل
MONITOR لفترة وجيزة لرؤية الأوامر المباشرة3. تحقق من
INFO stats لنسبة keyspace_misses4. تحقق من
CLIENT LIST للعملاء المحظورينالمشكلة: مشاكل الاتصال
1. تحقق من
INFO clients لـ connected_clients مقابل maxclients2. ابحث عن rejected_connections في
INFO stats3. راجع إعداد timeout في redis.conf
4. تحقق من كمون الشبكة باستخدام
redis-cli --latencyأفضل ممارسات المراقبة
- ✅ إعداد جمع INFO تلقائي كل 60 ثانية
- ✅ تنبيه عند mem_fragmentation_ratio > 1.5
- ✅ تنبيه عند نسبة إصابة keyspace < 80%
- ✅ تنبيه عند evicted_keys > 0
- ✅ مراقبة connected_clients للتسريبات
- ✅ مراجعة SLOWLOG يوميًا لفرص التحسين
- ✅ تتبع instantaneous_ops_per_sec لتخطيط السعة
- ✅ مراقبة used_memory مقابل maxmemory
- ✅ تعيين latency-monitor-threshold ومراجعة LATENCY DOCTOR
- ✅ استخدام Redis Insight لاستكشاف الأخطاء المرئية