Skip to main content

ADD BURN RATE ALERTS TO A HONEYCOMB SLO

This guide shows you how to add two kinds of burn alert to an existing Honeycomb SLO. An exhaustion-time alert fires when the error budget would run out within a set number of minutes. A budget-rate alert fires when too much budget is used within a sliding window. You define the budget-rate alert once and update it in place on later runs.

Prerequisites

Set up the behavior

Pull the extension:

swamp extension pull @hivemq/honeycomb
INF extension·pull: Pulling "@hivemq/honeycomb"@"2026.10.01.1790870399"
INF extension·pull: Identity verified: "@hivemq/honeycomb"@"2026.10.01.1790870399"
INF extension·pull: Pulled "@hivemq/honeycomb"@"2026.10.01.1790870399"
INF extension·pull: Extracted 16 files:

If you do not have the vault yet, create it and store the key in it:

swamp vault create local_encryption honeycomb
INF vault·create: Created vault: "honeycomb" ("Local Encryption")
swamp vault put honeycomb config-key hcxik_replace_with_your_configuration_key

This command encrypts the Configuration Key and stores it in the honeycomb vault under config-key.

If no behavior exists yet for the SLO's dataset, create one. For a multi-dataset SLO, set datasetSlug to all with two underscores on each side:

swamp behavior create @hivemq/honeycomb checkout-slo \
    --global-arg "configKey=${{ vault.get('honeycomb', 'config-key') }}" \
    --global-arg region=us \
    --global-arg datasetSlug=checkout

You will see output like:

Created: checkout-slo (@hivemq/honeycomb)
Path: /tmp/.../models/@hivemq/honeycomb/checkout-slo.yaml
Version: 2026.10.01.1

Global Arguments:
  configKey (string) *required
  region (string) [us, eu]
  datasetSlug (string) *required

Methods:
  sync - Fetch current SLO state from Honeycomb by SLO ID
    Inputs:
      sloId (string) *required
  updateSlo - Update SLO metadata (target, description, period, SLI). All fields are optional — only provided fields are changed. Pass `sliAlias` to repoint the SLO at a different derived column (the column must already exist; create it first via createDerivedColumn).
    Inputs:
      sloId (string) *required
      name (string)
      description (string)
      targetPercent (number)
      timePeriodDays (integer)
      sliAlias (string)
  createSlo - Create a new SLO in Honeycomb. Returns the assigned SLO ID.
    Inputs:
      name (string) *required
      sliAlias (string) *required
      targetPercent (number) *required
      timePeriodDays (integer) *required
      description (string)
      datasetSlugs (array)
  createDerivedColumn - Create a new derived column (SLI calculated field) in the target dataset.
...

Find the SLO ID

Find the SLO ID in the URL of the SLO page in Honeycomb. If you created the SLO with createSlo, it is also in the stored slo resource. The commands below use 2LBq9LckbcA. Replace it with your ID.

Check the ID by fetching the SLO:

swamp behavior run checkout-slo sync --input sloId=2LBq9LckbcA

This command reads the SLO from Honeycomb and writes its current state to the slo resource. If it fails, check the ID and that datasetSlug matches the SLO's dataset.

Add an exhaustion-time alert

To notify a Slack channel when the budget would run out within four hours:

swamp behavior run checkout-slo createBurnAlert \
    --input sloId=2LBq9LckbcA \
    --input 'exhaustionMinutes:json=240' \
    --input 'recipients:json=[{"type":"slack","target":"#checkout-oncall"}]'

This command creates the burn alert in Honeycomb and writes a burnAlert resource with the alert ID. Honeycomb also sends a recovery notification when the burn rate drops. To add a second exhaustion-time alert with a different window, run the command again with a different exhaustionMinutes.

Reconcile a budget-rate alert

To fire when more than 1 percent of the budget (10000 parts per million) is used within 60 minutes, notifying Slack and email:

swamp behavior run checkout-slo syncBudgetRateBurnAlert \
    --input sloId=2LBq9LckbcA \
    --input 'budgetRateWindowMinutes:json=60' \
    --input 'budgetRateDecreaseThresholdPerMillion:json=10000' \
    --input 'recipients:json=[{"type":"slack","target":"#checkout-oncall"},{"type":"email","target":"sre@example.com"}]'

If the SLO has no budget-rate alert, this command creates one. If it has exactly one, the command updates that alert in place and keeps its ID and routing. Either way, it writes a burnAlert resource. To change the window, threshold or recipients later, run it again with new values. If you want a separate budget-rate alert rather than one managed alert, use createBudgetRateBurnAlert, which takes the same inputs.

Check the stored alerts

swamp data query --limit 10

This command lists the most recent data records, including the burnAlert resources and the alert IDs that the delete methods read.

Remove an alert

When you no longer need the exhaustion-time alert, delete it:

swamp behavior run checkout-slo deleteBurnAlert \
    --input sloId=2LBq9LckbcA \
    --input 'exhaustionMinutes:json=240'

This command reads the alert ID from the stored burnAlert resource and deletes that alert in Honeycomb. To remove a budget-rate alert, run deleteBudgetRateBurnAlert with the same sloId, budgetRateWindowMinutes and budgetRateDecreaseThresholdPerMillion you used to create it. See the Honeycomb extension reference for all burn alert inputs.