Skip to content
Docs
foxborne.comRequest a pilot

Alerts

Route findings to the people who act on them. Alert rules, starting from the six defaults R1 to R6, set the severity and the routes, and each destination receives only its data class. Turn on a destination, route a rule to it and read every firing.

How-toEvery deploymentAdminMarkdown
On this page11

Alert rules decide who hears about a finding, how fast and with how much detail. Detection stays with the detection rules, which produce the findings. An alert rule reads the same signals, adds a severity and routes a message.

Every program starts from six alert rules, R1 to R6, and each one can be edited. New alert rule adds your own. Each edit saves the rule as its next version, and firings already recorded keep theirs.

The Alerts page#

Alerts sits in the Connect group of the sidebar, at /app/alerts. It has two tabs: Alert rules and Recent firings, at /app/alerts/firings.

The Alert rules tab opens with five figures. The values below come from the example dataset.

FigureExampleWhat it counts
Rules on6 of 6Alert rules switched on
Live since23 Sep 2026, 14:09 UTCWhen the rules were turned on
Fired since then8Firings recorded since that time
Messages sent9, all deliveredDeliveries made for those firings
PagerNone configuredWhether a pager destination exists

The rules are a table with five columns: Alert rule (its ID, name and version, and whether it is a program default or who created it), Built on (the detection rule, such as vibration_high 1.0), Delivers to (its first route and how many more), Fired and On, the switch.

Select a row to open the rule's drawer. It gives Signals, Default condition and Severity and routing, with a chip for each route, then the Basis, the Sources and This program, which names the detection rule it builds on. Firings at its foot opens the rule's firings, and Edit opens its editor.

Below the table the console states the default: "An alert message is L0: rule, severity, vehicle alias, UTC time and a link to the case. Evidence stays in Foxborne, where access is audited."

Before you start#

  • An admin is available to turn on egress. Admins confirm with a hardware security key.
  • The destination is reachable. A destination marked Needs a network path out or Needs a VPC endpoint also needs that route.
  • The credential sits in your secret store. Foxborne takes a reference to it, never the secret.
  • For L1, your program has authorized the destination for CUI.

Choose a destination#

The Notify group on the Destinations tab holds the alert destinations. The Protocol list and the target field in each destination's settings offer these choices.

DestinationProtocol choicesTarget fieldClass
Email (SMTP relay)SMTP submission, 587 STARTTLS; SMTP submission, 465 implicit TLSSender and recipientsL0 or L1
MattermostIncoming webhook, HTTPS POST; REST API with a bot tokenChannelsL0 or L1
Microsoft Teams (GCC High, DoD)Teams bot on Azure Bot Service, Azure Government; Microsoft Graph, GCC High (graph.microsoft.us); Microsoft Graph, DoD (dod-graph.microsoft.us)Team and channelL0 or L1
Microsoft Teams (commercial, GCC)Workflows webhook, HTTPS POSTTeam and channelL0 or L1
GovSlackIncoming webhook on slack-gov.com; Web API chat.postMessage on slack-gov.comChannelL0 or L1
PagerDutyEvents API v2, POST events.pagerduty.com/v2/enqueueServiceL0 only
AWS SNS (GovCloud)SNS Publish, us-gov-west-1; SNS Publish, us-gov-east-1Topic ARNL0 or L1
Generic webhook (HMAC)Standard Webhooks v1, HMAC-SHA256; Standard Webhooks v1a, Ed25519Endpoint and eventsL0 or L1
Alertmanager and GrafanaAlertmanager API v2, /api/v2/alerts; Metrics endpoint for Grafana to queryReceiverL0 or L1

L1 needs the box The program has authorized this destination for CUI. No alert carries L2: evidence moves only through Export, with approval.

Email. The sender goes in Sender and recipients, and "Recipients are set per alert rule." Exchange Online turns off Basic authentication for SMTP AUTH by default at the end of December 2026. A relay that signs in there then needs OAuth.

Mattermost and GovSlack. A Mattermost incoming webhook is a JSON POST to https://<server>/hooks/<key>, and the URL itself is the secret. GovSlack uses slack-gov.com instead of slack.com, including for generated URLs such as webhooks and response_url.

Microsoft Teams. Office 365 connectors, including connector-based incoming webhooks, were switched off between 18 and 22 May 2026. Workflows is marked not available in GCC High and DoD, so use a Teams bot on Azure Bot Service or Microsoft Graph there.

PagerDuty and AWS SNS. The FedRAMP Marketplace lists PagerDuty at Class B (Low), below the Moderate-equivalent bar DFARS 252.204-7012 sets, so it takes L0 only. In GovCloud, SNS must carry no export-controlled data to email, HTTP or push subscribers, or in topic names and subjects.

Alertmanager and Grafana. Grafana's built-in Alertmanager handles only Grafana-managed alerts. Foxborne posts to a Prometheus Alertmanager that Grafana uses as an external Alertmanager, and re-sends firing alerts until they resolve.

Set up a destination and route a rule to it#

  1. Open the destination

    Go to Integrations. On the Destinations tab, select the destination's row in the Notify panel, then select Set up in its drawer.

  2. Fill in the settings

    Enter the Host allowlist, one host:port per line, and choose the Protocol. Fill in the target field, then the Credential reference and the Data class. The example dataset's Mattermost destination uses these values:

    Host allowlist
    chat.hfr.internal:443
    Protocol
    Incoming webhook, HTTPS POST
    Channels
    test-conductor, reliability-alerts
    Credential reference
    secretsmanager:foxborne/int/mattermost-webhook
    Data class
    L0
  3. Send a test

    Select Send test, and Foxborne sends "One message with no data, to the first host". The dialog reports Delivered at a UTC time with the response, such as 200 OK, body "ok". View opens the delivery in the ledger, and the audit log records Sent test delivery.

  4. Save

    Select Save; the toast reads, for example, Mattermost saved. Egress stays off until an admin turns it on. The audit log records Configured integration with the first host, the protocol and the class.

  5. Turn on egress

    Select the switch in the destination's Egress column, then Turn on egress. An admin confirms with a hardware security key; anyone else picks the confirming admin under Admin confirming. The audit log records Enabled egress.

  6. Route an alert rule to it

    Go to Alerts, select the rule's row, then Edit in its drawer. Under Delivers to, tick the routes the rule should use; each shows where it sends, such as "L0 to chat.hfr.internal:443". Select Save, and the rule saves as its next version.

Default alert rules#

The six defaults, as their drawers give them. Words in code are PX4 fields and parameters.

RuleDefault conditionSeverity and routing
R1 Vibration above threshold (tracked-UGV profile)accel_vibration_metric above 24 m/s² continuously for 1.0 s or more while armed. Escalate if any accel_clipping counter increments in the window.Warning, or High with clipping. L0 to the test conductor channel.
R2 Telemetry gapGap between consecutive HEARTBEAT messages from the vehicle's system ID above 3.0 s while armed. Escalate when the gap reaches that flight's COM_DL_LOSS_T.Medium; High at COM_DL_LOSS_T.
R3 Failsafe enteredAny transition of vehicle_status.failsafe into failsafe while armed; repeats within 30 s merge into one finding.High. Opens a case and ticket; L0 page.
R4 Memory pressure (companion computer)Any process RSS at or above 6,144 MiB for 3 consecutive samples. Critical if the kernel logs "Out of memory: Killed process" or "Memory cgroup out of memory".Warning, then Critical on an OOM kill.
R5 Device disconnectA device in the vehicle's registry (USB port path or serial number, or a CAN interface) disconnects or goes bus-off while armed. 2 or more re-enumerations within 60 s flag as flapping.High for flight-critical devices (GNSS, radio, autopilot link, CAN ESC bus); Medium for payload.
R6 GNSS jammingjamming_state = 3 (Detected) for 2 s or more, or jamming_indicator at 80 or above for 5 s. Confidence rises when satellites_used is under 12 or eph is above 1 m. Downgrade to Info inside scheduled range GPS-test windows.High; L0 to range safety.

The Basis line traces each default. R1's 24 m/s² "is a program choice for tracked vehicles, not a PX4 number." R2's 3 s gives warning before the failsafe, because COM_DL_LOSS_T defaults to 10 s (range 5 to 300).

For reference, PX4 Flight Review shades the vibration metric red above 9.81 m/s² for air vehicles. See PX4 parameters Foxborne reads.

In the example dataset, the routes read as follows. A route whose destination is not configured shows not configured.

RuleDelivers to in the example dataset
R1Mattermost, test-conductor
R2Mattermost, reliability-alerts
R3A case, as a draft for the investigator; Jira Data Center, project REL; PagerDuty page (not configured)
R4Mattermost, reliability-alerts; Email, reliability on-call, Critical only
R5Mattermost, test-conductor
R6Email, range safety

Turn a rule off or change it#

The switch in a rule's row turns it on or off. Turned off, the toast reads "Findings are still produced and recorded; nobody is notified." The audit log records Enabled alert rule or Disabled alert rule, with the name and version.

Edit, in the rule's drawer, opens Edit rule. For a rule at 1.0, its note reads "Saves as version 1.1. Firings already recorded keep version 1.0."

You can change Default condition, Severity and routing and Delivers to. Signals and basis stay "Fixed per rule, so every firing cites the same signals and sources."

Save confirms with, for example, R1 saved as version 1.1. The audit log records Changed alert rule with what changed, such as Version 1.1: condition.

Create an alert rule#

Select New alert rule at the top right of the Alerts page. The dialog's note: "Decides who hears about a detection, how fast and with how much detail. It carries L0 metadata unless a destination is cleared for more."

FieldWhat to enter
Name and Short nameThe short name shows in firing lists and message subjects, such as Low pack voltage
Built onThe detection rule whose results the alert reads, from every rule on Rules
ConditionWhen the alert fires, in your words, such as "While armed, the detection holds for 2 s or longer"
SeverityInfo, Warning, Medium, High or Critical
Delivers toThe routes, each with where it sends. A route whose destination is not configured says "Not configured, so nothing is sent".

Select Create alert rule. The rule takes the next ID, such as R7, saves at version 1.0 and starts on. Its Signals name the detection rule it reads, and its Basis records that it is a program choice, by whom and when, to review against known-good runs. The toast reads, for example, R7 Low pack voltage created and on. It runs when the next sortie closes out., and the audit log records Created alert rule.

How alert rules differ from detection rules#

Alert rule defaultDetection rule defaultWhat differs
R1: above 24 m/s² for 1.0 s while armedvibration_high 1.0: above 24 m/s² for 1 s (T4), 12 m/s² (Q4)Tracked profile, armed only, escalates on clipping
R2: above 3.0 s while armedtelemetry_gap 1.3: more than 3 s without a HEARTBEATArmed only, escalates at COM_DL_LOSS_T
R3: any transition while armedfailsafe_entered 1.0: any failsafeArmed only, repeats within 30 s merged
R4: 6,144 MiB for 3 samplesmemory_pressure 1.1: RSS at or above 6,144 MiB for 3 samplesCritical on an OOM kill
R5: registry device or CAN interfacedevice_disconnect 1.0: any disconnect on an allowlisted portAdds bus-off and flapping
R6: jamming_state 3 for 2 sgnss_jamming 1.0: jamming_state 3 for 1 sAlert at 2 s, and also on the indicator

In the example dataset, R4 follows the detection rule's T4 override of 24,576 MiB on T4 vehicles. See Thresholds, scopes and overrides.

Check the result#

Recent firings lists each firing with two times, because rules run when a sortie closes out. The first is when the condition held on the vehicle, the second when Foxborne evaluated it after ingest. Filter by All, Critical, High or Medium and Warning, and by rule.

The Delivered column names the destinations and reads Delivered or Not all delivered. Open a firing for When, What held, the rule and version, and each message under Delivered, which opens its ledger entry.

In the example dataset, R4 fired Critical for UAS-04 on run R-0931. The Mattermost post to reliability-alerts was delivered on the first attempt. The email to reliability on-call got 421 4.3.2 Service not available, closing transmission channel and was delivered on attempt 2, 30 s later.

The L0 message R4 posted for UAS-06 on run R-0929 shows what an alert carries:

Payload, as sentExample dataset: R4 at Warning, Mattermost, L0JSON
{
  "channel": "reliability-alerts",
  "username": "Foxborne",
  "text": "R4 Memory pressure, Warning. UAS-06 at 16:20:22.534 UTC, 23 Sep 2026. Run R-0929: https://foxborne.hfr.internal/app/runs/R-0929",
  "props": {
    "foxborne": {
      "rule": "R4",
      "severity": "warning",
      "vehicle": "UAS-06",
      "time": "2026-09-23T16:20:22.534Z",
      "link": "https://foxborne.hfr.internal/app/runs/R-0929"
    }
  }
}

With no case, the link points to the run. With a case, it points to the incident.

Troubleshoot#

A route chip reads not configured. Its destination is not configured or its egress is off: "Not configured, so nothing is sent." Set it up and turn on egress.

R3 fired, and no page went out. The firing reads "The L0 page was not sent: no pager is configured." Set up PagerDuty, which carries L0 only.

A finding produced no alert. The alert rule may be off. Findings are still produced and recorded; turn the rule on to notify again.

Findings from before the go-live were never routed. The Recent firings tab notes that firings before the Live since date "were never routed, because no alert rule was on."

Exchange Online refuses the relay's login. Basic authentication for SMTP AUTH is off by default from the end of December 2026. Configure the relay for OAuth.

A destination keeps failing. After 5 attempts, the delivery moves to the dead-letter queue and the Integrations count turns amber. Fix the destination, then select Replay on the Delivery ledger tab.

Next#