Метрики и алертинг для 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. Для кэшаexpires≈keys.
Prometheus метрики
Прикладные (из приложения)
| Метрика | Тип | Labels | Зачем |
|---|---|---|---|
cache_hits_total | Counter | prefix | Hit rate по типу данных |
cache_misses_total | Counter | prefix | CacheMissRate |
cache_errors_total | Counter | op (get/set/del/parse) | Отличить connection failures от corrupt data |
cache_operation_duration_seconds | Histogram | op | Латентность операций (p50/p95/p99) |
Инфраструктурные (redis-exporter)
oliver006/redis_exporter — стандартный Prometheus exporter для Redis. ~5MB RAM. Подключается к Redis, экспортирует метрики из INFO:
redis_memory_used_bytes— потребление памятиredis_memory_max_bytes— лимит maxmemoryredis_evicted_keys_total— вытесненные ключиredis_keyspace_hits_total/redis_keyspace_misses_totalredis_connected_clientsredis_up— Redis жив (1/0)
Алерты
| Алерт | Условие | Severity | Причина |
|---|---|---|---|
| Cache down | Нет hits/misses 10 минут (при наличии прошлой активности) | Warning | Redis может быть недоступен. Приложение деградирует к прямым запросам в БД |
| Low hit rate | < 30% за 30 минут | Warning | Кэш неэффективен — возможно, слишком короткий TTL или данные слишком уникальны |
| High error rate | > 0.1/s за 5 минут | Warning | Connection проблемы, data corruption, или timeout |
| High latency | p95 > 100ms | Warning | Перегрузка Redis, сетевые проблемы, или большие ключи |
| Memory critical | used_memory / maxmemory > 0.9 | Warning | Приближается к лимиту, вытеснение ключей учащается |
| Eviction rate | evicted_keys rate > 10/s | Warning | maxmemory недостаточно для рабочего набора |
Важно: алерт “Cache down” не должен срабатывать если Redis не настроен (опциональная зависимость). Проверять наличие прошлой активности перед алертом.
Grafana Dashboard
Минимальный набор панелей:
- Hit Rate (gauge) —
hits / (hits + misses). Порог: >70% зелёный, 30-70% жёлтый, <30% красный. - Operations/sec (timeseries, stacked by prefix) — нагрузка по типу данных.
- Errors/min (timeseries by op) — спайки = проблемы.
- Latency p95 (timeseries by op) — GET/SET/DEL.
- Hit Rate by prefix (timeseries) — какие данные кэшируются хорошо, какие нет.
- Error Rate (stat panel) — single number для быстрой оценки.