Watchlog DocsWatchlog Docs
Home
Get Started
Gen AI Monitoring
Integrations
Log Watchlist
Home
Get Started
Gen AI Monitoring
Integrations
Log Watchlist
  • All Integrations
  • NGINX

    • Nginx Integration
    • Connect NGINX to Watchlog
    • Docker
    • Windows
    • Kubernetes
    • Source Code
  • IIS

    • IIS Integration
    • Ubuntu
    • Docker Container
    • Windows
    • Kubernetes
    • Source Code
  • REDIS

    • Redis Integration
    • Ubuntu
    • Docker Container
    • Windows
    • Kubernetes
    • Source Code
  • POSTGRESQL

    • PostgreSQL Integration
    • Ubuntu
    • Docker Container
    • Windows
    • Kubernetes
    • Source Code
  • MONGODB

    • MongoDB Integration
    • Ubuntu
    • Docker Container
    • Windows
    • Kubernetes
    • Source Code
  • MYSQL

    • MySQL Integration
    • Ubuntu
    • Docker Container
    • Windows
    • Kubernetes
    • Source Code
  • PM2

    • PM2 Integration
    • Ubuntu
    • Docker Container
    • Windows
    • Kubernetes
    • Source Code
  • DOCKER

    • Docker Integration
    • Ubuntu
    • Docker Container
    • Windows
    • Kubernetes
    • Source Code
  • GITLAB

    • Gitlab Integration
    • Ubuntu
    • Docker
    • Windows
    • Kubernetes
    • Source
  • ELASTICSEARCH

    • Elasticsearch Integration
    • Ubuntu
    • Docker Container
    • Windows
    • Kubernetes
    • Source Code

Redis Integration

Monitor Redis memory pressure, command performance, keyspace behaviour, persistence, slow commands, replication and cluster health from a single Watchlog agent.

The agent runs redis-cli once per collection cycle and derives everything from that single round-trip.

Supported Platforms

  • Ubuntu
  • Windows
  • Source Code
  • Docker Container
  • Kubernetes

Requirements

redis-cli 6.2 or newer is required

Advanced collection needs redis-cli with --json support, which arrived in Redis 6.2. The agent checks for it and reports clearly if it is missing, rather than silently collecting nothing.

This is the version of the client on the agent's host, not the server. An older redis-cli talking to a Redis 7 server still will not work.

redis-cli --version
RequirementNotes
Redis 5.0+ serverTested against 5.x, 6.x and 7.x
redis-cli 6.2+ on the agent's hostMust be on PATH
A user with read accessACL user or the shared password

Authentication

Redis versionConfigure
6.0+ with ACLsusername and password
5.x, or requirepass onlypassword alone
No authLeave both empty

With ACLs, a read-only monitoring user is enough:

ACL SETUSER watchlog_monitor on >your_password ~* &* +@read +info +config|get +slowlog|get +client|list +cluster|info +cluster|nodes +replicaof|no

Or use the built-in read-only pattern if your policy prefers it. The commands Watchlog actually issues are INFO, INFO commandstats, SLOWLOG GET, CONFIG GET slowlog-*, CLUSTER INFO and CLUSTER NODES — nothing else.

What Watchlog Collects

Server and memory Version, mode, role, uptime, connected clients and blocked clients, used memory, peak memory, maxmemory and the eviction policy, RSS, memory fragmentation ratio, and Lua/script memory.

maxmemory = 0 means no limit

When maxmemory is 0, Redis has no configured ceiling. Watchlog reports memoryLimitConfigured: false and shows the usage without a percentage, rather than inventing a fake one against a limit that does not exist.

Commands (throttled — see intervals) Per command: calls, total and per-call microseconds, and rejected/failed counts where the server reports them. Ranked by total time consumed, so a cheap command called constantly ranks above a rare expensive one.

Keyspace Per database: keys, keys with a TTL, and average TTL. Plus cluster-wide keyspace hits and misses with the derived interval hit rate — not the since-boot ratio, which on a server up for months can no longer move.

Persistence RDB: last save time, changes since last save, last background save status and duration. AOF: enabled state, rewrite in progress, last rewrite status, current size and base size.

Slow commands From SLOWLOG GET: id, timestamp, duration, the command with arguments redacted, and the client address and name. The agent also reads CONFIG GET slowlog-* so the dashboard can tell you whether your configured threshold makes sense — it never writes that configuration.

Replication Role, connected replicas with their offsets and lag, master link status on a replica, and replication backlog state.

Cluster (when cluster mode is on) Cluster state, slots assigned / OK / PFAIL / FAIL, known nodes, cluster size, and per-node role and link state.

Health Score and Insights

A 0–100 score computed server-side, with a written reason on every deduction:

SignalJudged on
Memory pressureUsed against maxmemory — skipped entirely when no limit is configured
FragmentationRSS against used memory, which is what tells allocator waste from real growth
SwappingAny swap usage, which Redis degrades sharply under
Cache hit rateInterval hits against misses, not the lifetime ratio
Connection saturationClients against maxclients
Rejected connectionsConnections Redis refused outright
PersistenceRDB save failures, AOF write failures, and stuck AOF rewrites
ReplicationLink status, replica count, and lag
ClusterState, failing slots, and incomplete slot coverage

Insights add the interpretation: an eviction spike traced to a policy, a hit rate that dropped after a deploy, a replica that is connected but not streaming, and slot coverage that would make part of the keyspace unreachable.

Slow Commands

SLOWLOG is on by default in Redis, unlike MongoDB's profiler or Elasticsearch's slow logs — so this generally works with no server-side setup.

Watchlog reads it but never resets it. SLOWLOG RESET is destructive to anyone else reading the same log, so the agent tracks a high-water mark per instance instead: the same entry is never shipped twice, and never re-shipped after a restart.

Redis slowlog ids restart at 0 when the server restarts

The id alone is therefore not unique over time. Watchlog combines it with the server's run id so a replayed batch overwrites rather than duplicating.

Argument redaction

Command arguments are redacted on your host, before they leave it, and the rule is allow-list shaped rather than deny-list shaped — an argument is redacted unless it is provably safe to keep:

KeptWhy
The command nameSET, HGETALL, ZRANGEBYSCORE — the diagnostic itself
Key namesWhich key was slow is the whole point. Truncated if very long.
Numeric argumentsRange size is often the diagnosis — LRANGE key 0 -1 versus 0 10
Structural tokensLIMIT, WITHSCORES, MATCH, COUNT

Everything else becomes [REDACTED]. A SET session:abc <token> stores the key and the command, never the value. RESTORE never ships its serialized payload.

Collection Intervals

SectionInterval
INFO, memory, clients, persistence, replication, clusterevery collection cycle (60s)
Command statistics60s, configurable via commandsIntervalSeconds
Slowlogevery cycle, from the high-water mark

Safety

Watchlog is read-only. It never runs any of the following:

KEYS * · MONITOR · DEBUG SLEEP · FLUSHALL · FLUSHDB · CONFIG SET · SLOWLOG RESET · SCRIPT FLUSH · any write command

KEYS * and MONITOR deserve special mention: both are O(N) blocking operations that have taken down production Redis instances used exactly this way by other monitoring tools. Watchlog reads key counts from INFO keyspace, which is O(1).

Advanced Options

{
  "service": "redis",
  "monitor": true,
  "host": "127.0.0.1",
  "port": "6379",
  "username": "",
  "password": "your_password",
  "db": "",
  "tls": false,

  "advanced": {
    "enabled": true,
    "commands": true,
    "keyspace": true,
    "replication": true,
    "cluster": true,
    "maxCommands": 200,
    "commandsIntervalSeconds": 60
  },

  "slowlog": {
    "enabled": true,
    "limit": 128,
    "maxPerScrape": 100
  }
}
FieldDefaultPurpose
username(empty)Redis 6+ ACL user. Leave empty for requirepass-only setups.
db(empty)Database index to select. Rarely needed — INFO is server-wide.
tlsfalseAdds --tls to the redis-cli invocation
advanced.commandstrueINFO commandstats, which is not part of the default INFO reply
advanced.maxCommands200Command shapes kept per scrape, ranked by total time
slowlog.enabledtrueUnlike other integrations, this is on by default — SLOWLOG is on by default in Redis
slowlog.limit128How many entries to request per SLOWLOG GET

Multiple Instances

Add one entry per instance. Each is identified by its host:port:

[
  {
    "service": "redis",
    "monitor": true,
    "host": "127.0.0.1",
    "port": "6379",
    "password": "your_password"
  },
  {
    "service": "redis",
    "monitor": true,
    "host": "127.0.0.1",
    "port": "6380",
    "password": "your_password"
  }
]

Troubleshooting

SymptomCause
Nothing collected, error mentions --jsonredis-cli is older than 6.2, or is not on the agent's PATH
Commands tab emptyINFO commandstats is not in the default reply and needs advanced.commands; some managed providers also restrict it
Memory percentage missingmaxmemory is 0, so there is no limit to compute a percentage against. This is correct, not a bug.
Cluster tab missingThe server is not in cluster mode
NOAUTH errorsA password is set on the server but not in the config
WRONGPASS with a usernameRedis 5 does not support ACL usernames — leave username empty and use password alone
Slowlog emptyslowlog-log-slower-than may be set very high, or -1 which disables it. The dashboard shows your configured threshold.
Last Updated:: 8/13/26, 12:54 AM
Contributors: mohammad
Next
Ubuntu