Administration

Notifications

Send SQL Flow alerts to Slack, Microsoft Teams, PagerDuty or any HTTP endpoint with webhook channels, and test them.

A notification channel sends your alerts to a webhook, so you hear about a failing pipeline outside SQL Flow. When SQL Flow raises an alert, it posts a JSON message to every channel whose minimum severity the alert reaches. The only event a channel receives is an alert.

There are two kinds of channel:

KindWhereReceives
Account channelSettings > NotificationsAlerts of the pipelines in that account only.
Global channelSettings > Global notifications, SuperAdmin onlyAlerts of every account. Each message names the account the alert belongs to.

Before you begin

  • You need the Account admin role to add, test and delete an account channel, or the SuperAdmin role for any channel. Other members see the channels without the Add channel, Test and Delete buttons. See Accounts and team.
  • The webhook address must be reachable from the control plane. By default it must be a public address: SQL Flow refuses loopback and private addresses, unless the administrator of a control plane you run yourself allows private ones. See Addresses SQL Flow refuses.
  • For Slack, create an incoming webhook in Slack and copy its URL.

Add a channel

  1. Open the account menu, select Settings, and then select Notifications. A SuperAdmin selects Global notifications for a global channel.
  2. Select Add channel.
  3. Enter a Channel name, such as ops-slack. A name that the account already uses is refused with A channel named '<name>' already exists.
  4. Enter the webhook URL, such as https://hooks.slack.com/services/…. It must start with http:// or https://.
  5. Choose the Minimum severity: info, warning, error or critical. The default is warning. The channel receives alerts at that severity or higher, so critical makes it a critical-only channel. See Severity.
  6. Select Add, then select Test on the new channel.

Each channel in the list shows its name, a chip such as ≥ warning, a disabled chip if it is switched off, and its URL.

Test a channel

Select Test on a channel. SQL Flow sends one sample alert, titled Test notification with the message This is a test alert from SQL Flow., at info severity, and shows the result next to the channel:

ResultMeaning
✓ sentThe endpoint answered with a success status.
✗ HTTP 404The endpoint answered with an error status. The number is the status.
✗ blocked: non-public addressThe address resolves to a loopback or private address that the control plane doesn't allow.
✗ HttpRequestExceptionSQL Flow couldn't connect, for example because the name doesn't resolve or the certificate is refused.
✗ TaskCanceledExceptionThe endpoint didn't answer within 10 seconds.

The test sends regardless of the channel's minimum severity.

What a channel receives

SQL Flow posts a JSON body with this shape:

{
  "text": "[Error] Pipeline failed (Contoso / orders-sql-to-pg): <message>",
  "severity": "error",
  "title": "Pipeline failed",
  "pipeline": "orders-sql-to-pg",
  "message": "<message>",
  "account": { "id": "<account id>", "name": "Contoso" },
  "source": "sqlflow"
}
FieldContent
textA readable one-line summary, for endpoints such as Slack incoming webhooks that display a text field. It reads [<Severity>] <title> (<account> / <pipeline>): <message>, and leaves the account out when there is none.
severityinfo, warning, error or critical.
title, messageThe alert's title and message, as shown on the Alerts page.
pipelineThe ID of the pipeline the alert concerns.
accountThe account's ID and name, or null for a pipeline that has no account.
sourceAlways sqlflow.

A global channel gets the same body for the alerts of every account, so you can tell them apart with account.

Alerts raised by a compare and by scheduled key repair, such as Compare failed and Scheduled key repair not completed, are posted like every other alert.

How delivery works

  • SQL Flow posts once for each alert and channel, and waits up to 10 seconds for an answer. It doesn't retry a failed post. A failure is written to the control plane's log and doesn't affect other channels.
  • The alert itself is always stored and shown in SQL Flow, whether or not a channel received it.
  • During a long webhook outage, or when the control plane stops, some notifications can be lost. Around a failover of the control plane, a notification can arrive twice.

Repeated pipeline failures

A pipeline that faults again and again while the agent restarts it automatically would flood a channel, so SQL Flow posts its Pipeline failed alerts selectively. Every alert still appears on the Alerts page.

  • The first failure of a fault is posted. A repeat of the same fault, with the same message apart from numbers, times and IDs, isn't posted while the pipeline cycles through automatic restarts.
  • A fault the agent won't restart is posted as the critical alert Pipeline failed: needs operator, which is always posted.
  • Once the pipeline recovers, or you pause it, the next failure is posted again, whatever its fault.

Addresses SQL Flow refuses

By default, a webhook can't point to a private or loopback address, because the control plane sends the request and such a channel could probe your internal network. SQL Flow refuses loopback addresses and localhost, private ranges (RFC 1918 and IPv6 unique-local), carrier-grade NAT, link-local addresses including the 169.254.0.0/16 cloud metadata range, and multicast and reserved ranges.

When you add a channel, the refusal reads The webhook host is a non-public address: loopback, private (RFC1918/ULA), link-local (incl. 169.254.0.0/16 cloud metadata), and multicast addresses are not allowed. A URL that isn't http or https is refused with URL must be an http(s) address.

SQL Flow checks a host name when it sends, not when you add the channel, so a name that points to a private address fails at the first Test with blocked: non-public address. The check runs before every post, so a name that later moves to a private address is refused too.

Delete a channel

Select Delete on the channel and confirm Delete "<name>"? Alerts will stop being sent to it.

See also

If this was useful,
our newsletter will be too.

Get monthly insights on data engineering, AI, and building critical infrastructure - direct from the Spectral Core team and CEO Damir Bulic.