Metrics command group - #468

Merged
nblumhardt merged 12 commits into
datalust:devfrom
nblumhardt:metrics-commands-2
Jun 9, 2026
Merged

Metrics command group#468
nblumhardt merged 12 commits into
datalust:devfrom
nblumhardt:metrics-commands-2

Conversation

@nblumhardt

Copy link
Copy Markdown
Member

This uncovers a panic in the current Seq 2026.1 preview, so may not build/be mergeable until we've pushed up a fix for that.

Adds basic CLI commands for interacting with metrics, and matching MCP tools.

Usage: seqcli metrics <sub-command> [<args>]
Available sub-commands are:
dimension List distinct values for a metric dimension
dimensions List the dimensions associated with a given metric
search List available metric definitions
seqcli metrics search [<args>]
List available metric definitions
Example:
seqcli metrics search -f "@Resource.service.name = 'proxy'" -c 512
Arguments:
-f, --filter=VALUE A filter to apply to the search, including metric
name/description text in double quotes, for
example `"cpu" and Host = 'xmpweb-01.example.
com'`
-g, --group=VALUE Group key for metric definition breakdown; this
argument can be used multiple times
-c, --count=VALUE The maximum number of metric definitions to
retrieve; the default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`
seqcli metrics dimensions [<args>]
List the dimensions associated with a given metric
Example:
seqcli metrics dimensions -m http.response.status_code
Arguments:
-m, --metric=VALUE A metric name, for example `hats-sold` or `http.
request.duration`; omit to list dimensions for
all metrics
-c, --count=VALUE The maximum number of dimensions to retrieve; the
default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`
seqcli metrics dimension [<args>]
List distinct values for a metric dimension
Example:
seqcli metrics dimension --accessor @Resource.service.name
Arguments:
-d, --accessor=VALUE The dimension accessor, e.g. `cpu.mode`
-c, --count=VALUE The maximum number of dimensions to retrieve; the
default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--native Print output using Seq's native value syntax (
ideal for agent usage)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`

The MCP endpoints follow largely the same pattern. We'll need a new skill to cover metrics, which I'll kick off and add to the PR shortly. Some iteration/testing is going to be needed, it's not clear just yet how well agents will go using metrics this way.

The commands, command tests, and MCP tool are written by hand. I used Claude to port the command tests over to cover the MCP endpoints.

Comment threadsrc/SeqCli/Cli/Commands/Metrics/DimensionCommand.cs Outdated
public async Task<MetricDefinition[]> SearchMetricsAsync(
[Description("The maximum number of metric definitions to return.")]
[Range(1, 1000)]
int limit,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: These are kind of hard to read when condensed like this with lots of attributes. Some whitespace around the the parameters would help.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will hit this one on a future pass 👍

Comment threadsrc/SeqCli/Output/OutputFormat.cs Outdated
Comment threadtest/SeqCli.EndToEnd/Mcp/McpMetricsBasicsTestCase.cs Outdated
@nblumhardt

Copy link
Copy Markdown
MemberAuthor

The added metrics skill is minimal, and doesn't include query shapes for exponential histograms. I'll PR those when I have the information at hand.

@nblumhardt
nblumhardt merged commit f5c4611 into datalust:devJun 9, 2026
2 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@nblumhardt@KodrAus
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Metrics command group - #468

Merged
nblumhardt merged 12 commits into
datalust:devfrom
nblumhardt:metrics-commands-2
Jun 9, 2026
Merged

Metrics command group#468
nblumhardt merged 12 commits into
datalust:devfrom
nblumhardt:metrics-commands-2

Conversation

@nblumhardt

Copy link
Copy Markdown
Member

This uncovers a panic in the current Seq 2026.1 preview, so may not build/be mergeable until we've pushed up a fix for that.

Adds basic CLI commands for interacting with metrics, and matching MCP tools.

Usage: seqcli metrics <sub-command> [<args>]
Available sub-commands are:
dimension List distinct values for a metric dimension
dimensions List the dimensions associated with a given metric
search List available metric definitions
seqcli metrics search [<args>]
List available metric definitions
Example:
seqcli metrics search -f "@Resource.service.name = 'proxy'" -c 512
Arguments:
-f, --filter=VALUE A filter to apply to the search, including metric
name/description text in double quotes, for
example `"cpu" and Host = 'xmpweb-01.example.
com'`
-g, --group=VALUE Group key for metric definition breakdown; this
argument can be used multiple times
-c, --count=VALUE The maximum number of metric definitions to
retrieve; the default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`
seqcli metrics dimensions [<args>]
List the dimensions associated with a given metric
Example:
seqcli metrics dimensions -m http.response.status_code
Arguments:
-m, --metric=VALUE A metric name, for example `hats-sold` or `http.
request.duration`; omit to list dimensions for
all metrics
-c, --count=VALUE The maximum number of dimensions to retrieve; the
default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`
seqcli metrics dimension [<args>]
List distinct values for a metric dimension
Example:
seqcli metrics dimension --accessor @Resource.service.name
Arguments:
-d, --accessor=VALUE The dimension accessor, e.g. `cpu.mode`
-c, --count=VALUE The maximum number of dimensions to retrieve; the
default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--native Print output using Seq's native value syntax (
ideal for agent usage)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`

The MCP endpoints follow largely the same pattern. We'll need a new skill to cover metrics, which I'll kick off and add to the PR shortly. Some iteration/testing is going to be needed, it's not clear just yet how well agents will go using metrics this way.

The commands, command tests, and MCP tool are written by hand. I used Claude to port the command tests over to cover the MCP endpoints.

Comment threadsrc/SeqCli/Cli/Commands/Metrics/DimensionCommand.cs Outdated
public async Task<MetricDefinition[]> SearchMetricsAsync(
[Description("The maximum number of metric definitions to return.")]
[Range(1, 1000)]
int limit,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: These are kind of hard to read when condensed like this with lots of attributes. Some whitespace around the the parameters would help.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will hit this one on a future pass 👍

Comment threadsrc/SeqCli/Output/OutputFormat.cs Outdated
Comment threadtest/SeqCli.EndToEnd/Mcp/McpMetricsBasicsTestCase.cs Outdated
@nblumhardt

Copy link
Copy Markdown
MemberAuthor

The added metrics skill is minimal, and doesn't include query shapes for exponential histograms. I'll PR those when I have the information at hand.

@nblumhardt
nblumhardt merged commit f5c4611 into datalust:devJun 9, 2026
2 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@nblumhardt@KodrAus
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Metrics command group - #468

Merged
nblumhardt merged 12 commits into
datalust:devfrom
nblumhardt:metrics-commands-2
Jun 9, 2026
Merged

Metrics command group#468
nblumhardt merged 12 commits into
datalust:devfrom
nblumhardt:metrics-commands-2

Conversation

@nblumhardt

Copy link
Copy Markdown
Member

This uncovers a panic in the current Seq 2026.1 preview, so may not build/be mergeable until we've pushed up a fix for that.

Adds basic CLI commands for interacting with metrics, and matching MCP tools.

Usage: seqcli metrics <sub-command> [<args>]
Available sub-commands are:
dimension List distinct values for a metric dimension
dimensions List the dimensions associated with a given metric
search List available metric definitions
seqcli metrics search [<args>]
List available metric definitions
Example:
seqcli metrics search -f "@Resource.service.name = 'proxy'" -c 512
Arguments:
-f, --filter=VALUE A filter to apply to the search, including metric
name/description text in double quotes, for
example `"cpu" and Host = 'xmpweb-01.example.
com'`
-g, --group=VALUE Group key for metric definition breakdown; this
argument can be used multiple times
-c, --count=VALUE The maximum number of metric definitions to
retrieve; the default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`
seqcli metrics dimensions [<args>]
List the dimensions associated with a given metric
Example:
seqcli metrics dimensions -m http.response.status_code
Arguments:
-m, --metric=VALUE A metric name, for example `hats-sold` or `http.
request.duration`; omit to list dimensions for
all metrics
-c, --count=VALUE The maximum number of dimensions to retrieve; the
default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`
seqcli metrics dimension [<args>]
List distinct values for a metric dimension
Example:
seqcli metrics dimension --accessor @Resource.service.name
Arguments:
-d, --accessor=VALUE The dimension accessor, e.g. `cpu.mode`
-c, --count=VALUE The maximum number of dimensions to retrieve; the
default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--native Print output using Seq's native value syntax (
ideal for agent usage)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`

The MCP endpoints follow largely the same pattern. We'll need a new skill to cover metrics, which I'll kick off and add to the PR shortly. Some iteration/testing is going to be needed, it's not clear just yet how well agents will go using metrics this way.

The commands, command tests, and MCP tool are written by hand. I used Claude to port the command tests over to cover the MCP endpoints.

Comment threadsrc/SeqCli/Cli/Commands/Metrics/DimensionCommand.cs Outdated
public async Task<MetricDefinition[]> SearchMetricsAsync(
[Description("The maximum number of metric definitions to return.")]
[Range(1, 1000)]
int limit,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: These are kind of hard to read when condensed like this with lots of attributes. Some whitespace around the the parameters would help.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will hit this one on a future pass 👍

Comment threadsrc/SeqCli/Output/OutputFormat.cs Outdated
Comment threadtest/SeqCli.EndToEnd/Mcp/McpMetricsBasicsTestCase.cs Outdated
@nblumhardt

Copy link
Copy Markdown
MemberAuthor

The added metrics skill is minimal, and doesn't include query shapes for exponential histograms. I'll PR those when I have the information at hand.

@nblumhardt
nblumhardt merged commit f5c4611 into datalust:devJun 9, 2026
2 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@nblumhardt@KodrAus
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Metrics command group - #468

Merged
nblumhardt merged 12 commits into
datalust:devfrom
nblumhardt:metrics-commands-2
Jun 9, 2026
Merged

Metrics command group#468
nblumhardt merged 12 commits into
datalust:devfrom
nblumhardt:metrics-commands-2

Conversation

@nblumhardt

Copy link
Copy Markdown
Member

This uncovers a panic in the current Seq 2026.1 preview, so may not build/be mergeable until we've pushed up a fix for that.

Adds basic CLI commands for interacting with metrics, and matching MCP tools.

Usage: seqcli metrics <sub-command> [<args>]
Available sub-commands are:
dimension List distinct values for a metric dimension
dimensions List the dimensions associated with a given metric
search List available metric definitions
seqcli metrics search [<args>]
List available metric definitions
Example:
seqcli metrics search -f "@Resource.service.name = 'proxy'" -c 512
Arguments:
-f, --filter=VALUE A filter to apply to the search, including metric
name/description text in double quotes, for
example `"cpu" and Host = 'xmpweb-01.example.
com'`
-g, --group=VALUE Group key for metric definition breakdown; this
argument can be used multiple times
-c, --count=VALUE The maximum number of metric definitions to
retrieve; the default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`
seqcli metrics dimensions [<args>]
List the dimensions associated with a given metric
Example:
seqcli metrics dimensions -m http.response.status_code
Arguments:
-m, --metric=VALUE A metric name, for example `hats-sold` or `http.
request.duration`; omit to list dimensions for
all metrics
-c, --count=VALUE The maximum number of dimensions to retrieve; the
default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`
seqcli metrics dimension [<args>]
List distinct values for a metric dimension
Example:
seqcli metrics dimension --accessor @Resource.service.name
Arguments:
-d, --accessor=VALUE The dimension accessor, e.g. `cpu.mode`
-c, --count=VALUE The maximum number of dimensions to retrieve; the
default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--native Print output using Seq's native value syntax (
ideal for agent usage)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`

The MCP endpoints follow largely the same pattern. We'll need a new skill to cover metrics, which I'll kick off and add to the PR shortly. Some iteration/testing is going to be needed, it's not clear just yet how well agents will go using metrics this way.

The commands, command tests, and MCP tool are written by hand. I used Claude to port the command tests over to cover the MCP endpoints.

Comment threadsrc/SeqCli/Cli/Commands/Metrics/DimensionCommand.cs Outdated
public async Task<MetricDefinition[]> SearchMetricsAsync(
[Description("The maximum number of metric definitions to return.")]
[Range(1, 1000)]
int limit,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: These are kind of hard to read when condensed like this with lots of attributes. Some whitespace around the the parameters would help.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will hit this one on a future pass 👍

Comment threadsrc/SeqCli/Output/OutputFormat.cs Outdated
Comment threadtest/SeqCli.EndToEnd/Mcp/McpMetricsBasicsTestCase.cs Outdated
@nblumhardt

Copy link
Copy Markdown
MemberAuthor

The added metrics skill is minimal, and doesn't include query shapes for exponential histograms. I'll PR those when I have the information at hand.

@nblumhardt
nblumhardt merged commit f5c4611 into datalust:devJun 9, 2026
2 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@nblumhardt@KodrAus
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Metrics command group - #468

Merged
nblumhardt merged 12 commits into
datalust:devfrom
nblumhardt:metrics-commands-2
Jun 9, 2026
Merged

Metrics command group#468
nblumhardt merged 12 commits into
datalust:devfrom
nblumhardt:metrics-commands-2

Conversation

@nblumhardt

Copy link
Copy Markdown
Member

This uncovers a panic in the current Seq 2026.1 preview, so may not build/be mergeable until we've pushed up a fix for that.

Adds basic CLI commands for interacting with metrics, and matching MCP tools.

Usage: seqcli metrics <sub-command> [<args>]
Available sub-commands are:
dimension List distinct values for a metric dimension
dimensions List the dimensions associated with a given metric
search List available metric definitions
seqcli metrics search [<args>]
List available metric definitions
Example:
seqcli metrics search -f "@Resource.service.name = 'proxy'" -c 512
Arguments:
-f, --filter=VALUE A filter to apply to the search, including metric
name/description text in double quotes, for
example `"cpu" and Host = 'xmpweb-01.example.
com'`
-g, --group=VALUE Group key for metric definition breakdown; this
argument can be used multiple times
-c, --count=VALUE The maximum number of metric definitions to
retrieve; the default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`
seqcli metrics dimensions [<args>]
List the dimensions associated with a given metric
Example:
seqcli metrics dimensions -m http.response.status_code
Arguments:
-m, --metric=VALUE A metric name, for example `hats-sold` or `http.
request.duration`; omit to list dimensions for
all metrics
-c, --count=VALUE The maximum number of dimensions to retrieve; the
default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`
seqcli metrics dimension [<args>]
List distinct values for a metric dimension
Example:
seqcli metrics dimension --accessor @Resource.service.name
Arguments:
-d, --accessor=VALUE The dimension accessor, e.g. `cpu.mode`
-c, --count=VALUE The maximum number of dimensions to retrieve; the
default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--native Print output using Seq's native value syntax (
ideal for agent usage)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`

The MCP endpoints follow largely the same pattern. We'll need a new skill to cover metrics, which I'll kick off and add to the PR shortly. Some iteration/testing is going to be needed, it's not clear just yet how well agents will go using metrics this way.

The commands, command tests, and MCP tool are written by hand. I used Claude to port the command tests over to cover the MCP endpoints.

Comment threadsrc/SeqCli/Cli/Commands/Metrics/DimensionCommand.cs Outdated
public async Task<MetricDefinition[]> SearchMetricsAsync(
[Description("The maximum number of metric definitions to return.")]
[Range(1, 1000)]
int limit,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: These are kind of hard to read when condensed like this with lots of attributes. Some whitespace around the the parameters would help.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will hit this one on a future pass 👍

Comment threadsrc/SeqCli/Output/OutputFormat.cs Outdated
Comment threadtest/SeqCli.EndToEnd/Mcp/McpMetricsBasicsTestCase.cs Outdated
@nblumhardt

Copy link
Copy Markdown
MemberAuthor

The added metrics skill is minimal, and doesn't include query shapes for exponential histograms. I'll PR those when I have the information at hand.

@nblumhardt
nblumhardt merged commit f5c4611 into datalust:devJun 9, 2026
2 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@nblumhardt@KodrAus
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Metrics command group - #468

Merged
nblumhardt merged 12 commits into
datalust:devfrom
nblumhardt:metrics-commands-2
Jun 9, 2026
Merged

Metrics command group#468
nblumhardt merged 12 commits into
datalust:devfrom
nblumhardt:metrics-commands-2

Conversation

@nblumhardt

Copy link
Copy Markdown
Member

This uncovers a panic in the current Seq 2026.1 preview, so may not build/be mergeable until we've pushed up a fix for that.

Adds basic CLI commands for interacting with metrics, and matching MCP tools.

Usage: seqcli metrics <sub-command> [<args>]
Available sub-commands are:
dimension List distinct values for a metric dimension
dimensions List the dimensions associated with a given metric
search List available metric definitions
seqcli metrics search [<args>]
List available metric definitions
Example:
seqcli metrics search -f "@Resource.service.name = 'proxy'" -c 512
Arguments:
-f, --filter=VALUE A filter to apply to the search, including metric
name/description text in double quotes, for
example `"cpu" and Host = 'xmpweb-01.example.
com'`
-g, --group=VALUE Group key for metric definition breakdown; this
argument can be used multiple times
-c, --count=VALUE The maximum number of metric definitions to
retrieve; the default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`
seqcli metrics dimensions [<args>]
List the dimensions associated with a given metric
Example:
seqcli metrics dimensions -m http.response.status_code
Arguments:
-m, --metric=VALUE A metric name, for example `hats-sold` or `http.
request.duration`; omit to list dimensions for
all metrics
-c, --count=VALUE The maximum number of dimensions to retrieve; the
default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`
seqcli metrics dimension [<args>]
List distinct values for a metric dimension
Example:
seqcli metrics dimension --accessor @Resource.service.name
Arguments:
-d, --accessor=VALUE The dimension accessor, e.g. `cpu.mode`
-c, --count=VALUE The maximum number of dimensions to retrieve; the
default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--native Print output using Seq's native value syntax (
ideal for agent usage)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`

The MCP endpoints follow largely the same pattern. We'll need a new skill to cover metrics, which I'll kick off and add to the PR shortly. Some iteration/testing is going to be needed, it's not clear just yet how well agents will go using metrics this way.

The commands, command tests, and MCP tool are written by hand. I used Claude to port the command tests over to cover the MCP endpoints.

Comment threadsrc/SeqCli/Cli/Commands/Metrics/DimensionCommand.cs Outdated
public async Task<MetricDefinition[]> SearchMetricsAsync(
[Description("The maximum number of metric definitions to return.")]
[Range(1, 1000)]
int limit,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: These are kind of hard to read when condensed like this with lots of attributes. Some whitespace around the the parameters would help.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will hit this one on a future pass 👍

Comment threadsrc/SeqCli/Output/OutputFormat.cs Outdated
Comment threadtest/SeqCli.EndToEnd/Mcp/McpMetricsBasicsTestCase.cs Outdated
@nblumhardt

Copy link
Copy Markdown
MemberAuthor

The added metrics skill is minimal, and doesn't include query shapes for exponential histograms. I'll PR those when I have the information at hand.

@nblumhardt
nblumhardt merged commit f5c4611 into datalust:devJun 9, 2026
2 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@nblumhardt@KodrAus
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Metrics command group - #468

Merged
nblumhardt merged 12 commits into
datalust:devfrom
nblumhardt:metrics-commands-2
Jun 9, 2026
Merged

Metrics command group#468
nblumhardt merged 12 commits into
datalust:devfrom
nblumhardt:metrics-commands-2

Conversation

@nblumhardt

Copy link
Copy Markdown
Member

This uncovers a panic in the current Seq 2026.1 preview, so may not build/be mergeable until we've pushed up a fix for that.

Adds basic CLI commands for interacting with metrics, and matching MCP tools.

Usage: seqcli metrics <sub-command> [<args>]
Available sub-commands are:
dimension List distinct values for a metric dimension
dimensions List the dimensions associated with a given metric
search List available metric definitions
seqcli metrics search [<args>]
List available metric definitions
Example:
seqcli metrics search -f "@Resource.service.name = 'proxy'" -c 512
Arguments:
-f, --filter=VALUE A filter to apply to the search, including metric
name/description text in double quotes, for
example `"cpu" and Host = 'xmpweb-01.example.
com'`
-g, --group=VALUE Group key for metric definition breakdown; this
argument can be used multiple times
-c, --count=VALUE The maximum number of metric definitions to
retrieve; the default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`
seqcli metrics dimensions [<args>]
List the dimensions associated with a given metric
Example:
seqcli metrics dimensions -m http.response.status_code
Arguments:
-m, --metric=VALUE A metric name, for example `hats-sold` or `http.
request.duration`; omit to list dimensions for
all metrics
-c, --count=VALUE The maximum number of dimensions to retrieve; the
default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`
seqcli metrics dimension [<args>]
List distinct values for a metric dimension
Example:
seqcli metrics dimension --accessor @Resource.service.name
Arguments:
-d, --accessor=VALUE The dimension accessor, e.g. `cpu.mode`
-c, --count=VALUE The maximum number of dimensions to retrieve; the
default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--native Print output using Seq's native value syntax (
ideal for agent usage)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`

The MCP endpoints follow largely the same pattern. We'll need a new skill to cover metrics, which I'll kick off and add to the PR shortly. Some iteration/testing is going to be needed, it's not clear just yet how well agents will go using metrics this way.

The commands, command tests, and MCP tool are written by hand. I used Claude to port the command tests over to cover the MCP endpoints.

Comment threadsrc/SeqCli/Cli/Commands/Metrics/DimensionCommand.cs Outdated
public async Task<MetricDefinition[]> SearchMetricsAsync(
[Description("The maximum number of metric definitions to return.")]
[Range(1, 1000)]
int limit,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: These are kind of hard to read when condensed like this with lots of attributes. Some whitespace around the the parameters would help.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will hit this one on a future pass 👍

Comment threadsrc/SeqCli/Output/OutputFormat.cs Outdated
Comment threadtest/SeqCli.EndToEnd/Mcp/McpMetricsBasicsTestCase.cs Outdated
@nblumhardt

Copy link
Copy Markdown
MemberAuthor

The added metrics skill is minimal, and doesn't include query shapes for exponential histograms. I'll PR those when I have the information at hand.

@nblumhardt
nblumhardt merged commit f5c4611 into datalust:devJun 9, 2026
2 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@nblumhardt@KodrAus
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Metrics command group - #468

Merged
nblumhardt merged 12 commits into
datalust:devfrom
nblumhardt:metrics-commands-2
Jun 9, 2026
Merged

Metrics command group#468
nblumhardt merged 12 commits into
datalust:devfrom
nblumhardt:metrics-commands-2

Conversation

@nblumhardt

Copy link
Copy Markdown
Member

This uncovers a panic in the current Seq 2026.1 preview, so may not build/be mergeable until we've pushed up a fix for that.

Adds basic CLI commands for interacting with metrics, and matching MCP tools.

Usage: seqcli metrics <sub-command> [<args>]
Available sub-commands are:
dimension List distinct values for a metric dimension
dimensions List the dimensions associated with a given metric
search List available metric definitions
seqcli metrics search [<args>]
List available metric definitions
Example:
seqcli metrics search -f "@Resource.service.name = 'proxy'" -c 512
Arguments:
-f, --filter=VALUE A filter to apply to the search, including metric
name/description text in double quotes, for
example `"cpu" and Host = 'xmpweb-01.example.
com'`
-g, --group=VALUE Group key for metric definition breakdown; this
argument can be used multiple times
-c, --count=VALUE The maximum number of metric definitions to
retrieve; the default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`
seqcli metrics dimensions [<args>]
List the dimensions associated with a given metric
Example:
seqcli metrics dimensions -m http.response.status_code
Arguments:
-m, --metric=VALUE A metric name, for example `hats-sold` or `http.
request.duration`; omit to list dimensions for
all metrics
-c, --count=VALUE The maximum number of dimensions to retrieve; the
default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`
seqcli metrics dimension [<args>]
List distinct values for a metric dimension
Example:
seqcli metrics dimension --accessor @Resource.service.name
Arguments:
-d, --accessor=VALUE The dimension accessor, e.g. `cpu.mode`
-c, --count=VALUE The maximum number of dimensions to retrieve; the
default is 30
--start=VALUE ISO 8601 date/time to query from
--end=VALUE ISO 8601 date/time to query to
--json Print output in newline-delimited JSON (the
default is plain text)
--native Print output using Seq's native value syntax (
ideal for agent usage)
--no-color Don't colorize text output
--force-color Force redirected output to have ANSI color (
unless `--no-color` is also specified)
--storage=VALUE The folder where `SeqCli.json` and other data
will be stored; falls back to `SEQCLI_STORAGE_
PATH` from the environment, then the `seqcli
forwarder` service's configured storage path (
Windows only), then `/home/nblumhardt`
--trace Enable detailed (server-side) query tracing
-s, --server=VALUE The URL of the Seq server; by default the `
connection.serverUrl` config value will be used
-a, --apikey=VALUE The API key to use when connecting to the server;
by default the `connection.apiKey` config
value will be used
--profile=VALUE A connection profile to use; by default the `
connection.serverUrl` and `connection.apiKey`
config values will be used
--verbose Print verbose output to `STDERR`

The MCP endpoints follow largely the same pattern. We'll need a new skill to cover metrics, which I'll kick off and add to the PR shortly. Some iteration/testing is going to be needed, it's not clear just yet how well agents will go using metrics this way.

The commands, command tests, and MCP tool are written by hand. I used Claude to port the command tests over to cover the MCP endpoints.

Comment threadsrc/SeqCli/Cli/Commands/Metrics/DimensionCommand.cs Outdated
public async Task<MetricDefinition[]> SearchMetricsAsync(
[Description("The maximum number of metric definitions to return.")]
[Range(1, 1000)]
int limit,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: These are kind of hard to read when condensed like this with lots of attributes. Some whitespace around the the parameters would help.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will hit this one on a future pass 👍

Comment threadsrc/SeqCli/Output/OutputFormat.cs Outdated
Comment threadtest/SeqCli.EndToEnd/Mcp/McpMetricsBasicsTestCase.cs Outdated
@nblumhardt

Copy link
Copy Markdown
MemberAuthor

The added metrics skill is minimal, and doesn't include query shapes for exponential histograms. I'll PR those when I have the information at hand.

@nblumhardt
nblumhardt merged commit f5c4611 into datalust:devJun 9, 2026
2 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@nblumhardt@KodrAus