Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Troubleshooting и мониторинг
troubleshooting

Troubleshooting и мониторинг

Диагностика проблем, мониторинг, логи, slow log, Redis Insight

Troubleshooting и мониторинг

Диагностика проблем Redis требует понимания метрик, логов и инструментов. Эта тема покрывает slow log, latency monitoring, MEMORY DOCTOR, Redis Insight и production мониторинг.

#Slow Log

Slow log логирует запросы медленнее указанного порога.

#Настройка

# redis.conf # Порог в микросекундах (10000 мкс = 10 мс) slowlog-log-slower-than 10000 # Максимум записей в логе slowlog-max-len 128

#Использование

# Получить последние 10 медленных запросов SLOWLOG GET 10 # Получить все записи SLOWLOG GET # Количество записей SLOWLOG LEN # Очистить лог SLOWLOG RESET

#Анализ записей

127.0.0.1:6379> SLOWLOG GET 5 1) 1) (integer) 1234 2) (integer) 1709395200 3) (integer) 15234 # Время выполнения в микросекундах (15.2 мс) 4) 1) "KEYS" 2) "user:*" 5) "192.168.1.50:54321" # Клиент 6) "MyApp" # Имя клиента 2) 1) (integer) 1233 2) (integer) 1709395190 3) (integer) 12045 4) 1) "HGETALL" 2) "large:hash:key"

#Частые причины медленных запросов

КомандаПроблемаРешение
KEYS patternO(N) сканирование всех ключейИспользовать SCAN
HGETALL large_hashЧтение большого объектаИспользовать HSCAN или получать по полям
SMEMBERS large_setЧтение большого множестваИспользовать SSCAN
LRANGE list 0 -1Чтение всего спискаУказать диапазон или использовать LTRIM
DEL large_keyУдаление большого ключаУдалять постепенно или использовать UNLINK

#Latency Monitoring

#Встроенные инструменты

# Мониторинг latency в реальном времени redis-cli --latency # Вывод: min: 0, max: 5, avg: 1.23 # История latency (с интервалом) redis-cli --latency-history -i 1 # Latency для конкретной команды redis-cli --latency-dist -h localhost # Анализ причин latency redis-cli LATENCY DOCTOR # История latency событий redis-cli LATENCY HISTORY # График latency (в терминале) redis-cli LATENCY GRAPH

#LATENCY DOCTOR вывод

# I can report the following latency events:
#
# command: 1 instances detected.
#   max: 15ms, avg: 12ms
#   Advice: Check slow log for slow commands
#
# fork: 2 instances detected.
#   max: 25ms, avg: 20ms
#   Advice: BGSAVE/BGREWRITEAOF causing latency spikes
#
# Summary:
# - Fork operations are causing latency due to large dataset
# - Consider scheduling BGSAVE during low-traffic periods

#MEMORY DOCTOR

MEMORY DOCTOR анализирует использование памяти и даёт рекомендации.

127.0.0.1:6379> MEMORY DOCTOR Sam, I have a few reports for you: * High memory fragmentation: The allocator is using 1.35GB of RSS memory to store 1GB of data. This is a fragmentation ratio of 35%. Advice: Consider restarting Redis or using MEMORY PURGE. * Big keys detected: The key 'large:hash:123' is using 50MB of memory. Advice: Consider splitting this key into smaller keys. * High peak memory: Peak memory was 1.5GB, current is 1GB. Advice: Consider setting maxmemory to prevent future peaks. Overall: Your memory usage looks acceptable, but monitor fragmentation.

#Анализ больших ключей

# Найти самые большие ключи redis-cli --bigkeys # Вывод: # Scanning the entire keyspace to find biggest keys... # # Biggest hash found: user:12345:cache (52428800 bytes) # Biggest list found: queue:tasks (10485760 bytes) # Biggest set found: tags:popular (5242880 bytes) # Biggest zset found: leaderboard:global (2097152 bytes) # Biggest string found: backup:full:20260302 (104857600 bytes) # Размер конкретного ключа redis-cli MEMORY USAGE user:12345:cache # 52428800 # Детальная информация о ключе redis-cli MEMORY STATS

#Redis Insight

Redis Insight — официальный GUI от Redis Ltd для мониторинга и управления.

#Возможности

  • Визуализация структур данных
  • Анализ памяти по ключам
  • Slow log и latency мониторинг
  • Cluster management
  • Pub/Sub viewer
  • Console с автодополнением

#Установка

# Docker docker run -d -p 8001:8001 redis/redisinsight:latest # Подключение к localhost:6379 через веб-интерфейс http://localhost:8001

#Production мониторинг

#Ключевые метрики

# Получить все метрики INFO ALL # Или по секциям INFO server INFO memory INFO persistence INFO stats INFO replication INFO cluster

#Memory метрики

INFO memory # Ключевые: used_memory: 1073741824 # 1GB данных used_memory_rss: 1394630656 # 1.3GB процесса (OS) used_memory_peak: 1610612736 # Пик 1.5GB used_memory_lua: 102400 # Lua память maxmemory: 2147483648 # Лимит 2GB mem_fragmentation_ratio: 1.30 # 30% фрагментация mem_allocator: jemalloc-5.2.1

#Stats метрики

INFO stats # Ключевые: total_connections_received: 100000 total_commands_processed: 50000000 instantaneous_ops_per_sec: 5000 # Текущий throughput rejected_connections: 0 # Отклонённые подключения sync_full: 0 # Полные синхронизации реплик sync_partial_ok: 5 # Частичные синхронизации expired_keys: 10000 # Истёкшие ключи evicted_keys: 0 # Вытесненные ключи keyspace_hits: 900000 # Попадания в кэш keyspace_misses: 100000 # Промахи hit_rate: 90% # (hits / (hits + misses))

#Persistence метрики

INFO persistence # RDB: rdb_changes_since_last_save: 100 rdb_last_bgsave_time_sec: 5 rdb_last_bgsave_status: ok rdb_last_save_time: 1709395200 # AOF: aof_enabled: 1 aof_rewrite_in_progress: 0 aof_last_rewrite_time_sec: 10 aof_last_bgrewrite_status: ok aof_current_size: 104857600 # 100MB aof_base_size: 52428800 # 50MB после последнего rewrite

#Алертинг

#Prometheus + Grafana

# docker-compose.yml для мониторинга version: '3.8' services: redis: image: redis:7-alpine ports: - "6379:6379" redis-exporter: image: oliver006/redis_exporter ports: - "9121:9121" environment: - REDIS_ADDR=redis:6379 - REDIS_PASSWORD=redis-password prometheus: image: prom/prometheus ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml grafana: image: grafana/grafana ports: - "3000:3000" volumes: - grafana_data:/var/lib/grafana environment: - GF_SECURITY_ADMIN_PASSWORD=admin volumes: grafana_data:
# prometheus.yml global: scrape_interval: 15s scrape_configs: - job_name: 'redis' static_configs: - targets: ['redis-exporter:9121']

#Алерты (Prometheus)

# alerts.yml groups: - name: redis rules: - alert: RedisDown expr: redis_up == 0 for: 1m annotations: summary: "Redis instance is down" description: "Redis {{ $labels.instance }} is not responding" - alert: RedisHighMemory expr: redis_memory_used_bytes / redis_memory_max_bytes > 0.9 for: 5m annotations: summary: "Redis memory usage is high" description: "Memory usage is {{ $value | humanizePercentage }}" - alert: RedisHighFragmentation expr: redis_mem_fragmentation_ratio > 1.5 for: 10m annotations: summary: "Redis memory fragmentation is high" description: "Fragmentation ratio is {{ $value }}" - alert: RedisLowHitRate expr: redis_keyspace_hits / (redis_keyspace_hits + redis_keyspace_misses) < 0.8 for: 10m annotations: summary: "Redis cache hit rate is low" description: "Hit rate is {{ $value | humanizePercentage }}" - alert: RedisRejectedConnections expr: rate(redis_rejected_connections_total[1m]) > 0 for: 1m annotations: summary: "Redis is rejecting connections" description: "Rejected connections: {{ $value }}" - alert: RedisPersistenceError expr: redis_rdb_last_bgsave_status != 1 or redis_aof_last_bgrewrite_status != 1 for: 1m annotations: summary: "Redis persistence failed" description: "Last persistence operation failed"

#Диагностика проблем

#Проблема: Высокая память

# 1. Проверка использования памяти INFO memory # 2. Поиск больших ключей redis-cli --bigkeys # 3. Проверка фрагментации INFO memory | grep fragmentation # 4. Рекомендации MEMORY DOCTOR # 5. Очистка фрагментации (если безопасно) MEMORY PURGE # 6. Удаление старых ключей SCAN 0 MATCH pattern:* COUNT 1000 # Затем DEL найденных ключей

#Проблема: Низкий hit rate

# 1. Проверка hit rate INFO stats | grep keyspace # 2. Анализ TTL ключей SCAN 0 COUNT 1000 # Проверить TTL ключей # 3. Проверка eviction INFO stats | grep evicted # 4. Увеличение maxmemory или изменение policy CONFIG SET maxmemory 4gb CONFIG SET maxmemory-policy allkeys-lru

#Проблема: Медленные запросы

# 1. Проверка slow log SLOWLOG GET 10 # 2. Анализ latency LATENCY DOCTOR # 3. Поиск проблемных команд # Если KEYS — заменить на SCAN # Если HGETALL большого hash — использовать HSCAN # 4. Проверка fork latency (BGSAVE) INFO persistence | grep rdb_last_bgsave

#Проблема: Репликация отстаёт

# 1. Проверка статуса репликации INFO replication # 2. Ключевые метрики: # master_repl_offset - slave_repl_offset = lag # slave_state: online/wait # 3. Проверка сети между master и slave ping <slave-ip> # 4. Увеличение backlog CONFIG SET repl-backlog-size 256mb # 5. Проверка нагрузки на master INFO stats | grep instantaneous_ops

#Чеклист troubleshooting

ПроблемаКоманда для диагностики
Медленные запросыSLOWLOG GET, LATENCY DOCTOR
Высокая памятьINFO memory, MEMORY DOCTOR, --bigkeys
Низкий hit rateINFO stats (keyspace_hits/misses)
Проблемы репликацииINFO replication
Проблемы персистентностиINFO persistence
FragmentationINFO memory (fragmentation_ratio)
ПодключенияINFO clients, CLIENT LIST
Cluster проблемыCLUSTER INFO, CLUSTER NODES

Проверьте понимание → ответьте на вопросы в troubleshooting.json