ข้ามไปยังเนื้อหา

Tooling & Monitoring

redis-cli มาพร้อม diagnostic flag ที่หลากหลายเกินกว่าแค่การพิมพ์คำสั่ง การรู้จักเครื่องมือเหล่านี้ทำให้คุณระบุ query ช้า key ที่กินหน่วยความจำมาก และปัญหา connection ได้โดยไม่ต้องใช้ซอฟต์แวร์เพิ่มเติม

INFO คืนบล็อก key-value สถิติขนาดใหญ่แบ่งตาม section เรียก section เฉพาะเพื่อลด noise:

127.0.0.1:6379> INFO server
# Server
redis_version:7.2.4
redis_mode:standalone
os:Linux 5.15.0 x86_64
...
127.0.0.1:6379> INFO memory
# Memory
used_memory_human:1.02M
used_memory_peak_human:1.03M
...
127.0.0.1:6379> INFO stats
# Stats
total_commands_processed:1024
instantaneous_ops_per_sec:12
...
INFO server
INFO memory
INFO keyspace

Redis บันทึกคำสั่งที่ใช้เวลาเกิน threshold ที่กำหนดได้ (ค่าเริ่มต้น 10 ms) SLOWLOG GET N คืน N entry ล่าสุดพร้อม timestamp, duration และคำสั่งเต็ม:

127.0.0.1:6379> SLOWLOG GET 5
1) 1) (integer) 3
2) (integer) 1700000000
3) (integer) 15420
4) 1) "KEYS"
2) "*"
5) "127.0.0.1:54321"
6) ""

Reset log ด้วย SLOWLOG RESET ปรับ threshold ด้วย:

127.0.0.1:6379> CONFIG SET slowlog-log-slower-than 5000
OK
SLOWLOG GET 5
SLOWLOG LEN
SLOWLOG RESET

รันจาก shell (ไม่ใช่ REPL) เพื่อสแกน keyspace ทั้งหมดและรายงาน key ที่ใหญ่ที่สุดต่อแต่ละประเภท:

Terminal window
redis-cli --bigkeys

ตัวอย่างผลลัพธ์:

-------- summary -------
Biggest string found 'session:heavy' has 512000 bytes
Biggest list found 'log:events' has 1048576 items
Biggest hash found 'user:profile:1' has 312 fields

คำสั่งนี้ใช้ SCAN ภายในดังนั้นจึงไม่บล็อก server

Terminal window
# แสดง key ทั้งหมดที่ตรง pattern (ใช้ SCAN ภายใน ไม่บล็อก)
redis-cli --scan --pattern "session:*"
# นับ key ที่ตรง
redis-cli --scan --pattern "cache:*" | wc -l
Terminal window
redis-cli --latency
redis-cli --latency-history # sample ทุก 15 วินาที
redis-cli --latency-dist # ASCII histogram

คำสั่งเหล่านี้ ping Redis ในลูปและแสดง latency min/max/avg ใช้ตรวจจับ network jitter หรือ server ที่ช้าลงกะทันหัน

MONITOR stream ทุกคำสั่งที่ server ประมวลผลแบบ real-time:

127.0.0.1:6379> MONITOR
OK
1700000001.123456 [0 127.0.0.1:54322] "SET" "foo" "bar"
1700000001.124000 [0 127.0.0.1:54322] "GET" "foo"

มีประโยชน์อย่างยิ่งในการ debug ว่าแอปพลิเคชันส่งอะไรจริงๆ กด Ctrl+C เพื่อหยุด

CLIENT LIST แสดง client ที่เชื่อมต่ออยู่ทุกตัวพร้อม id, address, database, command และ memory usage:

127.0.0.1:6379> CLIENT LIST
id=5 addr=127.0.0.1:54321 laddr=127.0.0.1:6379 fd=8 name= age=0 idle=0 flags=N db=0 cmd=client|list ...

Kill connection ที่ค้างอยู่ด้วย CLIENT KILL id 5

CLIENT LIST
CLIENT GETNAME
CLIENT INFO

RedisInsight คือ GUI อย่างเป็นทางการที่ให้ใช้ฟรีจาก Redis Ltd มี visual keyspace browser, slow-log viewer, memory profiler และ built-in CLI ดาวน์โหลดได้จาก redis.io/insight และเชื่อมต่อกับ Redis instance ใดก็ได้ — local หรือ remote

ตัวเลือกBenefitCost
SLOWLOG + INFO stats สำหรับ diagnostics ปกติปลอดภัยที่จะเปิดทิ้งไว้ใน production ไม่เพิ่ม loadไม่เห็นคำสั่งแบบ real-time ต้อง poll หรือ query ย้อนหลัง
MONITOR สำหรับ debug แบบ real-timeเห็นทุกคำสั่งที่แอปส่งจริง ๆ ทันที เหมาะกับ debug session สั้น ๆเพิ่ม server write load ประมาณสองเท่า อันตรายถ้าลืมปิดใน production
--bigkeys / --scan (ใช้ SCAN ภายใน)สแกน keyspace ทั้งหมดได้โดยไม่บล็อก serverยังคงกิน CPU/network ต่อเนื่องระหว่างสแกน ควรรันตอน traffic ต่ำ
RedisInsight GUIมองเห็นภาพรวม keyspace, slow log และ memory ได้ง่ายกว่า CLIต้องติดตั้งเพิ่มเติมและเปิด network access ไปยัง Redis instance
  • เปิด MONITOR ทิ้งไว้ใน production — คำสั่งนี้เพิ่ม write load ของ server ประมาณสองเท่าเพราะต้องส่งสำเนาทุกคำสั่งไปยัง monitoring client ใช้เฉพาะช่วง debug สั้น ๆ บน staging หรือ replica traffic ต่ำเท่านั้น
  • ใช้ KEYS * แทน --bigkeys/--scan เพื่อสำรวจ keyspaceKEYS * บล็อก server จนกว่าจะสแกนครบ ส่วน --bigkeys และ --scan ใช้ SCAN ภายในซึ่งไม่บล็อก
  • ไม่เคยตรวจ SLOWLOG หรือ INFO stats จนกว่าจะเกิดปัญหา performance จริง — ควร monitor เป็นประจำเพื่อจับ query ช้าหรือ memory ที่โตผิดปกติตั้งแต่เนิ่น ๆ ไม่ใช่รอให้ระบบล่มก่อน

💡 ตัวอย่างจากของจริง

ทีม SRE ทั่วไปที่ดูแล Redis fleet — ใช้ INFO stats และ SLOWLOG เป็นส่วนหนึ่งของ dashboard monitoring มาตรฐาน (ต่อกับ Grafana/Prometheus) แทนการเปิด MONITOR ซึ่งมีต้นทุนสูงเกินไปสำหรับ production

RedisInsight ในทีม dev — ใช้เป็นเครื่องมือ debug ประจำวันสำหรับดู key ที่ใหญ่ผิดปกติและ slow query ระหว่างพัฒนา ก่อนที่ปัญหาจะไปถึง production

คำสั่งใดแสดง N คำสั่ง Redis ที่ช้าที่สุดล่าสุดพร้อม duration?
ทำไมจึงควรหลีกเลี่ยงการเปิด MONITOR ทิ้งไว้ใน production?
flag ของ redis-cli ที่สแกน keyspace ทั้งหมดและรายงาน key ที่ใหญ่ที่สุดต่อแต่ละประเภทคืออะไร?
เพื่อนับ key ที่ตรง 'cache:*' โดยไม่บล็อก server คุณจะใช้: