Alerting is an enterprise-only feature and requires the enterprise Bifrost image.
bifrost.alerting into the generated config.json that Bifrost loads at startup. Use this page when you want alert channels and rules managed from values files.
For the runtime behavior and UI workflow, see Alerting, Alert Rules, Alert Channels, and Alert History.
Alert rules evaluate governance metrics. Define the referenced virtual keys, teams, customers, budgets, and rate limits under
bifrost.governance, or create them through the Web UI or API before the rule is evaluated.Quick example
Create Kubernetes secrets for channel credentials and expose them as environment variables to the Bifrost pod:Top-level fields
| Field | Type | Default | Description |
|---|---|---|---|
bifrost.alerting.history_retention_days | integer | 365 | Days to retain alert history. Set 0 to disable retention pruning. |
bifrost.alerting.evaluation_interval_seconds | integer | 60 | Seconds between rule evaluations. Use 5 to 10 for one-minute budget or rate-limit reset windows. |
bifrost.alerting.webhook_network | object | See below | Outbound URL validation controls for webhook-based channels. |
bifrost.alerting.channels | array | [] | Declarative notification destinations. |
bifrost.alerting.rules | array | [] | Declarative CEL rules evaluated against governance metrics. |
Alerting samples the current governance counters at this interval. Keep
evaluation_interval_seconds comfortably below the shortest configured budget or rate-limit reset duration so a brief threshold breach is observed before governance resets the counter.Webhook network controls
| Field | Default | Description |
|---|---|---|
allow_http | false | Allow Slack, Microsoft Teams, and generic webhook channels to use http:// URLs. PagerDuty always uses its fixed HTTPS endpoint. |
allow_private_network | false | Allow webhook destinations on RFC1918 private networks. Link-local and unspecified addresses remain blocked. |
Channels
Each channel needs a stableid, a display name, a type, an enabled flag, and a type-specific config.
| Field | Required | Description |
|---|---|---|
id | Yes | Stable channel ID. Rules reference this ID in channel_ids. |
name | Yes | Operator-facing channel name. |
description | No | Optional description. |
type | Yes | slack, microsoft_teams, pagerduty, or webhook. |
enabled | Yes | Whether this channel can receive notifications. |
cooldown_seconds | No | Minimum seconds between sends for this channel. Set 0 for no channel-level cooldown. |
config | Conditional | Required for every supported channel type. |
Channel config
Credential and endpoint fields supportenv.VAR_NAME references. Bifrost resolves the value from the pod environment at startup.
| Channel type | Required config | Notes |
|---|---|---|
slack | Exactly one of webhook_url or url | Slack incoming webhook URL. |
microsoft_teams | Exactly one of webhook_url or url | Teams incoming webhook or Workflows URL. |
pagerduty | Exactly one of routing_key or integration_key | PagerDuty Events API v2 integration key. |
webhook | Exactly one of url or webhook_url | Generic webhook URL. Optional headers values also support env.VAR_NAME. |
For each alias pair, provide exactly one key. For example, use either
webhook_url or url for Slack, not both.Rules
Rules evaluate CEL expressions against governance metrics collected for a virtual key, team, or customer.| Field | Required | Description |
|---|---|---|
id | Yes | Stable rule ID. |
name | Yes | Operator-facing rule name. |
description | No | Optional description. |
enabled | Yes | Whether this rule is evaluated. |
scope_type | Yes | virtual_key, team, or customer. |
scope_id | Yes | ID of the scoped virtual key, team, or customer. |
cel_expression | Yes | CEL expression that evaluates to a boolean. |
query | No | Optional UI query-builder representation of cel_expression. |
cooldown_seconds | No | Minimum seconds between notifications for this rule. Default is 60. Set 0 to disable rule-level cooldown. |
notify_once_per_reset_cycle | No | When true, notify at most once per matched budget or rate-limit reset cycle. |
channel_ids | Yes | One or more alert channel IDs. |
target_type | Conditional | Use budget with target_id to evaluate one specific budget. |
target_id | Conditional | Required when target_type is set. |
Scopes and targets
Every rule must have a scope. A rule can either evaluate all budgets for that scope or target one budget explicitly.| Behavior | target_type | target_id |
|---|---|---|
| Evaluate all budgets in the scope | Omit | Omit |
| Evaluate one budget | budget | Budget ID |
target_type and target_id must be provided together.
CEL examples
Specific budget example
Usetarget_type: "budget" and target_id when a rule should evaluate one budget instead of every budget in the scope.
Reset-cycle notifications
Setnotify_once_per_reset_cycle when you want one notification per budget or rate-limit reset window, instead of repeated sends based on a cooldown.
Clusters
In a Bifrost Enterprise cluster, only the leader evaluates alert rules and writes alert history. Followers can serve inference traffic and update shared governance usage, but they do not dispatch duplicate alerts. No extra alerting configuration is required for cluster mode. Configure clustering separately underbifrost.cluster.
Validation
The Helm values schema validates alerting configuration during template rendering and install or upgrade operations. It checks channel types, required channel config, exact-one alias pairs, requiredchannel_ids, and the target_type / target_id pairing.
Next steps
Alerting overview
Learn how alert evaluation, cooldowns, history, and clustering work.
Governance in Helm
Define the virtual keys, teams, customers, budgets, and rate limits that alert rules evaluate.

