log search for small engineering teams
Every log line, one search away.
Cinder gathers the logs from all your services in one place. Search them with a query you can read, tail them live, and get an alert only when something needs a person.
- search
- tail
- alert
- share a link
search
Ask your logs a plain question.
Type a field and a value. Add a pipe to count or group. Anyone on the team can read a query someone else wrote, and share it as a link.
Narrow it down
Filter to one service and the levels you care about.
service:billing level:error
ERR invoice i_204 not found
ERR tax lookup timed out
Count and group
Pipe the results into a count to see where failures pile up.
status:5xx | count by path
Follow one request
Search by a request id and read its path through every service.
request:r_4f2a9c
- gateway → received
- orders → created o_5531
- payments → declined
alerts
Keep it quiet until it matters.
An alert is a saved search with a rule on top. Decide what is worth a ping, who hears about it, and when to leave people alone.
Write the rule in words
Pick a search, a threshold and a window. Preview how often it would have fired before you turn it on.
preview: would have fired once this week
One alert, not forty
Repeats of the same error fold into one alert with a running count.
connection reset by peer
first 14:02 · latest 14:09
Quiet hours
Hold the minor alerts overnight. Critical ones still get through.
The right person hears it
Send each alert to the team that owns the service: a channel, an email, or the on-call phone. Mute a rule for the length of a deploy.
- checkouton-call phone
- billing#billing channel
- workeremail the platform team
- search muted during deployunmute
send logs
Ship logs from the code you already have.
Add a library, or point your existing logger at an endpoint. Structured fields become searchable fields on their own.
- Plain text or JSON lines
- Tag each line with a service and an environment
- Ask us about a language that isn't listed
import { Logger } from "cinder";
const log = new Logger({
token: process.env.LOG_TOKEN,
service: "checkout",
});
// Fields become searchable: order:o_5531
log.error("payment failed", { order: "o_5531" });
import os
from cinder import Logger
log = Logger(
token=os.environ["LOG_TOKEN"],
service="checkout",
)
# Fields become searchable: order:o_5531
log.error("payment failed", order="o_5531")
log := cinder.New(cinder.Config{
Token: os.Getenv("LOG_TOKEN"),
Service: "checkout",
})
// Fields become searchable: order:o_5531
log.Error("payment failed", "order", "o_5531")
# Any language that can make an HTTPS request
curl -X POST https://logs.example.com/v1/ingest \
-H "Authorization: Bearer $LOG_TOKEN" \
-H "Content-Type: application/json" \
-d '{"service": "checkout", "level": "error",
"message": "payment failed", "order": "o_5531"}'
npm install cinder
plans
Pick a size. Change it later.
Every plan has the same search and the same alerts. Tell us roughly how much you log and we'll point you at one.
Side project
For one app and the person who wrote it.
Add your price
- Search and live tail
- Email alerts
- Every SDK
Team
For a small team running a product in production.
Add your price
- Everything in Side project
- Alert routing, grouping and quiet hours
- Saved searches the whole team can share
- Team members and roles
Company
For several teams and their own requirements.
Add your price
- Everything in Team
- Separate spaces for each team
- A setup call with an engineer
Do we have to change how we log?
Usually not. Keep your logger and add a library, or send lines over HTTPS. Structured fields are easier to search, so we can talk through adding them where it helps.
How does the query syntax work?
A search is field and value pairs, like service:checkout level:error. A pipe passes the results on to count or group them. The examples on this page are a good place to start.
How long are logs kept?
It depends on the plan and what you need. Ask us about the window that suits your team and we'll tell you what's possible.
Where can alerts go?
To email, a team chat channel, or an on-call phone. Tell us what your team uses and we'll go over how to connect it.
Can we try it before we commit?
Ask for a demo and we'll walk through it with your own kind of logs, or ask for access and send a few services to see how it fits.
tail -f production
Start with one service and search its logs.
Tell us what you run and we'll set your team up, or show you around first.