Перейти к содержимому

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значение 1product (redis, valkey), version, mode
role_infoзначение 1role: master или replica
memory_used_bytes, memory_rss_bytes, memory_peak_bytes, memory_fragmentation_ratioпамять так, как её считает Redis, и так, как её считает система
memory_max_bytes, memory_used_percentmaxmemory и доля использования; отсутствует, если maxmemory равен 0 (без ограничения)
maxmemory_policy_infoзначение 1policy
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_ok0, если последний снимок (BGSAVE) не удался
rdb_changes_since_last_save, rdb_last_save_timestamp_seconds
aof_enabled, aof_last_write_ok, aof_last_rewrite_okappend-only файл; два статуса — только когда он включён
loading1, пока 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

Заголовок раздела «Создайте пользователя 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. Он никогда не читает, не записывает и не перечисляет ключи.

Учётные данныеПоля
Пользователь 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 не поддерживается.