Search syntax
The complete query language used in the Logs search bar, the Traces search bar, the Metrics filters, and the alert-rule editor. Same syntax everywhere.
Orbtrace uses one search language across logs, traces, and metric filters. It was modelled on the Kibana / Datadog / Loki / HyperDX shape — intuitive, whole-word by default, with explicit booleans.
The basics
- Whole word
errormatches any record whose body / message contains the worderror. Case-insensitive by default. - Wildcards
error*matcheserrors,error-handler, etc.*timeoutmatchesread-timeout. The*matches zero or more characters within one word. - Quoted exact
"connection refused"matches the exact phrase, including spaces. - Negation
-errormatches records that do not contain the worderror. Alternative:NOT error. - Boolean
error AND payment— both.error OR warning— either.error AND NOT timeout— exclude. Operators are case-sensitive uppercase; precedence is the obvious left-to-right with parentheses for grouping. - Grouping
(error OR warning) AND service:checkout-api
Field queries
The shape is field:value. Field names come from your data — anything your apps set as an OTel attribute.
- String equality
service:checkout-api. Whole word, case-insensitive. - String wildcard
service:checkout*— anything starting with checkout. - Existence
user_id:*— record has a non-nulluser_id. - Numeric equality
http.status_code:500 - Numeric ranges
duration:>500,duration:>=500,duration:<1000,duration:>=500 AND duration:<1000. - Multiple values
level:(ERROR OR WARN)— value is one of the listed values. - Negation per field
-level:DEBUGorNOT level:DEBUGexcludes DEBUG records.
Time
You can put a time clause anywhere in the query, but most of the time you'll use the page-level time picker instead. Time clauses in the query body use natural language:
in "last 24 hours"
in "yesterday"
in "last week"
in "between 2026-05-12 14:00 and 2026-05-12 15:00"If the page's time picker is set and a query contains a time clause, the query wins for that one query.
Special fields per pillar
Some fields are special — Orbtrace recognises them across signals.
Logs
- levelSeverity.
level:ERROR,level:(ERROR OR FATAL),level:>=WARN(comparison on the ordered severity scale). - service
service.nameresource attribute.service:checkout-api. - trace_idThe trace this log line belongs to.
trace_id:7a8b9c… - bodyThe free-text message.
body:"out of memory"is the same as"out of memory"typed bare.
Traces
- serviceRoot span's service.
service:checkout-api. - service.inAny span in the trace belongs to the service.
service.in:inventory-servicefinds traces that touched inventory anywhere. - operationRoot operation name.
operation:"POST /checkout". - durationTrace duration in milliseconds.
duration:>1000. - statusTrace-level status.
status:errormatches traces with at least one ERROR span;status:okexcludes them. - span.XAny field on any span.
span.http.status_code:500matches a trace where some span returned 500.
Metrics filters
In the metric explorer's filter strip, the same syntax applies to attribute filters. You can also enter a freeform query into the filter box:
service.name=checkout-api AND http.route =~ "^/api/.*" AND env=prod=~ is regex equality.
Operators reference
| Operator | Example | Means |
|---|---|---|
= (implicit with :) | service:api | equals |
=~ | route =~ ^/api/.* | regex matches |
!= | level != DEBUG | not equal |
> >= < <= | duration:>500 | numeric comparison |
AND OR NOT - | error AND -timeout | boolean |
(...) | (a OR b) AND c | grouping |
"..." | "exact phrase" | quoted exact match |
* | service:checkout* | wildcard inside a word |
Worked examples
# All ERROR logs from checkout-api in the last 24 hours
level:ERROR AND service:checkout-api in "last 24 hours"
# Slow checkout traces with a 5xx anywhere
service:checkout-api AND duration:>1000 AND span.http.status_code:>=500
# Anything mentioning "OutOfMemoryError" excluding DEBUG noise
"OutOfMemoryError" AND -level:DEBUG
# Records with a trace_id (i.e., correlated to a trace)
trace_id:*
# Users 42 or 99 only, recently
user_id:(42 OR 99) in "last 1 hour"
# Latency under 100ms AND no errors AND not from the demo emitter
duration:<100 AND -status:error AND -service:demo-*Saving queries
Right of the search bar: Save query. Saved queries:
- Appear in the ⌘K command palette.
- Have a sharable URL.
- Can be wrapped into an alert rule via "Create alert from this query".
- Show up in the per-screen quick-access dropdown.
What the syntax does not support
- Free-text relational joins. "Find log lines whose
trace_idalso appears in a trace whereservice:db-X" — use the trace detail page's cross-pillar pivots instead. - Aggregations.
count by serviceis not a search; it's a metric query. Go to the Metrics explorer. - Free-floating wildcards.
*works inside a word; it does not work as a standalone "match anything". Useservice:*for "any service" —service:alone is invalid.
Next: Troubleshooting.