Skip to content
RouteSpear
Documentation
Documentation menu

Dimensions

Every key a Metrics Explorer matcher or by (...) clause can name, identity, platform context, resolved entity facts, and your own labels.

A dimension is any key you can put inside {...} or by (...) in a query, or in a source query’s where clause. The Explorer groups them into four kinds. Available dimensions depend on the measurement’s source; each selected metric must support your filters and grouping.

Dimensions describe one metric record (the individual measurement a check produced). They include platform fields and the labels on tests and agents described in Core concepts: those configured labels are also stamped onto measurement records and can be queried by their bare keys.

Identity

Which test ran, on which agent, against what. These are the first keys to check; a dimension can be empty when it does not apply to that measurement.

Key What it is
metric_name The metric’s own name
test_id The test definition that produced the record
test_type Which kind of test ran
agent_id The agent the record is credited to
target What the test was pointed at
family IPv4 or IPv6

Platform

Context the system stamps on every record, or that the agent reports as a typed field. You never write these as labels yourself; they describe the measurement, not the thing measured.

Key What it is
metric_kind Gauge, counter, duration, ratio, bool, or distribution. Bool is how a check’s pass/fail is stored
unit The metric’s unit
mode Active probing or passive observation. A missing sample alone does not establish a failed probe or packet loss
transport The transport the probe actually used
clock_quality How well the producing agent’s clock was disciplined
agent_version The agent build that produced the record
namespace The network scope used to interpret internal devices and IPs, see Core concepts
cluster_id Set when the test was assigned to a cluster rather than one agent; empty otherwise
executing_agent_id Which cluster member actually ran the test, what makes a failover diagnosable after the fact
sharing_mode How the producing agent is shared between tenants
subject_kind What the record’s subject is: a device, an interface, an address
subject_address The subject’s address, as the agent reported it
subject_hostname The subject’s hostname, as the agent reported it
subject_if_name The subject interface’s name, as the agent reported it
rs.flow_id_control Whether the agent could pin the probe’s flow identifier, decides how much an ECMP path comparison can be trusted
rs.schema_version The wire schema version the producing agent stamped
rs.cardinality_bucket Present when this record’s own labels were discarded for exceeding its test’s cardinality budget

Entity

Facts resolved after the record was written, by correlating its subject against your device inventory, see Infrastructure. Querying one of these switches the query to read the resolved view rather than the raw table, which is why the Explorer groups them apart from platform dimensions: they exist only where a subject could be matched to something in inventory, and “unresolved” is itself a meaningful, filterable state.

Key What it is
device_id The device the subject resolved to
device_name The resolved device’s name
interface_id The interface the subject resolved to
provenance How the subject was identified in the first place
resolution How the entity stage resolved the subject, or why it refused to
namespace_tier Which rung of the resolution ladder answered, and so how much the correlation can be trusted
subject_resolved_by Whether the device was matched by address or by name

Your labels

Agent labels, test labels (including inherited test-group labels), and labels attached by a check or custom script are queryable by their bare keys. For example, an agent label site="east" and a test label service="checkout" can be used in either query form:

http_check_total_ms{site="east", service="checkout"} | p95 by (agent_id)
from tests
| where site = "east" and service = "checkout"
| summarize p95(http_check_total_ms) as latency by agent_id

You can also group by labels, for example by site, service, and order source results by a label retained in the grouping. No promotion is required.

Queries read label values stored on each measurement; changing a configured label does not relabel existing measurements. Agent and test labels share a record-label map, with the agent value winning when both define the same key. There is no automatic agent.labels.KEY or test.labels.KEY namespace. Use distinct keys when both values need to survive. Built-in dimensions take precedence over labels with the same key, and a source’s metric- or resource- specific label map can take precedence over record labels. This differs from agent.name, test.name, and agent.site, which resolve current metadata.

A script-defined label works the same way:

{shard="us-3"} | avg by (shard)

An unpromoted label like shard above is read from a map on matching rows. Discovery includes promoted keys, configured agent and test labels, and a bounded sample of observed label keys and values. It is not an exhaustive list of every key a script might have used; you can type an undiscovered key directly.

Promoting a label key in Settings → General gives it a dedicated, indexed column. Promoted keys appear in the browser under “Your labels” with their own recent-values list, and matchers against them run faster on a large time range. Promote a key once it is one you query often; an unpromoted label is still queryable even when it has not appeared in autocomplete.

Aliases

A handful of platform dimensions are also stamped as a raw label with an rs. prefix, rs.transport, rs.agent_version, rs.namespace, rs.cluster_id, rs.executing_agent_id, rs.sharing_mode. Both spellings resolve identically; the bare name is the canonical one and the one autocomplete offers, so someone who saw the rs. spelling in a raw row and typed it gets the right answer without the list looking duplicated.

This is a read-side convenience only. Writing a label under the rs. prefix yourself is not possible; that prefix is reserved so a script cannot claim to be a different cluster member than it is.

Browsing values

Expanding a dimension in the browser shows a sample of its recent distinct values, each a button that appends key="value" to your query. Dimensions marked non-facetable in the tables above (target, test_id, subject_address, and a few others) skip this: they are effectively unbounded, and a top-25 sample of thousands of targets is not a useful list to render or a query worth spending on. Type the value directly, or use the editor’s name-aware agent and test suggestions described below.

Source dimensions and current metadata

Discovery also includes dimensions from the host-resource, container, and Kubernetes sources. For example, process_name, process_instance, resource_kind, and monitored are available for host queries. Dimensions marked as suitable for value discovery return at most 25 suggestions, drawn from recent observations; high-cardinality dimensions remain available as keys even when their value list is empty.

agent.name, agent.site, test.name, and test.group_id offer bounded values from the tenant’s current metadata. Name-aware editor suggestions also carry agent and test ID/name pairs, independently of the top-25 observed-value lists. Choose a name in an ID filter to insert its ID, or in a name filter to insert its escaped name. Duplicate names display their IDs so you can choose exactly. Metadata discovery is limited to 10,000 entities per relationship; exceeding the limit returns an error rather than a silently incomplete identity list.

These values are current even for queries over historical samples. agent.id and test.id are accepted aliases for agent_id and test_id. test.name belongs to the test definition (one check); test.group_id identifies its containing test group. Group by IDs alongside names when names are not unique. A configured entity appearing in suggestions is not proof of recent measurements.

Use the source’s own field and dimension suggestions inside a from pipeline. An observed value list is a starting point, not an exhaustive list of valid values; exact names can always be typed directly. See the query reference for filtering, grouping, and joining examples.

Next

Screenshot