Alerts
Alert rules decide who hears about what. Without a rule, issues are still recorded, but nobody is told about them. Set rules up under Settings > Alerts.
A rule
Every rule has:
- a project and a trigger, described below;
- a minimum level, for rules about errors and log lines;
- an optional environment, such as
production, to ignore the rest; - a cooldown in minutes, so a burst of events does not send the same alert over and over;
- one or more places to send to.
Ignored issues never trigger an alert. The Recently sent list on the same screen shows each alert that went out, and each that failed.
Triggers
New issue
An issue is seen for the very first time.
Regression
A resolved issue happened again.
Occurrence threshold
An issue happened at least a number of times within a number of minutes. Checked every few minutes against hourly counts, so it suits "more than 100 in the last hour" better than "5 in the last minute".
Log match
A log line at or above the minimum level contains a text. The match is case-insensitive. Leave the text empty to match every line at that level.
Metric threshold
A metric crosses a line over a time window. Choose:
- what to take: the total, the mean, the highest or lowest value, or the newest reading;
- whether it has to be above or below the threshold;
- the window, rounded out to whole hours;
- optionally, which series to watch, as
status=500, route=/orders.
A window without any readings never fires, in either direction: a metric that stops arriving is not a metric below the threshold.
Where alerts go
| Channel | What arrives |
|---|---|
| A message to each address, comma separated. | |
| Webhook | A JSON POST to your URL, described below. |
| Slack | A message through an incoming webhook URL. |
| Microsoft Teams | A message through an incoming webhook URL. |
A delivery that fails is retried a few times before it is marked as failed.
Webhook payload
{
"reason": "A new issue was seen for the first time",
"rule": {"id": 3, "name": "New errors in the shop", "trigger": "new_issue"},
"project": {"id": 1, "name": "Shop"},
"metric": null,
"issue": {
"id": 42,
"short_id": "SHOP-14",
"title": "TypeError: cart is undefined",
"culprit": "checkout",
"level": "error",
"status": "unresolved",
"times_seen": 12,
"first_seen_at": "2026-09-24T10:02:11+00:00",
"last_seen_at": "2026-09-24T10:14:40+00:00"
}
}
rule.triggerisnew_issue,regression,issue_threshold,log_matchormetric_threshold. Use it, notreason, to decide what to do in code:reasonis a sentence for people, in your organisation's language.issueisnullfor log and metric rules.metricis set for metric rules, with itsid,name,kindandunit.