Info
License: Free — part of the universal collection tier.
Redis / Valkey¶
The redis probe monitors Redis (or Valkey) via the INFO command, reporting
memory usage, client connections, command throughput, cache hit/miss ratio,
keyspace size, replication state and persistence (RDB/AOF) health.
Quick start¶
# probes.d/10-redis.yaml — each file under probes.d/ is a YAML array of probes
- name: redis
type: redis
params:
host: 127.0.0.1
port: 6379
Parameters¶
| Parameter | Must set | Default | Description |
|---|---|---|---|
host |
In practice | 127.0.0.1 |
Server hostname or address |
port |
In practice | 6379 |
Server port |
password |
In practice | - | AUTH password, when required. A secret: reference it with ${secret:…}, ${env:…} or ${file:…} rather than writing it in the file |
tls |
No | false |
Use TLS for the connection |
tls_cert_file |
No | - | Client certificate (PEM) for mutual TLS; needs tls_key_file and tls: true |
tls_key_file |
No | - | Private key (PEM) matching tls_cert_file |
tls_ca_file |
No | - | CA bundle (PEM) to verify the server; system trust store by default |
timeout |
No | 5 |
Connection and command timeout in seconds |
interval |
No | 60 |
Seconds between collections |
instance_name |
No | - | Stable identity instead of host:port |
Set instance_name to keep the entity identity stable when the address changes.
Metrics¶
| Metric | Unit | Description |
|---|---|---|
senhub.db.up |
1 | 1 when the agent reached the Redis server |
redis.uptime |
s | Server uptime |
redis.clients.connected |
{connection} | Connected client count |
redis.clients.blocked |
{connection} | Clients blocked on a command (BLPOP, etc.) |
redis.connections.received |
{connection} | Total connections accepted since start |
redis.memory.used |
By | Memory currently allocated by Redis |
redis.memory.peak |
By | Peak memory allocation |
redis.memory.fragmentation.ratio |
1 | Memory fragmentation ratio |
redis.commands.processed |
{command} | Total commands processed since start |
redis.keyspace.hits |
{hit} | Successful key lookups |
redis.keyspace.misses |
{miss} | Failed key lookups |
redis.expired_keys |
{key} | Keys expired since start |
redis.evicted_keys |
{key} | Keys evicted due to maxmemory policy |
redis.replication.lag |
s | Replica lag in seconds (replica instances only) |
redis.rdb.last_bgsave.duration |
s | Duration of the last RDB background save |
redis.rdb.last_bgsave.status |
{status} | Last RDB save outcome (1 ok, 0 err) |
redis.aof.last_bgrewrite.status |
{status} | Last AOF rewrite outcome (1 ok, 0 err) |
redis.aof.last_write.status |
{status} | Last AOF write outcome (1 ok, 0 err) |
redis.aof.last_rewrite.duration |
s | Duration of the last AOF rewrite, -1 when none has run |
redis.replication.backlog_active |
{status} | 1 when the replication backlog is allocated |
redis.replication.backlog_size |
By | Configured replication backlog size |
redis.replication.backlog_histlen |
By | History held in the replication backlog |
redis.pubsub.channels |
{channel} | Active pub/sub channels |
redis.pubsub.patterns |
{pattern} | Active pub/sub pattern subscriptions |
redis.sentinel.master.status |
{status} | Sentinel mode only: one series per monitored master (attribute redis.sentinel.master.name), 1 ok, 0 sdown/odown |
redis.sentinel.master.slaves |
{replica} | Sentinel mode only: replicas known per master |
redis.sentinel.master.sentinels |
{sentinel} | Sentinel mode only: sentinels watching each master |
Operational notes¶
- Valkey (the Redis fork) exposes the same
INFOinterface; configure it identically. - For Redis Cluster, point the probe at one node; cluster-wide stats are reported per node, not aggregated.
- Metric names align with the community
redis_exporterbaseline.
Metric reference¶
Every metric this probe can emit. Metric is the OpenTelemetry name the
OTLP, Prometheus and Zabbix outputs derive theirs from. Name is what a
Nagios check and the API metrics= filter match.
PRTG channel is the label PRTG shows, placeholders filled from the
series' tags.
| Metric | Name | PRTG channel | Unit | Description |
|---|---|---|---|---|
senhub.db.up |
senhub.db.up |
Redis Up | # | 1 if the agent reached the Redis server, 0 otherwise |
redis.uptime |
redis.uptime |
Uptime | s | Seconds since the Redis server started (uptime_in_seconds) |
senhub.db.version.info |
senhub.db.version.info |
Version | # | Redis version banner — value=1, version string carried in attribute db.system.version |
redis.clients.connected |
redis.clients.connected |
Clients Connected | # | Number of client connections (connected_clients) |
redis.clients.blocked |
redis.clients.blocked |
Clients Blocked | # | Clients blocked waiting on a blocking call (blocked_clients) |
redis.connections.received |
redis.connections.received |
Connections Received | # | Cumulative accepted connections (total_connections_received) |
redis.connections.rejected |
redis.connections.rejected |
Connections Rejected | # | Cumulative rejected connections — maxclients cap (rejected_connections) |
redis.memory.used |
redis.memory.used |
Memory Used | B | Allocator-reported used memory (used_memory) |
redis.memory.used.rss |
redis.memory.used.rss |
Memory RSS | B | OS-reported RSS (used_memory_rss) — includes fragmentation overhead |
redis.memory.peak |
redis.memory.peak |
Memory Peak | B | Peak allocator-reported memory (used_memory_peak) |
redis.memory.fragmentation.ratio |
redis.memory.fragmentation.ratio |
Memory Fragmentation Ratio | # | used_memory_rss / used_memory — greater than 1.5 indicates high fragmentation |
redis.commands.processed |
redis.commands.processed |
Commands Processed | # | Cumulative commands processed (total_commands_processed) |
redis.net.input |
redis.net.input |
Network Input | B | Cumulative bytes received from clients (total_net_input_bytes) |
redis.net.output |
redis.net.output |
Network Output | B | Cumulative bytes sent to clients (total_net_output_bytes) |
redis.commands |
redis.ops.per_sec |
Ops/s | # | Instantaneous commands per second (instantaneous_ops_per_sec) |
redis.keyspace.hits |
redis.keyspace.hits |
Keyspace Hits | # | Cumulative successful key lookups (keyspace_hits) |
redis.keyspace.misses |
redis.keyspace.misses |
Keyspace Misses | # | Cumulative failed key lookups (keyspace_misses) |
redis.keyspace.hit.ratio |
redis.keyspace.hit.ratio |
Hit Ratio | % | keyspace_hits / (keyspace_hits + keyspace_misses) — derived gauge, 0 when no traffic |
redis.db.keys |
redis.db.keys |
DB {db} Keys | # | Total keys in logical database (keyspace section: dbN:keys=K) |
redis.db.expires |
redis.db.expires |
DB {db} Expiring Keys | # | Keys with a TTL in logical database (keyspace section: dbN:expires=M) |
redis.replication.role |
redis.replication.role |
Replication Role | # | Instance role: master=1, slave/replica=0, sentinel=-1 |
redis.replication.offset |
redis.replication.offset |
Replication Offset | B | Replication offset in bytes (master_repl_offset on master, slave_repl_offset / replica_repl_offset on replica) |
redis.replication.slaves.connected |
redis.replication.slaves.connected |
Replicas Connected | # | Number of replicas currently connected (connected_slaves, master only) |
redis.replication.lag |
redis.replication.lag |
Replication Lag | s | Seconds since last master communication (master_last_io_seconds_ago, replica only) |
redis.rdb.changes |
redis.rdb.changes |
RDB Changes Since Save | # | Writes since last RDB save (rdb_changes_since_last_save) |
redis.aof.enabled |
redis.aof.enabled |
AOF Enabled | # | 1 when AOF persistence is enabled (aof_enabled) |
redis.rdb.last_bgsave.duration |
redis.rdb.last_bgsave.duration |
RDB Last BGSave Duration | s | Duration of the last RDB background save in seconds (rdb_last_bgsave_time_sec) |
redis.rdb.last_save.age |
redis.rdb.last_save.age |
RDB Last Save Age | s | Seconds elapsed since the last successful RDB save (now − rdb_last_save_time) |
redis.rdb.last_bgsave.status |
redis.rdb.last_bgsave.status |
RDB Last BGSave Status | # | Outcome of the last RDB background save: 1=ok, 0=err (rdb_last_bgsave_status) |
redis.aof.last_bgrewrite.status |
redis.aof.last_bgrewrite.status |
AOF Last Rewrite Status | # | Outcome of the last AOF background rewrite: 1=ok, 0=err (aof_last_bgrewrite_status) |
redis.aof.last_write.status |
redis.aof.last_write.status |
AOF Last Write Status | # | Outcome of the last write to the AOF: 1=ok, 0=err (aof_last_write_status) |
redis.aof.last_rewrite.duration |
redis.aof.last_rewrite.duration |
AOF Last Rewrite Duration | s | Duration of the last AOF rewrite in seconds, -1 when none has run yet (aof_last_rewrite_time_sec) |
redis.latest.fork |
redis.latest.fork |
Latest Fork Duration | μs | Duration of the latest fork operation in microseconds (latest_fork_usec) |
redis.cpu.time |
redis.cpu.time |
CPU Time ({state}) | s | Cumulative CPU time consumed by the Redis server in the given state (used_cpu_sys / used_cpu_user / used_cpu_sys_children / used_cpu_user_children) |
redis.memory.lua |
redis.memory.lua |
Memory Lua | B | Memory used by the Lua scripting engine (used_memory_lua) |
redis.clients.max_input_buffer |
redis.clients.max_input_buffer |
Client Max Input Buffer | B | Largest input buffer across all current client connections (client_recent_max_input_buffer) |
redis.clients.max_output_buffer |
redis.clients.max_output_buffer |
Client Max Output Buffer | B | Largest output buffer across all current client connections (client_recent_max_output_buffer) |
redis.db.avg_ttl |
redis.db.avg_ttl |
DB {db} Average TTL | ms | Average TTL in milliseconds of keys with an expiry in logical database (keyspace section: dbN:avg_ttl=T) |
redis.replication.backlog_first_byte_offset |
redis.replication.backlog_first_byte_offset |
Replication Backlog First Byte Offset | B | Replication backlog first byte offset (repl_backlog_first_byte_offset) |
redis.replication.backlog_active |
redis.replication.backlog_active |
Replication Backlog Active | # | 1 when the replication backlog is allocated (repl_backlog_active) |
redis.replication.backlog_size |
redis.replication.backlog_size |
Replication Backlog Size | B | Configured size of the replication backlog (repl_backlog_size) |
redis.replication.backlog_histlen |
redis.replication.backlog_histlen |
Replication Backlog Used | B | Bytes of history currently held in the replication backlog (repl_backlog_histlen) |
redis.pubsub.channels |
redis.pubsub.channels |
Pub/Sub Channels | # | Number of active pub/sub channels (pubsub_channels) |
redis.pubsub.patterns |
redis.pubsub.patterns |
Pub/Sub Patterns | # | Number of active pub/sub pattern subscriptions (pubsub_patterns) |
redis.evicted_keys |
redis.evicted_keys |
Evicted Keys | # | Cumulative keys evicted due to maxmemory policy (evicted_keys) |
redis.expired_keys |
redis.expired_keys |
Expired Keys | # | Cumulative keys expired by the TTL mechanism (expired_keys) |
redis.cmd.calls |
redis.cmd.calls |
Cmd {cmd} Calls | # | Cumulative call count for the given Redis command (INFO commandstats: cmdstat_X:calls=N) |
redis.cmd.time |
redis.cmd.usec |
Cmd {cmd} Usec | μs | Cumulative microseconds spent executing the given Redis command (INFO commandstats: cmdstat_X:usec=N) |
redis.cluster.state |
redis.cluster.state |
Cluster State | # | Cluster health: 1=ok, 0=fail (cluster_state from INFO cluster; emitted only when cluster_enabled=1) |
redis.cluster.slots.assigned |
redis.cluster.slots.assigned |
Cluster Slots Assigned | # | Number of slots assigned to cluster nodes (cluster_slots_assigned) |
redis.cluster.slots.ok |
redis.cluster.slots.ok |
Cluster Slots OK | # | Number of slots not in FAIL or PFAIL state (cluster_slots_ok) |
redis.cluster.slots.pfail |
redis.cluster.slots.pfail |
Cluster Slots PFAIL | # | Number of slots in PFAIL state (cluster_slots_pfail) |
redis.cluster.slots.fail |
redis.cluster.slots.fail |
Cluster Slots FAIL | # | Number of slots in FAIL state — serving requests is blocked until fixed (cluster_slots_fail) |
redis.cluster.links.created |
redis.cluster.links.created |
Cluster Messages Sent | # | Cumulative cluster bus messages sent (cluster_stats_messages_sent) |
redis.cluster.links.disconnected |
redis.cluster.links.disconnected |
Cluster Messages Received | # | Cumulative cluster bus messages received (cluster_stats_messages_received) |
redis.sentinel.masters |
redis.sentinel.masters |
Sentinel Masters | # | Number of Redis masters monitored by this Sentinel (sentinel_masters; emitted only in sentinel mode) |
redis.sentinel.slaves |
redis.sentinel.slaves |
Sentinel Slaves (total) | # | Total number of replicas across all monitored masters (aggregated from per-master lines) |
redis.sentinel.ok_slaves |
redis.sentinel.ok_slaves |
Sentinel Slaves OK | # | Replicas belonging to masters whose status=ok (aggregated from per-master lines) |
redis.sentinel.sentinels |
redis.sentinel.sentinels |
Sentinel Sentinels (total) | # | Total number of Sentinel peers across all monitored masters (aggregated from per-master lines) |
redis.sentinel.ok_sentinels |
redis.sentinel.ok_sentinels |
Sentinel Sentinels OK | # | Sentinel peers belonging to masters whose status=ok (aggregated from per-master lines) |
redis.sentinel.scripts_queue_length |
redis.sentinel.scripts_queue_length |
Sentinel Scripts Queue | # | Number of scripts in the Sentinel notification-scripts queue (sentinel_running_scripts) |
redis.sentinel.master.status |
redis.sentinel.master.status |
Sentinel Master {master} Status | # | Status of a monitored master: 1=ok, 0=odown/sdown or any other state (INFO sentinel masterN status; one series per master, attribute redis.sentinel.master.name) |
redis.sentinel.master.slaves |
redis.sentinel.master.slaves |
Sentinel Master {master} Replicas | # | Replicas known for a monitored master (INFO sentinel masterN slaves) |
redis.sentinel.master.sentinels |
redis.sentinel.master.sentinels |
Sentinel Master {master} Sentinels | # | Sentinels monitoring a master, this one included (INFO sentinel masterN sentinels) |
redis.tracking.clients |
redis.tracking.clients |
Tracking Clients | # | Number of clients using RESP3 client-side caching tracking (tracking_clients; 0 when absent) |
redis.tracking.keys |
redis.tracking.keys |
Tracking Keys | # | Number of keys in the client-side tracking invalidation table (tracking_table_used_keys; 0 when absent) |