Find the logs that explain the problem.

Search and filter structured logs, follow live activity as it arrives, and open the lines around any one line — from the same request, host or pod. Every line links to the trace it belongs to.

Opens onThe lines around the error
IngestOTLP, JSON, syslog
Live tailStreamed, filtered
Logs · checkout-apiLive · 1 336/s
service:checkout-apienv:prodlevel:(warn OR error)Live · 15m
14:02:11.482WARNprod-worker-04retry 1/3 for order ord_8f2c
14:02:11.930INFOprod-web-11GET /health 200 · 3ms
14:02:12.204ERRORprod-web-07TimeoutError: pool exhausted after 2000ms
14:02:12.511INFOprod-web-07alert route prod-critical matched · ag_7f21c4
14:02:12.780WARNprod-worker-04retry 2/3 for order ord_8f2c
14:02:13.040INFOprod-web-03GET /checkout 200 · 1988ms
14:02:13.311ERRORprod-web-11TimeoutError: pool exhausted after 2000ms
14:02:13.602INFOprod-web-07paging L1 · payments-primary
14:02:13.874INFOprod-web-11GET /cart 200 · 91ms
14:02:14.120ERRORprod-web-07TimeoutError: pool exhausted after 2000ms
14:02:14.377INFOprod-web-03rollback v2.13.9 requested · deploy_9a1
Level15m
ERROR336
WARN1 220
INFO48 282
Host
prod-web-07312
prod-web-0314
prod-web-1110
Patternnew

TimeoutError: pool exhausted after <ms>

336 matches · first at 14:02:10

Go from an error to the lines that explain it

Logs carry the request, service, host and deploy they came from, so each one is a link to somewhere else. Here is one investigation, from the error to the confirmed fix.

INC-402 · Checkout latency above SLO
Resolved
14:02:11 → 14:19:44 · 17m 33s
14:02:11
Error opens with its own lines attached
The lines from that request, already filtered to it, with what came before and after.
Logs
14:04:20
Pattern shows this started at the deploy
The “pool: wait exceeded” pattern first appears at 13:58, minutes after the deploy.
Patterns
14:16:02
Live tail confirms the fix
The same filter, streamed live while the mitigation rolls out.
Live tail

Search, shape and keep your logs

Structured logs that keep their fields, with the tools to narrow them, process them on ingest and control what each index costs.

Context view

Open the lines before and after any line, from the same request, host or pod.

context
Structured attributes

JSON fields stay fields: filter on them, group by them, and turn one into a metric.

attributes
Patterns

Collapse near-identical lines into one pattern with a count, so a new pattern stands out.

patterns
Live tail

Stream the current filter as lines arrive, and freeze it to read what went past.

tail
Saved views

Save a filter, share it with your team, and link to it from a runbook.

views
Pipelines

Parse, rename, redact and drop lines on ingest, with a preview of what each rule matches and changes.

pipelines
Indexes and retention

Set retention per index, so debug output and audit trails can be kept for different lengths of time.

indexes

Follow a line to what it belongs to.

Every line carries the trace, service, host and deploy it came from. Each of those is a link, so a log line is a starting point rather than a dead end.

  • To the trace. From a line to the request it came from, and the span that was slow in it.
  • To the host. From a line to what that machine was doing at the same moment.
  • To the deploy. From a line’s first appearance to the release that introduced it.
  • Into an alert. Turn the filter you built into a log monitor from the same view.
Pattern · “pool: wait exceeded {n}ms”last 7 days
Today 13:58 →after deploy 2f91c4 118
Yesterdayno occurrences0
2 days agono occurrences0
3–7 days agono occurrences0

Start sending your logs.

Ship over OTLP, JSON or syslog, set retention per index, and search structured fields from the first line. Start on the free plan with no card.