A deep dive into Observe's alert engine: its three-layer rule structure, silence windows, deduplication and storm convergence, plus YAML configuration examples and practical guidance to help on-call teams cut alert noise and stop paging people for nothing.
The on-call engineer's worst enemy isn't a missing alert — it's too many of them. When one service hiccups and dozens of instances time out at once, an alert per instance floods the phone. Worse, once an alert is proven to be a false positive, people instinctively ignore the next real one. This is alert fatigue, and it compounds: every noisy page makes the whole channel less trustworthy, until a genuine outage scrolls past unnoticed.
The value of an alerting system isn't "how many it can send", but "whether the right one fires and actually gets delivered". Observe's alert engine is built around exactly that: configurable rules, evidence-based triggering, and converged delivery.
An alert rule has three parts:
A rule in YAML looks like this:
alert:
name: order-service-5xx
source: metrics
query: 'sum(rate(http_5xx{service="order-service"}[5m])) / sum(rate(http_total{service="order-service"}[5m]))'
condition: "> 0.01"
for: 5m
labels: { severity: P2, team: order }
notify: [wecom, webhook]
for: 5m is the part that matters: the condition must hold for five minutes before the alert fires, so brief spikes are filtered out automatically instead of becoming false alarms.
Two easy-to-miss but highly useful settings:
The threshold you choose shapes how noisy the alert is. Three common styles:
For a service with steady traffic, a ratio (error rate) is usually the right default. Reserve absolute thresholds for things where any occurrence is bad — a failed settlement job, for example.
Under the hood, each rule is evaluated on a fixed cadence (default every 15 seconds) against its recent time window. A rule moves through three states: pending while the condition is true but the for window hasn't elapsed, firing once it crosses the window, and resolved when the condition clears. State changes — not repeated evaluations — are what trigger notifications, which is how deduplication falls out naturally rather than as a bolt-on feature.
Escalation is stateful too. A P2 that stays open for 30 minutes can automatically page a second channel or bump to P1, with no extra glue code. Most teams configure escalation once and then forget about it, because the rule keeps working through the night while nobody is watching the dashboards. That is the point of a good alerting system: it should hold the line while you sleep.
This is where the engine earns its keep. When one failure hits 50 instances at once, the engine:
team/service/region.The result: one actionable page instead of fifty identical ones.
owner and a runbook link, so whoever gets paged knows whom to contact and what to do.