Bringing a little slice of Developer Tools to Seq in 2022.1

If your experience is anything like mine, debugging in production is as much about organizing information - clues, leads, sometimes frustrating dead-ends - as it is about unearthing it. Working through an issue, I need pen and paper, sticky notes, whiteboards and spreadsheets as much as I depend on searching logs.

Seq is never going to replace my favorite Lamy pen (a chrome Pico I've hung onto for absolutely years 😊), but in 2022.1 there are two small improvements coming that should help with the information overload:

  • Variables as an alternative to copy-and-paste for keeping track of useful values, and
  • A redesigned (and searchable!) history makes it easier to jump back to an earlier search or query.

Search history doesn't need much explanation (it's now a tool window you can pop out in the signal bar), but variables are actually pretty interesting.

When GUIDs start to look alike...

The basic scenario looks like this:

Why does request cbc6f181ba66498092c78bdd4106e3f1 time out, while request c43df41457dd443a83f1bcf94353a3c7 succeeds?

Instead of copying those values back and forth to a text editor window, inevitably forgetting which is on the clipboard at any given moment, Seq 2022.1 supports assigning them to variable names:

select 'cbc6f181ba66498092c78bdd4106e3f1' into $failingRequest

You can use the resulting variable names in any expression where you would otherwise use the value:

Executing the search "RequestId = $failingRequest" to find events with a particular request id.

The design of variables in Seq takes inspiration from the ubiquitous browser developer tools console: variables are somewhere to stash and inspect useful pieces of information while you work on a problem.

This could be a little confusing if you were expecting variables to behave more like those in procedural languages such as Transact-SQL or PL/pgSQL. Seq doesn't support procedural programming, so there's no way to, say, reassign a variable on each iteration of a loop. If you're here looking for something along those lines, check out let bindings instead.

Quick variables

The green check-mark menu beside event properties can now be used to assign the value of a property to a new variable:

Drop-down menu expanded next to "RequestId", with "Assign to $requestId0" selected.

Seq will generate a variable name based on the property name. Variables can't be directly renamed, but you can give a variable a more meaningful name by selecting its value into a new one:

select $requestId0 into $slowRequest

Variables in signals, alerts, and dashboards

Variables are tracked client-side, and passed back to the server by the Seq UI whenever they appear in a search or query. The value you assign to a variable doesn't live any longer than your browser session.

This means that variable values aren't available when signals are indexed, when alerts are checked, or when your dashboard is rendered on an overhead display. To avoid silently failing with incorrect results, Seq will reject all variable references that appear in these places:

A new signal with filter "RequestId = $requestId0". The search results pane shows the error "The variable $requestId0 is not defined. Variables can only be used in interactive searches and queries, they cannot be used in signals, dashboards, or alerts."

Wrapping up the tour

So that's it! Variables are a simple feature, but also part of an exciting direction that we're going to explore further.

You can find out more about variables - the scenarios we've thought about, and some of the implementation details - in the Variables RFC.

Or, to jump in and try them against your next production debugging puzzle, pull the datalust/seq:preview Docker image, or download the 2022.1.*-pre MSI from the Seq downloads page. We can't wait to hear how you go!

Nicholas Blumhardt

Read more posts by this author.