Check redis-status¶
Overview¶
Monitors a Redis server via the INFO command, reporting memory usage, fragmentation ratio, keyspace hit rate, connected clients, replication status, and persistence state.
Important Notes:
Tested on Redis 3.0+
Requires the
redis-clicommand-line tool„I’m here to keep you safe, Sam. I want to help you.“ comes from the character GERTY in the movie „Moon“ (2009)
Data Collection:
Executes
redis-cli info defaultandredis-cli memory doctoragainst the target Redis instanceConnects via hostname/port (default: 127.0.0.1:6379) or Unix socket
Supports authentication (username/password) and TLS connections
Reads OS-level settings from
/proc/sys/vm/overcommit_memory,/sys/kernel/mm/transparent_hugepage/enabled,/proc/sys/net/core/somaxconn, and/proc/sys/net/ipv4/tcp_max_syn_backlog
Fact Sheet¶
Fact |
Value |
|---|---|
Check Plugin Download |
https://github.com/Linuxfabrik/monitoring-plugins/tree/main/check-plugins/redis-status |
Nagios/Icinga Check Name |
|
Check Interval Recommendation |
Every minute |
Can be called without parameters |
Yes |
Runs on |
Linux |
Compiled for Windows |
No |
Requirements |
command-line tool |
Help¶
usage: redis-status [-h] [-V] [--always-ok] [--cacert CACERT] [-c CRIT]
[-H HOSTNAME] [--ignore-maxmemory0] [--ignore-overcommit]
[--ignore-somaxconn] [--ignore-sync-partial-err]
[--ignore-thp] [-p PASSWORD] [--port PORT]
[--socket SOCKET] [--test TEST] [--tls]
[--username USERNAME] [--verbose] [-w WARN]
Monitors a Redis server via the INFO command. Reports memory usage,
fragmentation ratio, keyspace hit rate, connected clients, replication status,
and persistence state. Alerts on memory consumption, high fragmentation, low
hit rates, and OS-level misconfigurations such as overcommit and transparent
huge pages. Includes Redis Memory Doctor diagnostics when available.
options:
-h, --help show this help message and exit
-V, --version show program's version number and exit
--always-ok Always returns OK.
--cacert CACERT CA certificate file for TLS verification. Requires
`--tls`. Default: /etc/pki/tls/certs/rootCA.pem
-c, --critical CRIT CRIT threshold for memory usage as a percentage.
Default: >= None
-H, --hostname HOSTNAME
Redis server hostname. Default: 127.0.0.1
--ignore-maxmemory0 Suppress the warning when Redis maxmemory is set to 0
(unlimited). Default: False
--ignore-overcommit Suppress the warning when vm.overcommit_memory is not
set to 1. Default: False
--ignore-somaxconn Suppress the warning when net.core.somaxconn is lower
than net.ipv4.tcp_max_syn_backlog. Default: False
--ignore-sync-partial-err
Suppress the warning about partial sync errors. Useful
for asynchronous replication setups where a small
number of "denied partial resync requests" is
expected. Default: False
--ignore-thp Suppress the warning about transparent huge pages
being enabled. Default: False
-p, --password PASSWORD
Password for Redis server authentication.
--port PORT Redis server port. Default: 6379
--socket SOCKET Redis server Unix socket path. Overrides --hostname
and --port.
--test TEST For unit tests. Needs "path-to-stdout-file,path-to-
stderr-file,expected-retc".
--tls Establish a secure TLS connection to Redis.
--username USERNAME Username for Redis server authentication.
--verbose Makes this plugin verbose during the operation. Useful
for debugging and seeing what is going on under the
hood. Default: False
-w, --warning WARN WARN threshold for memory usage as a percentage.
Default: >= 90
Usage Examples¶
./redis-status \
--ignore-maxmemory0 \
--ignore-overcommit \
--ignore-somaxconn \
--ignore-sync-partial-err \
--ignore-thp \
--username=linus \
--password=linuxfabrik
Output:
Redis v5.0.3, standalone mode on 127.0.0.1:6379, /etc/redis.conf, up 4m 25s, 100.9% memory usage
[WARNING] (9.6MiB/9.5MiB, 9.6MiB peak, 19.6MiB RSS), maxmemory-policy=noeviction, 3 DBs
(db0 db3 db4) with 10 keys, 0.0 evicted keys, 0.0 expired keys, hit rate 100.0%
(3.0M hits, 0.0 misses), vm.overcommit_memory is not set to 1, kernel transparent_hugepage is not
set to "madvise" or "never", net.core.somaxconn (128) is lower than net.ipv4.tcp_max_syn_backlog
(256). Sam, I detected a few issues in this Redis instance memory implants:
* High total RSS: This instance has a memory fragmentation and RSS overhead greater than 1.4
(this means that the Resident Set Size of the Redis process is much larger than the sum of the
logical allocations Redis performed). This problem is usually due either to a large peak
memory (check if there is a peak memory entry above in the report) or may result from a workload
that causes the allocator to fragment memory a lot. If the problem is a large peak memory, then
there is no issue. Otherwise, make sure you are using the Jemalloc allocator and not the default
libc malloc. Note: The currently used allocator is "jemalloc-5.1.0".
I'm here to keep you safe, Sam. I want to help you.
States¶
OK if memory usage is below the warning threshold and no OS-level misconfigurations are detected.
WARN or CRIT if memory usage exceeds the configured thresholds (default: WARN >= 90%).
WARN when
maxmemoryis set to 0 (unlimited), unless suppressed via--ignore-maxmemory0.WARN on memory issues reported by Redis Memory Doctor (except harmless peak-only or jemalloc cases).
WARN on partial sync errors, unless suppressed via
--ignore-sync-partial-err.WARN on OS-level misconfigurations (
vm.overcommit_memory, transparent huge pages,somaxconn), each individually suppressible.--always-oksuppresses all alerts and always returns OK.
Perfdata / Metrics¶
Latest info can be found here.
Name |
Type |
Description |
|---|---|---|
clients_blocked_clients |
Number |
Number of clients pending on a blocking call |
clients_connected_clients |
Number |
Number of client connections (excluding connections from replicas) |
cpu_used_cpu_sys |
Number |
System CPU consumed by the Redis server, which is the sum of system CPU consumed by all threads of the server process (main thread and background threads) |
cpu_used_cpu_sys_children |
Number |
System CPU consumed by the background processes |
cpu_used_cpu_user |
Number |
User CPU consumed by the Redis server, which is the sum of user CPU consumed by all threads of the server process (main thread and background threads) |
cpu_used_cpu_user_children |
Number |
User CPU consumed by the background processes |
db_count |
Number |
Number of Redis databases |
key_count |
Number |
Sum of all keys across all databases |
keyspace_DBNAME_avg_ttl |
Seconds |
Average TTL for keys in this database |
keyspace_DBNAME_expires |
Number |
The number of keys with an expiration |
keyspace_DBNAME_keys |
Number |
The number of keys |
keyspace_hit_rate |
Percentage |
Percentage of key lookups that are successfully returned by keys in your Redis instance |
mem_usage |
Percentage |
How close the working set size is to reaching the maxmemory limit |
memory_maxmemory |
Bytes |
Configured maximum memory limit |
memory_mem_fragmentation_ratio |
Number |
Ratio between used_memory_rss and used_memory |
memory_total_system_memory |
Bytes |
The total amount of memory that the Redis host has |
memory_used_memory |
Bytes |
Total number of bytes allocated by Redis using its allocator |
memory_used_memory_lua |
Bytes |
Number of bytes used by the Lua engine |
memory_used_memory_rss |
Bytes |
Number of bytes that Redis allocated as seen by the operating system (resident set size) |
persistance_aof_current_rewrite_time_sec |
Seconds |
Duration of the on-going AOF rewrite operation if any |
persistance_aof_rewrite_in_progress |
Number |
Flag indicating an AOF rewrite operation is on-going |
persistance_aof_rewrite_scheduled |
Number |
Flag indicating an AOF rewrite operation will be scheduled once the on-going RDB save is complete |
persistance_loading |
Number |
Flag indicating if the load of a dump file is on-going |
persistance_rdb_bgsave_in_progress |
Number |
Flag indicating a RDB save is on-going |
persistance_rdb_changes_since_last_save |
Number |
Number of changes since the last dump |
persistance_rdb_current_bgsave_time_sec |
Seconds |
Duration of the on-going RDB save operation if any |
replication_connected_slaves |
Number |
Number of connected replicas |
replication_repl_backlog_histlen |
Bytes |
Size in bytes of the data in the replication backlog buffer |
replication_repl_backlog_size |
Bytes |
Total size in bytes of the replication backlog buffer |
server_uptime_in_seconds |
Seconds |
Number of seconds since Redis server start |
stats_evicted_keys |
Continuous Counter |
Number of evicted keys due to maxmemory limit |
stats_expired_keys |
Continuous Counter |
Total number of key expiration events |
stats_instantaneous_input |
Number |
The network read rate per second in KB/sec |
stats_instantaneous_ops_per_sec |
Number |
Number of commands processed per second |
stats_instantaneous_output |
Number |
The network write rate per second in KB/sec |
stats_keyspace_hits |
Number |
Number of successful lookup of keys in the main dictionary |
stats_keyspace_misses |
Number |
Number of failed lookup of keys in the main dictionary |
stats_latest_fork_usec |
Number |
Duration of the latest fork operation in microseconds |
stats_migrate_cached_sockets |
Number |
The number of sockets open for MIGRATE purposes |
stats_pubsub_channels |
Number |
Global number of pub/sub channels with client subscriptions |
stats_pubsub_patterns |
Number |
Global number of pub/sub patterns with client subscriptions |
stats_rejected_connections |
Number |
Number of connections rejected because of maxclients limit |
stats_sync_full |
Number |
The number of full resyncs with replicas |
stats_sync_partial_err |
Number |
The number of denied partial resync requests |
stats_sync_partial_ok |
Number |
The number of accepted partial resync requests |
stats_total_commands_processed |
Number |
Total number of commands processed by the server |
stats_total_connections_received |
Number |
Total number of connections accepted by the server |
stats_total_net_input_bytes |
Bytes |
The total number of bytes read from the network |
stats_total_net_output_bytes |
Bytes |
The total number of bytes written to the network |
Troubleshooting¶
vm.overcommit_memory is not set to 1
sysctl -w vm.overcommit_memory=1
kernel transparent_hugepage is not set to "madvise"
echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
net.core.somaxconn is lower than net.ipv4.tcp_max_syn_backlog
tcp_max_syn_backlog represents the maximal number of connections in SYN_RECV queue. somaxconn represents the maximal size of ESTABLISHED queue and should be greater than tcp_max_syn_backlog, so do something like this: sysctl -w net.core.somaxconn=1024; sysctl -w net.ipv4.tcp_max_syn_backlog=512
Credits, License¶
Authors: Linuxfabrik GmbH, Zurich
License: The Unlicense, see LICENSE file.