Too many alerts is the same as no alerts. This article breaks down Observe's alert engine — rule definition, noise reduction and escalation — with ready-to-use rule examples.
Here is a real scenario. A payments team wired up alerts for "error rate above 1%", "response time over 200ms" and "disk usage over 80%" all at once. The result: a single service hiccup produced dozens of notifications within a minute. The on-call engineer quickly formed a habit — mute the alert group first, then take a look. Once alerts lose trust, the real incident is the one nobody opens.
Observe's alert engine is built around a single idea: every alert should be worth opening. To get there, it works in three layers — rule definition, noise reduction, and escalation. Each layer fixes a distinct way that alerting goes wrong, and skipping any one of them will quietly erode the system you built.
The first failure mode is vague rules. If your threshold is a gut feeling rather than a measured number, you will either miss real incidents or drown in false positives. Observe supports three kinds of trigger conditions that can be freely combined:
cpu_usage > 80 sustained for 5 minuteserror_rate > 0.5% within 5 minutesOutOfMemoryError or connection resetA rule can attach several conditions; hitting any one of them triggers it. More importantly, always add a for clause so an anomaly must persist before alerting. This filters out the spikes caused by deploys and autoscaling:
alert: order_service_error_rate
expr: sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m])) > 0.005
for: 3m
for: 3m means the error rate must stay above 0.5% for three consecutive minutes before the alert fires. That one line eliminates most of the noise caused by releases and scaling events. If you take nothing else from this article, take the for clause — it is the cheapest reliability improvement available.
The second failure mode is duplication. A single root cause — say, a database outage — can fan out into fifty alerts across every service that depends on that database. On-call engineers drown in repetition and stop reading. Noise reduction relies on three techniques:
order-service failing together produce a single alert.Combined with recovery notifications, only the full "fired to recovered" lifecycle deserves attention — all the redundant repeats in between are dropped. An engineer should be able to answer "what is broken and when did it start" from a single glance, not by scrolling back through a wall of identical messages.
The third failure mode is unaccountable delivery. A message that nobody acknowledges is as good as no message at all. Observe routes alerts by severity:
Every channel supports retries and timeout escalation, so a message that nobody saw does not quietly disappear into the void. The key design decision is the escalation timeout: it should be short enough that a sleeping on-call never silently drops a P0, but long enough that a false page does not wake the whole team.
For the first week, only enable P0 and P1, and record P2 silently as an observation. Watch what actually fires. Tune the thresholds and the for windows against reality, not against what you guessed during design. Once the team is satisfied with the signal-to-noise ratio, open up the rest gradually. The value of alerting is never in the count — it is in every single alert being acted upon.