Alert evaluations aren’t rate limited: every enabled rule is evaluated every minute, and a busy project’s rules never wait behind dashboards or other projects. What a rule may cost is bounded when it’s saved, by the bounds below and the cost check. A rule that outgrows them later goes into error, visibly, rather than being skipped.
Quotas
| Quota ID | Name | Scope | Default | Adjustable |
|---|---|---|---|---|
obs.alertRules.perProject |
Alert rules per project | Project | 500 | Yes, up to 5,000 |
obs.contactPoints.perProject |
Contact points per project | Project | 50 | Yes, up to 500 |
obs.silences.perProject |
Active and scheduled silences per project | Project | 500 | Yes, up to 5,000 |
A create over a quota is 409 quota_exceeded. Expired silences don’t count.
ezgh quotas get obs.alertRules.perProject --scope-key <project> shows the limit and usage; see
Service quotas.
Rules
| Limit | Value |
|---|---|
| Name | 1 to 100 characters |
| Description | 1,000 characters |
| PromQL expression | 8 KiB |
| PromQL look-back | Ranges, subquery ranges and offsets add up to at most 1 hour along any path; no @ |
| PromQL instances | 1,000 per rule |
| Logs and traces window | 1 to 15 minutes, in whole minutes |
| Logs and traces grouping | Up to 2 fields; at most 50 groups |
for, keepFiringFor |
0 to 24 hours, in whole minutes |
repeatInterval |
5 minutes to 7 days |
| Labels | 32 per rule; values 1 to 1,024 bytes |
| Annotations | 16 per rule; each template 4 KiB, rendered text cut at 16 KiB |
| Contact points | 10 per rule |
| Evaluation interval | 1 minute, about 30 seconds behind real time |
Evaluation budget
Each evaluation may take at most 20 seconds, read at most 5 GiB and use at most 2 GiB
of memory. A rule that goes over is refused when it’s saved (422 rule_too_expensive, naming
the budget), and is in rule error if it goes over later.
A timeout becomes a rule error after three in a row; isolated timeouts are treated as EZGH’s.
Contact points
| Limit | Value |
|---|---|
| Email addresses | 1 to 10 per contact point |
| Confirmation link | Valid for 7 days. Saving the contact point sends a pending address a new one at most once an hour |
| Asking an unsubscribed address again | Once every 7 days per address |
| Webhook URL | https, port 443 or 8443, 2,048 characters, a host name with public addresses |
| Webhook secret | 16 to 256 characters |
| Webhook headers | 5, values up to 1,024 characters |
| Webhook body | 1 MiB; alerts past it are left out and counted in truncatedAlerts |
| Delivery timeout | 10 seconds; the first 4 KiB of the answer is read |
| Retries | For up to 1 hour after the notification is created |
| Instances shown | Email 20, Slack 10, then “and N more”; a webhook gets them all, up to its 1 MiB |
| Email confirmation page | 30 requests a minute per IP address |
Silences
| Limit | Value |
|---|---|
| Matchers | 1 to 32; at least one must not match the empty string |
| Matcher label | 256 bytes |
| Matcher value | 1,024 bytes |
| Duration | At most 30 days from startsAt to endsAt |
| Comment | 1 to 1,000 characters |
Retention
| What | Kept |
|---|---|
| Resolved instances | 15 minutes |
| A rule’s history (state changes) | 30 days |
| Notifications and the delivery log | 30 days |
| Expired silences | 30 days |
Lists
Lists answer at most 100 items a page (rules, history, notifications and delivery attempts 25 by default, contact points and silences 20, alerts 50), and the grouped Alerts list 50 groups a page (20 by default), each with its first 10 instances.