Метрики и алертинг для Redis, особенно в роли кэша.

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

Команда INFO возвращает состояние сервера. Основные секции:

Memory

  • used_memory / used_memory_rss — аллоцированная память vs RSS (реальное потребление ОС). Разница — overhead jemalloc.
  • mem_fragmentation_ratio = used_memory_rss / used_memory. Норма 1.0-1.5. Выше 1.5 — фрагментация, стоит включить activedefrag. Ниже 1.0 — swap используется (критично!).
  • used_memory_peak — пиковое потребление за всё время. Полезно для планирования maxmemory.
  • evicted_keys — сколько ключей вытеснено из-за maxmemory. Рост означает, что памяти не хватает.

Stats

  • keyspace_hits / keyspace_misses — hit ratio = hits/(hits+misses). Цель > 80% для кэша.
  • instantaneous_ops_per_sec — текущая нагрузка.
  • total_connections_received — суммарные подключения за uptime.

Clients

  • connected_clients — текущие соединения. Утечка = рост без соответствующего трафика.
  • blocked_clients — заблокированные (BLPOP, BRPOP). Для кэша должно быть 0.

Keyspace

  • db0:keys=1234,expires=1200 — количество ключей и ключей с TTL. Для кэша expireskeys.

Prometheus метрики

Прикладные (из приложения)

МетрикаТипLabelsЗачем
cache_hits_totalCounterprefixHit rate по типу данных
cache_misses_totalCounterprefixCacheMissRate
cache_errors_totalCounterop (get/set/del/parse)Отличить connection failures от corrupt data
cache_operation_duration_secondsHistogramopЛатентность операций (p50/p95/p99)

Инфраструктурные (redis-exporter)

oliver006/redis_exporter — стандартный Prometheus exporter для Redis. ~5MB RAM. Подключается к Redis, экспортирует метрики из INFO:

  • redis_memory_used_bytes — потребление памяти
  • redis_memory_max_bytes — лимит maxmemory
  • redis_evicted_keys_total — вытесненные ключи
  • redis_keyspace_hits_total / redis_keyspace_misses_total
  • redis_connected_clients
  • redis_up — Redis жив (1/0)

Алерты

АлертУсловиеSeverityПричина
Cache downНет hits/misses 10 минут (при наличии прошлой активности)WarningRedis может быть недоступен. Приложение деградирует к прямым запросам в БД
Low hit rate< 30% за 30 минутWarningКэш неэффективен — возможно, слишком короткий TTL или данные слишком уникальны
High error rate> 0.1/s за 5 минутWarningConnection проблемы, data corruption, или timeout
High latencyp95 > 100msWarningПерегрузка Redis, сетевые проблемы, или большие ключи
Memory criticalused_memory / maxmemory > 0.9WarningПриближается к лимиту, вытеснение ключей учащается
Eviction rateevicted_keys rate > 10/sWarningmaxmemory недостаточно для рабочего набора

Важно: алерт “Cache down” не должен срабатывать если Redis не настроен (опциональная зависимость). Проверять наличие прошлой активности перед алертом.

Grafana Dashboard

Минимальный набор панелей:

  1. Hit Rate (gauge) — hits / (hits + misses). Порог: >70% зелёный, 30-70% жёлтый, <30% красный.
  2. Operations/sec (timeseries, stacked by prefix) — нагрузка по типу данных.
  3. Errors/min (timeseries by op) — спайки = проблемы.
  4. Latency p95 (timeseries by op) — GET/SET/DEL.
  5. Hit Rate by prefix (timeseries) — какие данные кэшируются хорошо, какие нет.
  6. Error Rate (stat panel) — single number для быстрой оценки.

Связанные заметки