See what each request did, inside the app.
An opt-in diagnostics dashboard at /_lookout, built from the spans the framework already emits. Each request, job, command and scheduled task becomes a batch of what it did.
What you get
- Queries, cache, outbound HTTP, jobs, mail, events, logs and failures, side by side per batch.
- Slow thresholds (queries 100 ms, requests 1 s) and N+1 detection.
- Scope by route, guard or user; sample per kind of work and per watcher.
- Memory, database or cache-ring-buffer storage.
- Hidden by default: a 404 outside
APP_ENV=localunless the viewer passesviewLookout. - Nothing on the request path waits for it.
In the docs
src/bootstrap.rs
use rainier_framework::lookout::config::{Patterns, Scope, WatcherConfig};
use rainier_framework::lookout::EntryType;
Rainier::new(".")
.with_lookout(|lookout| {
lookout
.scope(Scope {
routes: Patterns { include: vec![], exclude: vec!["health".into()] },
jobs: true,
commands: true,
scheduled_tasks: true,
..Scope::default()
})
.watch(EntryType::Cache, |w| WatcherConfig { sample_rate: 0.1, ..w })
.keep_batch_if(|batch| batch.has_exception || batch.duration_us > 250_000)
})
Up close
Select an image to see it full size.