What's new in seqcli?

It's been a while since we posted an update on Seq's hard-working command-line client, seqcli.

The 2025.1 build has just been released, but I'll include some favorites here from the 2024.x series as well, since we've kept a few features under our hats.

Streaming searches

The 2025.1 seqcli search command now uses streaming searches. Streaming turns event searches from a "pull" model into a "push": as soon as the back-end worker processes find results, they're pushed all the way down to the client using WebSockets, and immediately rendered to the terminal.

Not only is this more responsive, it's substantially faster than the pull-based paging model used by earlier versions of seqcli.

To opt out of streaming, for example to run searches against an older Seq server, or behind a proxy that doesn't support WebSockets, pass --no-websockets.

Environment variables for all configuration options

The configuration options exposed by the seqcli config command, such as connection.serverUrl, now all have environment variable equivalents. The environment variable version of a setting is just SEQCLI_ and then the setting name in uppercase, with dots replaced by underscores: SEQCLI_CONNECTION_SERVERURL in this case.

You can find all available settings by running seqcli config.

seqcli node health and seqcli cluster health

These two handy commands probe the target server's /health endpoint and /health/cluster endpoints, respectively.

  • seqcli node health reports the status of the machine that receives the /health request
  • seqcli cluster health reports the status of the cluster, failing if there are insufficient nodes with up-to-date data

The --wait-until-healthy option, supported by both, is designed to slot into automated deployment/update pipelines:

> seqcli node health -s http://seq.example.com --wait-until-healthy
200

update everywhere

The seqcli apikeyappinstancefeedretentionsignaluser, and workspace command groups now include update alongside the createlist, and remove commands you may already have encountered.

The commands accept JSON on STDIN, which works particularly nicely in shells that have object/JSON support:

PS > $warnings = (seqcli signal list -i signal-m33302 --json | ConvertFrom-Json)

PS > $warnings.Title
Warnings

PS > $warnings.Title = "Caution"

PS > (echo $warnings | ConvertTo-Json) | seqcli signal update --json-stdin

PS > seqcli signal list -i signal-m33302 --json
{"Title": "Caution", "Description": "Automatically created", "Filters": [{"Description": null, "DescriptionIsExcluded": false, "Filter": "@Level in ['w', 'wa', 'war', 'wrn', 'warn', 'warning'] ci", "FilterNonStrict": null}], "Columns": [], "IsProtected": false, "IsIndexSuppressed": true, "Grouping": "Explicit", "ExplicitGroupName": "@Level", "OwnerId": null, "Id": "signal-m33302"}

More new commands

A few more tasks can now be easily automated:

  • seqcli app uninstall
  • seqcli index (list|suppress) and seqcli expressionindex (create|list|remove)
  • seqcli setting (names|show|set|clear)

As with all seqcli commands, you can learn more about these ones with:

seqcli help <command name>

Suggestions and requests for more commands are welcome over in the project's GitHub repository.

Nicholas Blumhardt

Read more posts by this author.