Плагин Redis
Мониторинг экземпляров кэша и базы данных Redis с подробными метриками, отслеживающими использование памяти, производительность, персистентность и репликацию.
Обзор
Плагин Redis собирает детальные метрики с серверов Redis, включая:
- Использование памяти - Потребление памяти, фрагментация, пиковое использование
- Производительность - Команды в секунду, попадания/промахи keyspace, эффективность кэша
- Соединения - Подключённые клиенты, заблокированные клиенты, отклонённые соединения
- Персистентность - Статус RDB и AOF, время последнего сохранения, изменения с момента последнего сохранения
- Репликация - Статус master/slave, лаг репликации, подключённые реплики
- Keyspace - Ключи по базам данных, истекающие ключи, средний TTL
Требования
Версия Redis
- Минимум: Redis 4.0
- Рекомендуется: Redis 6.0 или новее
- Протестировано с: Redis 5.0, 6.0, 6.2, 7.0, 7.2
Зависимости Python
pip install redis>=4.5.0
Устанавливается автоматически при использовании PLUGINS=redis во время установки агента.
Сетевой доступ
Агент должен иметь возможность подключиться к Redis:
# Test connectivity
redis-cli -h localhost -p 6379 ping
Ожидаемый ответ: PONG
Конфигурация
Базовая конфигурация
plugins:
redis:
enabled: true
host: localhost
port: 6379
С паролем
plugins:
redis:
enabled: true
host: localhost
port: 6379
password: 'your-redis-password'
С SSL/TLS
plugins:
redis:
enabled: true
host: redis.example.com
port: 6380
password: 'your-redis-password'
ssl: true
Удалённый сервер Redis
plugins:
redis:
enabled: true
host: redis-server.example.com
port: 6379
password: 'secure-password'
database: 0
Все параметры конфигурации
plugins:
redis:
enabled: true # Enable/disable plugin
host: localhost # Redis hostname or IP
port: 6379 # Redis port (default: 6379)
password: '' # Redis password (optional)
database: 0 # Database number to connect to (default: 0)
ssl: false # Use SSL/TLS connection (default: false)
socket_timeout: 5 # Connection timeout in seconds (default: 5)
socket_connect_timeout: 5 # Connect timeout in seconds (default: 5)
Переменные окружения
Конфигурацию можно переопределить переменными окружения:
export REDIS_HOST="localhost"
export REDIS_PORT="6379"
export REDIS_PASSWORD="secret"
export REDIS_DATABASE="0"
export REDIS_SSL="false"
Собираемые метрики
Все метрики собираются командой Redis INFO.
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
used_memory_mb |
Всего памяти, выделенной Redis | Мегабайты | Gauge |
memory_fragmentation_ratio |
Отношение RSS к выделенной памяти | Коэффициент | Gauge |
keyspace_hits_total |
Успешные обращения к ключам (накопительно) | Количество | Counter |
keyspace_misses_total |
Неудачные обращения к ключам (накопительно) | Количество | Counter |
hit_rate_percent |
Процент попаданий в кэш | Проценты | Gauge |
connected_clients |
Количество подключённых клиентов | Количество | Gauge |
ops_per_sec |
Текущее число операций в секунду | ops/s | Gauge |
evicted_keys |
Ключи, вытесненные из-за maxmemory (накопительно) | Количество | Counter |
expired_keys |
Истёкшие ключи (накопительно) | Количество | Counter |
uptime_seconds |
Время работы сервера Redis | Секунды | Gauge |
used_memory_peak_mb |
Пиковое использование памяти | Мегабайты | Gauge |
connected_slaves |
Количество подключённых реплик | Количество | Gauge |
rdb_last_save_time |
Unix-метка времени последнего сохранения RDB | Метка времени | Gauge |
Примечания:
- Memory Fragmentation Ratio: Здоровый диапазон — 1.0-1.5. Значения < 1.0 указывают на свопинг (плохо), значения > 1.5 указывают на фрагментацию (рассмотрите перезапуск)
- Hit Rate: Вычисляется как
keyspace_hits / (keyspace_hits + keyspace_misses) * 100. У здорового кэша hit rate должен быть > 90% - Connected Slaves: Актуально только для master-экземпляров в конфигурации с репликацией
Метрики дашборда
Дашборд StatusRadar отображает:
Карточка обзора
- Status - Сервер Redis работает/не работает
- Uptime - Человекочитаемое время работы (преобразовано из
uptime_seconds) - Connected Clients - Активные клиентские соединения
График использования памяти
- Used Memory (MB) -
used_memory_mb - Peak Memory (MB) -
used_memory_peak_mb - Memory Fragmentation Ratio -
memory_fragmentation_ratio
График производительности
- Operations per second -
ops_per_sec - Cache hit rate (%) -
hit_rate_percent - Keyspace hits (total) -
keyspace_hits_total - Keyspace misses (total) -
keyspace_misses_total
Вытеснение и истечение
- Evicted keys (total) -
evicted_keys - Expired keys (total) -
expired_keys
Статус репликации
- Connected slaves -
connected_slaves - Last RDB save time -
rdb_last_save_time
Конфигурация Redis
Особая настройка не требуется
Мониторинг Redis работает с конфигурацией Redis по умолчанию. Никаких особых настроек не нужно.
Опционально: защита паролем
Установите пароль Redis:
Отредактируйте /etc/redis/redis.conf:
requirepass your-secure-password-here
Перезапустите Redis:
sudo systemctl restart redis
Обновите конфигурацию агента:
plugins:
redis:
enabled: true
password: 'your-secure-password-here'
Опционально: включение персистентности
RDB (снапшоты):
Отредактируйте /etc/redis/redis.conf:
save 900 1 # Save after 900 sec if 1 key changed
save 300 10 # Save after 300 sec if 10 keys changed
save 60 10000 # Save after 60 sec if 10000 keys changed
AOF (Append-Only File):
appendonly yes
appendfsync everysec # Options: always, everysec, no
Опционально: ограничение памяти
Предотвратите неограниченный рост памяти:
maxmemory 2gb
maxmemory-policy allkeys-lru # LRU eviction policy
Политики вытеснения:
noeviction- Возвращать ошибки при достижении лимита памятиallkeys-lru- Вытеснять давно не использовавшиеся ключиvolatile-lru- Вытеснять LRU-ключи с установленным сроком истеченияallkeys-random- Вытеснять случайные ключиvolatile-random- Вытеснять случайные ключи со сроком истеченияvolatile-ttl- Вытеснять ключи с наименьшим TTL
Установка
Быстрая установка
PLUGINS='redis' \
TOKEN='your-agent-token' \
bash -c "$(curl -sL https://statusradar.dev/install-agent.sh)"
Установка на существующий агент
-
Установите зависимость Python:
cd /opt/statusradar source venv/bin/activate # If using venv pip install redis -
Включите плагин в конфигурации:
sudo nano /opt/statusradar/config/agent.yamlДобавьте:
plugins: redis: enabled: true host: localhost port: 6379 -
Перезапустите агент:
sudo systemctl restart statusradar-agent -
Проверьте:
sudo journalctl -u statusradar-agent -n 50 --no-pager | grep redisОжидаемо:
INFO: Plugin redis: Metrics collected successfully
Тестирование
Ручной тест плагина
cd /opt/statusradar
export PLUGINS=redis
python3 plugins/redis_plugin.py
Ожидаемый вывод:
Plugin name: redis
Enabled: True
Available: True
Metrics collected (13 keys):
used_memory_mb: 32.5
memory_fragmentation_ratio: 1.2
keyspace_hits_total: 1000
keyspace_misses_total: 100
hit_rate_percent: 90.91
connected_clients: 5
ops_per_sec: 42
evicted_keys: 0
expired_keys: 50
uptime_seconds: 86400
used_memory_peak_mb: 48.3
connected_slaves: 0
rdb_last_save_time: 1697123456
}
Тест подключения к Redis
# Basic ping
redis-cli ping
# With password
redis-cli -a your-password ping
# Remote server
redis-cli -h redis.example.com -p 6379 -a password ping
# Check INFO output
redis-cli info
Устранение неполадок
Плагин не собирает метрики
Проверка 1: Запущен ли Redis?
sudo systemctl status redis
Проверка 2: Может ли агент подключиться?
redis-cli -h localhost -p 6379 ping
Проверка 3: Верен ли пароль?
redis-cli -a your-password ping
Проверка 4: Включён ли плагин?
grep -A5 "redis:" /opt/statusradar/config/agent.yaml
Проверка 5: Установлен ли Python-пакет?
python3 -c "import redis; print(redis.__version__)"
Распространённые ошибки
"Connection refused"
Ошибка:
ERROR: Plugin redis: [Errno 111] Connection refused
Причина: Redis не запущен или неверный host/port
Решение:
# Check if Redis is running
sudo systemctl status redis
# Start Redis
sudo systemctl start redis
# Verify port
sudo netstat -tlnp | grep 6379
# Check configuration
cat /opt/statusradar/config/agent.yaml | grep -A5 redis
"Authentication required"
Ошибка:
ERROR: Plugin redis: NOAUTH Authentication required
Причина: Redis требует пароль, но он не указан
Решение:
Добавьте пароль в конфигурацию агента:
plugins:
redis:
enabled: true
password: 'your-redis-password'
"No module named 'redis'"
Ошибка:
ERROR: No module named 'redis'
Причина: Python-пакет redis не установлен
Решение:
pip install redis
# Or
cd /opt/statusradar && source venv/bin/activate && pip install redis
"Wrong password"
Ошибка:
ERROR: Plugin redis: WRONGPASS invalid username-password pair
Причина: Неверный пароль в конфигурации
Решение:
-
Проверьте пароль Redis:
grep "^requirepass" /etc/redis/redis.conf -
Обновите конфигурацию агента правильным паролем
-
Перезапустите агент:
sudo systemctl restart statusradar-agent
Метрики показывают ноль
Симптом: Некоторые метрики всегда показывают 0
Проверьте вывод INFO:
redis-cli info
Обратите внимание на:
keyspace_hits:0, keyspace_misses:0- Кэш ещё не использовалсяconnected_slaves:0- Сервер не является master с репликамиdb0_keys:0- В базе данных 0 нет ключей
Это нормально, если:
- Redis только что запустился
- Ни одно приложение его пока не использует
- База данных пуста
Влияние на производительность
На Redis
Незначительное влияние:
- Плагин выполняет команду
INFO ALLодин раз за интервал сбора - Команда
INFOлегковесна (время выполнения < 1 мс) - Операция только для чтения, без изменения данных
- Нет конкуренции за блокировки
Бенчмарк:
- QPS Redis с мониторингом: 100,000+ ops/sec
- QPS Redis без мониторинга: 100,000+ ops/sec
- Накладные расходы: < 0.01%
На агент
Использование ресурсов:
- Память: +10 MB
- CPU: +2% во время сбора (0.1-0.3 секунды)
- Сеть: +1 KB за сбор
Сценарии использования
1. Мониторинг производительности кэша
Отслеживайте:
- Hit rate (должен быть > 90%)
- Вытесненные ключи (высокое вытеснение = нужно больше памяти)
- Фрагментацию памяти
Настройте оповещения на:
- Hit rate < 80%
- Использование памяти > 90%
- Коэффициент фрагментации > 1.5
2. Мониторинг хранилища сессий
Отслеживайте:
- Подключённые клиенты
- Всего ключей
- Истекающие ключи
Настройте оповещения на:
- Внезапное падение числа клиентов (сбой приложения)
- Ключи не истекают (утечка памяти)
3. Мониторинг очередей
Отслеживайте:
- Заблокированные клиенты (потребители очереди)
- Длины списков (через пользовательские скрипты)
- Операции в секунду
Настройте оповещения на:
- Отсутствие заблокированных клиентов (потребители упали)
- Высокий ops/sec (переполнение очереди)
4. Мониторинг репликации
Отслеживайте:
- Статус подключения реплик
- Лаг репликации
- Количество подключённых реплик
Настройте оповещения на:
- Отключение реплики
- Лаг репликации > 10 секунд
- Падение числа реплик
Лучшие практики
1. Используйте последнюю версию Redis
Преимущества:
- Более эффективное использование памяти
- Улучшенная производительность команды INFO
- Более детальные метрики
2. Включите персистентность для продакшена
RDB для резервных копий:
save 900 1
save 300 10
save 60 10000
AOF для надёжности:
appendonly yes
appendfsync everysec
3. Установите лимит maxmemory
Предотвратите OOM:
maxmemory 4gb
maxmemory-policy allkeys-lru
4. Следите за фрагментацией памяти
Если mem_fragmentation_ratio > 1.5:
- Перезапустите Redis в период низкого трафика
- Рассмотрите использование аллокатора
jemalloc
5. Защитите паролем
В продакшене всегда устанавливайте requirepass:
requirepass strong-random-password-here
6. Следите за лагом репликации
Для конфигураций master-slave настройте оповещение на:
master_link_status = 0(реплика отключена)lag > 5 seconds
Расширенная конфигурация
Несколько экземпляров Redis
Чтобы мониторить несколько экземпляров Redis, разверните отдельные агенты или используйте мониторинг Sentinel/Cluster (скоро).
Redis Cluster
Плагин мониторит отдельные узлы. Для метрик в масштабе кластера опрашивайте каждый узел по отдельности.
Redis Sentinel
Плагин подключается к экземпляру Redis, а не к Sentinel. Мониторьте Sentinel отдельно через HTTP API.
Примеры конфигураций
Сервер разработки
plugins:
redis:
enabled: true
host: localhost
port: 6379
Продакшен-сервер (защищённый)
plugins:
redis:
enabled: true
host: localhost
port: 6379
password: 'strong-password-from-env'
database: 0
Удалённый Redis (SSL)
plugins:
redis:
enabled: true
host: redis.example.com
port: 6380
password: 'secure-password'
ssl: true
socket_timeout: 10
Redis на нестандартном порту
plugins:
redis:
enabled: true
host: localhost
port: 6380 # Custom port
password: 'password'
Справочник по метрикам
Полный список метрик
Плагин собирает 13 метрик командой Redis INFO:
Память (3 метрики):
used_memory_mb- Текущее использование памяти в мегабайтахused_memory_peak_mb- Пиковое использование памяти в мегабайтахmemory_fragmentation_ratio- Коэффициент фрагментации памяти
Производительность (5 метрик):
ops_per_sec- Текущее число операций в секундуkeyspace_hits_total- Всего успешных обращений к ключам (counter)keyspace_misses_total- Всего неудачных обращений к ключам (counter)hit_rate_percent- Вычисленный процент попаданий в кэшconnected_clients- Количество подключённых клиентов
Вытеснение и истечение (2 метрики):
evicted_keys- Всего ключей, вытесненных из-за maxmemory (counter)expired_keys- Всего истёкших ключей (counter)
Система (2 метрики):
uptime_seconds- Время работы сервера Redis в секундах
Репликация (1 метрика):
connected_slaves- Количество подключённых экземпляров-реплик
Персистентность (1 метрика):
rdb_last_save_time- Unix-метка времени последнего снапшота RDB
Дальнейшие шаги
- Обзор
- Требования
- Версия Redis
- Зависимости Python
- Сетевой доступ
- Конфигурация
- Базовая конфигурация
- С паролем
- С SSL/TLS
- Удалённый сервер Redis
- Все параметры конфигурации
- Переменные окружения
- Собираемые метрики
- Метрики дашборда
- Карточка обзора
- График использования памяти
- График производительности
- Вытеснение и истечение
- Статус репликации
- Конфигурация Redis
- Особая настройка не требуется
- Опционально: защита паролем
- Опционально: включение персистентности
- Опционально: ограничение памяти
- Установка
- Быстрая установка
- Установка на существующий агент
- Тестирование
- Ручной тест плагина
- Тест подключения к Redis
- Устранение неполадок
- Плагин не собирает метрики
- Распространённые ошибки
- Метрики показывают ноль
- Влияние на производительность
- На Redis
- На агент
- Сценарии использования
- 1. Мониторинг производительности кэша
- 2. Мониторинг хранилища сессий
- 3. Мониторинг очередей
- 4. Мониторинг репликации
- Лучшие практики
- 1. Используйте последнюю версию Redis
- 2. Включите персистентность для продакшена
- 3. Установите лимит maxmemory
- 4. Следите за фрагментацией памяти
- 5. Защитите паролем
- 6. Следите за лагом репликации
- Расширенная конфигурация
- Несколько экземпляров Redis
- Redis Cluster
- Redis Sentinel
- Примеры конфигураций
- Сервер разработки
- Продакшен-сервер (защищённый)
- Удалённый Redis (SSL)
- Redis на нестандартном порту
- Справочник по метрикам
- Полный список метрик
- Дальнейшие шаги