There are several Redis metrics that can be viewed through redis-cli.
Running the INFO command provides many of the metrics available in a single view.
127.0.0.1:6379> INFO
# Server
redis_version:6.0.1
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:e02d1d807e41d65
redis_mode:standalone
os:Linux 4.19.121-linuxkit x86_64
…There are several sections that can be pulled individually. For example, if you wanted to just get the CLIENTS section you can pass that section as an argument to the INFO command.
127.0.0.1:6379> INFO CLIENTS
# Clients
connected_clients:1
client_recent_max_input_buffer:2
client_recent_max_output_buffer:0
blocked_clients:0
tracking_clients:0
clients_in_timeout_table:0Server: the current Redis server info.
Metrics of note:
redis_versionprocess_idconfig_fileuptime_in_secondsuptime_in_daysClients: available data on clients connected or failed connections.
Metrics of note:
connected_clientsblocked_clientsMemory: memory usage and stats
Metrics of note:
used_memorymem_fragmentation_ratioPersistence: RDB or AOF metrics
Metrics of note:
rdb_last_save_timerdb_changes_since_last_saveaof_rewrite_in_progressStats: some general statistics
Metrics of note:
keyspace_hitskeyspace_missesexpired_keysevicted_keysinstantaneous_ops_per_secReplication: replication data including primary/replica identifiers and offsets
Metrics of note:
master_link_down_sinceconnected_slavesmaster_last_io_seconds_agoCPU: compute consumption stats
Metrics of note:
used_cpu_sysused_cpu_userModules: data from any loaded modules
Metrics of note (per module):
veroptionsCluster: whether cluster is enabled
Metric of note:
cluster_enabledKeyspace: keys and expiration data
Metrics of note (per db):
keysexpiresavg_ttlThe output can be read from the results or piped into a file.
127.0.0.1:6379> redis-cli INFO STATS > redis-info-statsThis could be done at intervals and consumed by a local or third party monitoring service.
Some of the data returned by INFO are going to be static. For example the Redis version which won't change until an update is made. Other data is dynamic, for keyspace_hits ÷ keyspace_misses. The latter could be taken to compute a hit ratio and observed as a long term metric. The replication section field master_link_down_since could be a metric to connect an alert.
Some examples of possible alerts that could be setup for a given metric:
This is not an exhaustive list, but just to give you an idea of how the metrics in INFO could be used.
The redis-cli client has some built-in options that allow you to pull some real-time latency and stats data.
These are not available as commands from Redis but as options in redis-cli.
Latency options:
Continuously sample latency:
$ redis-cli --latency
min: 1, max: 17, avg: 4.03 (927 samples)The raw or csv output flag can be added:
$ redis-cli --latency --csv
1,4,1.94,78In order to sample for longer than one second you can use latency-history which has a default interval of 15 seconds but can be specified using the -i param.
$ redis-cli --latency-history -i 60
min: 1, max: 30, avg: 4.84 (328 samples)This can also be combined with the csv or raw output format flag.
$ redis-cli --latency-history -i 60 --csv
13,13,13.00,1
5,13,9.00,2
3,13,7.00,3
3,13,6.00,4
3,13,5.60,5
2,13,5.00,6
2,13,5.43,7
2,13,5.62,8
2,13,5.22,9
2,13,5.00,10
1,13,4.64,11
…Both of these could be piped to a file as well.
The latency-dist option shows latency as a spectrum. The default interval is one second but can be changed using the -i param.
Stats option:
Get rolling stats from the server using the stat flag.
$ redis-cli --stat
------- data ------ --------------------- load -------------------- - child -
keys mem clients blocked requests connections
4 9.98M 51 0 8168035 (+0) 4132
4 9.98M 51 0 8181542 (+13507) 4132
4 9.98M 51 0 8196100 (+14558) 4132
4 9.98M 51 0 8209794 (+13694) 4132
4 9.98M 51 0 8223420 (+13626) 4132
4 9.98M 51 0 8236624 (+13204) 4132
4 9.98M 51 0 8251376 (+14752) 4132
4 9.98M 51 0 8263417 (+12041) 4182
4 9.98M 51 0 8276781 (+13364) 4182
4 9.90M 51 0 8289693 (+12912) 4182Redis includes a MEMORY command that includes a subcommand to get stats.
127.0.0.1:6379> memory stats
1) "peak.allocated"
2) (integer) 11912984
3) "total.allocated"
4) (integer) 8379168
5) "startup.allocated"
6) (integer) 5292168
7) "replication.backlog"
8) (integer) 0
9) "clients.slaves"
10) (integer) 0
11) "clients.normal"
12) (integer) 16986
13) "aof.buffer"
14) (integer) 0These values are available in the INFO MEMORY command as well, but here they are returned in a typical Redis RESP Array reply.
There is also a LATENCY DOCTOR subcommand with an analysis report of the current memory metrics.
As we know Redis is fast and as a result is often used in very extreme scenarios where low latency is a must. Redis has a feature called Latency Monitoring which allows you to dig into possible latency issues. Latency monitoring is composed of the following conceptual parts:
By default this feature is disabled because most of the time it is not needed. In order to enable it you can update the threshold time in milliseconds that you want to monitor in your Redis configuration. Events that take longer than the threshold will be logged as latency spikes. The threshold configuration should be set accordingly if the requirement is to identify all events blocking the server for a time of 10 milliseconds or more.
latency-monitor-threshold 10If the debugging session is intended to be temporary the threshold can be set via redis-cli.
127.0.0.1:6379> CONFIG SET latency-monitor-threshold 10To disable the latency framework the threshold should be set back to 0.
127.0.0.1:6379> CONFIG SET latency-monitor-threshold 0The latency data can be viewed using the LATENCY command with it's subcommands:
LATENCY LATEST - latest samples for all eventsLATENCY HISTORY - latest time series for a given eventLATENCY RESET - resets the time series dataLATENCY GRAPH - renders an ASCII-art graphLATENCY DOCTOR - analysis reportIn order to make use of these commands you need to make yourself familiar with the different events that the latency monitoring framework is tracking. (taken from https://redis.io/topics/latency-monitor" )
For example, you can use the LATENCY LATEST subcommand and you may see some data like this:
127.0.0.1:6379> latency latest
1) 1) "command"
2) (integer) 1616372606
3) (integer) 600
4) (integer) 600
2) 1) "fast-command"
2) (integer) 1616372434
3) (integer) 12
4) (integer) 12The results of this command provide the timestamp, latency and max latency for this event. Utilizing the events table above I can see we had latency spikes for a regular command with the latest and max latency of 600 MS while a O(1) or O(log N) command had a latency spike of 12 MS.
Some of the latency commands require a specific event be passed.
127.0.0.1:6379> latency graph command
command - high 600 ms, low 100 ms (all time high 600 ms)
--------------------------------------------------------------------------------
_##
o|||
o||||
_#|||||
3222184
05308ss
sssssWhile the cost of enabling latency monitoring is near zero and memory requirements are very small it will raise your baseline memory usage so if you are getting the required performance out of Redis there is no need to leave this enabled.
There are many open source monitoring tools and services to visualize your Redis metrics - some of which also provide alerting capabilities.
One example of this is the Redis Data Source for Grafana. It is a Grafana plug-in that allows users to connect to the Redis database and build dashboards to easily observe Redis data. It provides an out-of-the-box predefined dashboard but also lets you build customized dashboards tuned to your specific needs.
$ redis-cli --latency
min: 1, max: 17, avg: 4.03 (927 samples)Metric | Example Alert |
|---|---|
| < 300 seconds: to ensure the server is staying up |
| < minimum number of expected application connections |
| > 30 seconds: replication should be operational |
| > maximum acceptable interval without taking a snapshot |
Metric | Example Alert |
|---|---|
| regular commands |
|
|
| the |
| the |
| writing to the AOF - a catchall event |
| the |
| the |
| the |
| the |
| the |
| the |
| writing the differences accumulated while performing |
| the active defragmentation cycle |
| the expiration cycle |
| the eviction cycle |
| deletes during the eviction cycle |