---
title: "Limits"
description: "Alerting's quotas, the bounds of rules, contact points and silences, the evaluation budget, and how long history and the delivery log are kept."
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.ezghcloud.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Limits

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](/observability/alerting/rules#preview-and-the-cost-check). A rule that outgrows them
later goes into [error](/observability/alerting/rules#errors), 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](/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](/observability/alerting/rules#errors) 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.

Source: https://docs.ezghcloud.com/observability/alerting/limits/index.mdx
