Every log collected. Every failure understood.
Logmast gathers logs from all your services, turns the noise into grouped failures you can actually read, and tells you when a service stops being healthy. No observability platform to run.
- p95 from send to a committed receipt
- 18 ms
- p95 from send to a committed receipt
- p95 until a new event is searchable
- 80 ms
- p95 until a new event is searchable
- events queried on a 2 CPU, 2 GiB instance
- 12M
- events queried on a 2 CPU, 2 GiB instance
- events lost across 13,200 sent under load
- 0
- events lost across 13,200 sent under load
From raw lines to a clear answer
Three jobs, done in one place, in the order your data actually moves.
1. Collect
Send logs the way you already write them
Drop in the Rust layer or post JSON batches over HTTPS. Every batch is committed to disk before we say yes, and retries never double count.
2. Process
Turn thousands of lines into a few real problems
Events are redacted, grouped by error code, cause or stack, and indexed for search. Each group explains exactly why its events belong together.
3. Monitor
Know when a service is unwell
HTTP checks and job heartbeats sit beside your failures, and alerts arrive once, with context, instead of flooding your inbox.
See your whole system, not one app at a time
Browse by workspace, project and service. The portfolio view puts what needs attention first, with an hourly histogram so a spike is obvious before you open a single log.
Filters live in the URL, so the view you are looking at is the link you paste into the incident channel.
Grouping you can check
Most tools group errors behind a black box. Logmast shows its reasoning: fingerprint, rule, error code and cause, stack, then message, and which one decided.
Add namespaced codes like BILLING.INVOICE.PERSIST_FAILED as you go. Uncoded failures still group well from day one.
Quiet the noise without losing it
Mute a known issue with a reason and an expiry date. Before you confirm, Logmast replays the mute against recent history and shows exactly what would go quiet.
Muted events are still collected and searchable. Acknowledging a problem and silencing it are kept as separate decisions.
Alerts with a budget
Get an email on the first occurrence of something new, or when a group crosses ten events in five minutes. Cooldowns stop repeats, and a workspace budget caps email per hour.
When the budget runs out, the last message is a summary of everything held back, so a bad hour stays one readable email.
Health checks that sit next to the evidence
Point Logmast at an endpoint or give a cron job a heartbeat URL. When a check fails, the alert links straight to the failures that service logged in the same minutes.
Ten minutes to your first alert
Instrument one service, send an event, and receive a test alert before your coffee cools.
- 1
Create a service token
Ingest-only, scoped to one service, revocable any time.
- 2
Add the layer or call the API
Rust gets a tracing layer with a bounded background queue. Everything else speaks HTTPS and JSON.
- 3
Send a test failure
It appears, grouped and searchable, within a second, and your alert rule fires.
let config = logmast_reporting::Config::from_env()?.expect("LOGMAST_* set");
let (layer, _guard) = logmast_reporting::start(config)?;
tracing_subscriber::registry()
.with(tracing_subscriber::fmt::layer())
.with(layer) // batches, redacts and ships in the background
.init();
// Anything you already log at warn or above is collected.
tracing::error!(code = "BILLING.INVOICE.PERSIST_FAILED", invoice_id, "could not persist invoice");
// Or report a typed error with its cause chain and a correlation id.
logmast_reporting::report_error(&err, Some("BILLING.INVOICE.PERSIST_FAILED"), None, "invoice.persist", Some(&request_id));curl https://app.logmast.com/api/v1/ingest/batches \
-H "Authorization: Bearer $LOGMAST_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"batch_id": "019ee1a0-0000-7000-8000-000000000001",
"service_id": "019ee1a0-0000-7000-8000-000000000002",
"events": [{
"occurrence_id": "019ee1a0-0000-7000-8000-000000000003",
"timestamp": "2026-09-15T14:02:07Z",
"environment": "production",
"severity": "error",
"message": "could not persist invoice",
"code": "BILLING.INVOICE.PERSIST_FAILED",
"correlation_ids": ["req-7b1e"]
}]
}'200 OK in 18 ms, committed to disk
{ "receipt_id": "0192f3…", "new_events": 1, "duplicates": 0 }
Built to be trusted with production data
Logs carry customer details, secrets that slipped through, and the shape of your business. We treat them that way.
How we protect your data- Isolated by workspace
- Every read and write runs inside a transaction scoped to one workspace, enforced by PostgreSQL row-level security, not by application code alone.
- Redacted before storage
- Sensitive fields are stripped on arrival. What is never written can never leak from a backup.
- Narrow credentials
- Services get ingest-only tokens. People sign in with a password and TOTP. Tokens rotate and revoke without redeploys.
- Safe to retry
- Duplicate deliveries are recognised for 14 days, so a producer can resend after a timeout without double counting.
A bill you can predict
Plans include an event allowance and a clear retention period. No charge per seat or per service. A spend cap is on by default, and we tell you well before you reach it.
Compare plansStarter
$19/mo
500k / month events
14 days retention
Team
$79/mo
5M / month events
30 days retention
Scale
$299/mo
25M+ / month events
90 days retention
Send your first logs this week
We are onboarding a small number of teams by hand. Tell us what you run and we will help you instrument the first service.