Перейти к содержанию

Redis и Valkey

Само хранилище в памяти: память относительно maxmemory, отклонённые подключения, связь репликации и отставание каждой реплики, неудавшиеся снимки и записи в append-only файл, а также размер пространства ключей.

DumbMonit открывает одно соединение, отправляет AUTH, затем INFO и закрывает его. Используемая учётная запись может выполнять INFO и PING и ничего больше: она не может читать, записывать и даже перечислять ключи. Поддерживаются Redis 6 и новее, Valkey и форки, которые отвечают на INFO так же (KeyDB, Dragonfly).

Стоит следить за «тихими» сбоями. При достижении maxmemory Redis либо молча вытесняет ключи, либо отклоняет любую запись с ошибкой OOM command not allowed, в зависимости от maxmemory-policy; без maxmemory он растёт, пока его не убьёт ядро. Неудавшийся снимок заставляет Redis отклонять записи, пока включён stop-writes-on-bgsave-error, а по умолчанию он включён. Реплика, у которой оборвана связь с основным сервером, продолжает отвечать на чтение, но устаревшими данными.

За чем он следит

Все метрики имеют префикс dumbmonit_redis_. Итоговые значения — счётчики: графики и правила превращают их в скорости.

Метрика Что Метки
version_info значение 1 product (redis, valkey), version, mode
role_info значение 1 role: master или replica
memory_used_bytes, memory_rss_bytes, memory_peak_bytes, memory_fragmentation_ratio память так, как её считает Redis, и так, как её считает система
memory_max_bytes, memory_used_percent maxmemory и доля использования; отсутствует, если maxmemory равен 0 (без ограничения)
maxmemory_policy_info значение 1 policy
connected_clients, blocked_clients, max_clients
rejected_connections_total подключения, отклонённые из-за достижения maxclients
evicted_keys_total, expired_keys_total ключи, вытесненные при maxmemory, и ключи, срок действия которых истёк
keyspace_hits_total, keyspace_misses_total запросы, нашедшие свой ключ, и те, что не нашли
commands_processed_total, connections_received_total, ops_per_second
error_replies_total, acl_denied_auth_total отправленные ответы с ошибкой и отклонённые входы (подбор пароля виден здесь)
keys, keys_expiring ключи во всех базах и те, у которых есть срок действия; присутствует всегда, даже при нуле
db_keys ключи по базам db
rdb_last_save_ok 0, если последний снимок (BGSAVE) не удался
rdb_changes_since_last_save, rdb_last_save_timestamp_seconds
aof_enabled, aof_last_write_ok, aof_last_rewrite_ok append-only файл; два статуса — только когда он включён
loading 1, пока Redis загружает набор данных при запуске
connected_replicas реплики, подключённые к этому основному серверу
replica_online, replica_lag_seconds, replica_lag_bytes с точки зрения основного сервера, по каждой реплике: в сети или нет, секунды с её последнего подтверждения, отставание в байтах replica (ip:port)
master_link_up, master_last_io_seconds, master_link_down_seconds, master_sync_in_progress на реплике: её связь с основным сервером
uptime_seconds, cluster_enabled

Применяемые встроенные правила: Redis memory near maxmemory, Redis refusing connections, Redis replication link down, Redis replica lagging, Redis snapshot failed, Redis append-only file write failed, а также Monitor unreachable.

Страница монитора

Панель над графиками показывает то, что сохранил опрос; открытие страницы никогда не обращается к Redis. Она одним предложением сообщает, что не так (репликация, память относительно maxmemory и политика, действующая на пределе, персистентность, отклонённые подключения), затем показывает ключи, память, клиентов, команды в секунду, долю попаданий, ключи, вытесненные за последние 24 часа, и время работы, затем ключи по базам и отставание каждой реплики.

Создайте пользователя Redis, который может выполнять только INFO

  1. В Redis 6 или новее, либо в Valkey создайте пользователя, который может выполнять INFO и PING и ничего больше, без доступа к каким-либо ключам. В redis-cli, войдя под пользователем, которому разрешено управлять ACL:

    ACL SETUSER dumbmonit on >a-long-password -@all +info +ping
    
  2. Сделайте это постоянным: ACL SAVE, если сервер загружает пользователей из aclfile, иначе CONFIG REWRITE.

    ACL SAVE
    
  3. В Redis 5 или старше, либо если задан только requirepass, ниже выберите «Только пароль». Этот пароль даёт все права: по возможности предпочитайте пользователя ACL.

  4. В DumbMonit введите адрес сервера, например "cache.lan" или "cache.lan:6380". Если сервер принимает на этом порту только TLS (tls-port), отметьте TLS ниже.

  5. DumbMonit отправляет AUTH, затем INFO. Он никогда не читает, не записывает и не перечисляет ключи.

Warning

Redis не предупреждает до достижения maxmemory: на пределе он либо молча вытесняет ключи, либо отклоняет любую запись, в зависимости от maxmemory-policy. Без maxmemory он растёт, пока его не убьёт ядро. DumbMonit предупреждает при превышении 90% maxmemory.

Учётные данные

Учётные данные Поля
Пользователь ACL (рекомендуется) Созданный выше пользователь и его пароль, отправляются как AUTH user password.
Только пароль Значение requirepass, отправляется как AUTH password.
Без аутентификации Для сервера вообще без пароля.

Адрес: имя хоста или IP (cache.lan), host:port или строка подключения (redis://cache.lan:6380; всё после порта игнорируется, а записанные в ней учётные данные никогда не используются). Параметры: порт (6379), TLS (выкл.), проверка сертификата и тайм-аут всей проверки (10 с). При включённом TLS сертификат проверяется по публичным центрам сертификации, встроенным в DumbMonit; для частного центра сертификации отметьте «Принимать непроверяемый сертификат».

Отклонённый пароль (WRONGPASS, NOAUTH, NOPERM) отображается как ошибка учётных данных, и о самой ошибке никто не уведомляется, но DumbMonit при этом ничего не собирает: правило Monitor unreachable продолжает срабатывать, как и для любого монитора, который он не может прочитать, пока учётные данные не заработают снова. Именно это вызывает перезапуск Redis без его пользователя ACL (пользователи, заданные через ACL SETUSER, но не сохранённые).

В развёртывании Redis Sentinel или Cluster добавьте каждый сервер, за которым хотите следить: каждый сообщает о собственной памяти, клиентах и персистентности, а основной сервер сообщает о своих репликах. Сам Sentinel не поддерживается.