Skip to main content
Alerting is an enterprise-only feature and requires the enterprise Bifrost image.
Helm renders 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:
Reference those values from your Helm values file:
Apply the values:

Top-level fields

FieldTypeDefaultDescription
bifrost.alerting.history_retention_daysinteger365Days to retain alert history. Set 0 to disable retention pruning.
bifrost.alerting.evaluation_interval_secondsinteger60Seconds between rule evaluations. Use 5 to 10 for one-minute budget or rate-limit reset windows.
bifrost.alerting.webhook_networkobjectSee belowOutbound URL validation controls for webhook-based channels.
bifrost.alerting.channelsarray[]Declarative notification destinations.
bifrost.alerting.rulesarray[]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

FieldDefaultDescription
allow_httpfalseAllow Slack, Microsoft Teams, and generic webhook channels to use http:// URLs. PagerDuty always uses its fixed HTTPS endpoint.
allow_private_networkfalseAllow webhook destinations on RFC1918 private networks. Link-local and unspecified addresses remain blocked.
Keep both webhook network controls disabled for production unless you are intentionally sending alerts to trusted internal endpoints. Enabling them weakens TLS and SSRF protections.

Channels

Each channel needs a stable id, a display name, a type, an enabled flag, and a type-specific config.
FieldRequiredDescription
idYesStable channel ID. Rules reference this ID in channel_ids.
nameYesOperator-facing channel name.
descriptionNoOptional description.
typeYesslack, microsoft_teams, pagerduty, or webhook.
enabledYesWhether this channel can receive notifications.
cooldown_secondsNoMinimum seconds between sends for this channel. Set 0 for no channel-level cooldown.
configConditionalRequired for every supported channel type.

Channel config

Credential and endpoint fields support env.VAR_NAME references. Bifrost resolves the value from the pod environment at startup.
Channel typeRequired configNotes
slackExactly one of webhook_url or urlSlack incoming webhook URL.
microsoft_teamsExactly one of webhook_url or urlTeams incoming webhook or Workflows URL.
pagerdutyExactly one of routing_key or integration_keyPagerDuty Events API v2 integration key.
webhookExactly one of url or webhook_urlGeneric 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.
FieldRequiredDescription
idYesStable rule ID.
nameYesOperator-facing rule name.
descriptionNoOptional description.
enabledYesWhether this rule is evaluated.
scope_typeYesvirtual_key, team, or customer.
scope_idYesID of the scoped virtual key, team, or customer.
cel_expressionYesCEL expression that evaluates to a boolean.
queryNoOptional UI query-builder representation of cel_expression.
cooldown_secondsNoMinimum seconds between notifications for this rule. Default is 60. Set 0 to disable rule-level cooldown.
notify_once_per_reset_cycleNoWhen true, notify at most once per matched budget or rate-limit reset cycle.
channel_idsYesOne or more alert channel IDs.
target_typeConditionalUse budget with target_id to evaluate one specific budget.
target_idConditionalRequired 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.
Behaviortarget_typetarget_id
Evaluate all budgets in the scopeOmitOmit
Evaluate one budgetbudgetBudget ID
target_type and target_id must be provided together.

CEL examples

For the complete variable list, see Alerting CEL variables.

Specific budget example

Use target_type: "budget" and target_id when a rule should evaluate one budget instead of every budget in the scope.

Reset-cycle notifications

Set notify_once_per_reset_cycle when you want one notification per budget or rate-limit reset window, instead of repeated sends based on a cooldown.
This is useful for rate limits and recurring budgets because the same condition can remain true until the reset window rolls over.

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 under bifrost.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, required channel_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.