Profiler

functional

A bounded, time-boxed MONITOR capture on its own connection, with pause, filters, and a hard stop.

The Profiler shows every command your Redis server executes, as it happens: one row per command with the server's own timestamp, the logical database, the client address, the command name, and its arguments. It lives in the Activity Monitor as the Profiler tab on Redis and Redis-compatible connections (Valkey, KeyDB, Dragonfly, Amazon ElastiCache, Amazon MemoryDB). The command palette's Redis Profiler… and Profiler… on a Redis database's right-click menu open the monitor straight onto it.

It is a profiler, not an audit log. The capture is bounded: the newest 10,000 entries are kept (you can change the cap), and when the ring is full the oldest entries are dropped - a counter under the table tells you exactly how many have been dropped that way. Memory is bounded too: each command's argument text keeps its first 64 KiB (a longer one ends with … (truncated, N bytes), and the text filter only sees the part that was kept), and past 64 MB in total the oldest entries are dropped and counted the same way. A high-traffic server can produce commands faster than they can be captured, so entries can be missing. Profile in short bursts, and read the dropped counter before drawing conclusions from what you do not see.

How it works

Press Start and SQLly opens a dedicated connection from the same profile and puts it in MONITOR mode - the editor still refuses MONITOR, because a command that never answers has no business on a request/response connection. The profiler is the deliberate exception: its connection does nothing but read the monitor stream, and Stop - or switching to another tab, closing the monitor (docked or popped out), disconnecting the connection, or deleting it - closes that connection immediately. Nothing keeps listening in the background.

Because the profiler dials the server itself, it needs a direct connection. On a connection routed through a relay bridge the tab explains that and Start stays disabled; the rest of the Activity Monitor still works through the relay.

Every capture also has a time box: the Stop after (s) field (five minutes by default, one hour at most) is a hard stop. When it elapses the capture closes its connection by itself and the status line says the time box was reached, so a forgotten profiler never keeps taxing the server.

The table updates live, newest command first, and shows at most the newest 2,000 commands that pass the filters - the ring behind it can hold far more, and the status line says "showing the newest 2000 of …" whenever it does. The table keeps your place while it updates: a selected row stays selected as new commands arrive, and if you scroll down the rows you are reading stay put. Pause freezes the list without closing the capture (commands keep draining and are counted, just not recorded, so nothing piles up), Clear empties it, and three filters narrow what you see - by command name (GET, EVAL…), by client address, or by any text in the arguments (case-insensitive). Filtering sifts the whole ring, not just the rows on screen. The grid's own column sort and filters are off for the live table; use these fields instead.

SQLly
Redis Profiler: a live MONITOR capture with command/client/text filters, the bounded-capture banner, and the dropped-oldest counter in the status line.
Redis Profiler: a live MONITOR capture with command/client/text filters, the bounded-capture banner, and the dropped-oldest counter in the status line.

MONITOR has a cost on the server side: every command from every client is also written to each monitor connection. On a busy production server, run the profiler for the seconds you need and stop it. An ACL user needs the +monitor permission (part of +@admin), and some managed services disable MONITOR altogether; either way the status line shows the server's own refusal instead of an empty table. If the stream stops on its own the status line says the stream ended - the server closed the connection, the network dropped, or a reply could not be read.