Skip to content
Menu

Monitoring

Explore · Monitoring

Know about data problems before your users do.

Beacon runs saved SQL checks on a schedule, across every engine you connect, and records every run. Each check runs as the person who owns it, through the same read-only gate as everything else, and reports its health in the Control Tower.

  • 9connectors
  • 5-fieldcron schedules
  • n stepsjoined in memory
SUBSCRIPTIONActive
Paid orders without shipment
0 7 * * 1-507:00, Monday to Friday
Last 14 runsno rowssentsilencedtimeout
95.5%success, 30 days
3rows last run
1open task
Owner: Ana HorvatRecipients: #fulfilment, ops@acme.example
01How a check runs

Six steps from a cron tick to a message.

A subscription is a schedule attached to a saved query. When the schedule fires, your job runner calls Beacon, and Beacon does the rest.

  1. Schedule firesYour job runner triggers the subscription from its cron expression.
  2. Run as ownerBeacon runs it as its owner and re-checks access to every data source.
  3. Run each stepEach step runs on its own data source, through the read-only gate.
  4. Join in memoryA final query joins @result1, @result2 in an in-memory SQLite store.
  5. DecideThe trigger, minimum row count and anomaly detection decide whether to notify.
  6. DeliverRecipients get the result, a task opens or resolves, the run is recorded.
02Worked example

Paid orders that never shipped.

The shop database (PostgreSQL) knows which orders are paid; the warehouse database (SQL Server) knows which have shipped. No single database can answer the question, so the query has two steps and a final query that joins them.

Step 1 · Shop (PostgreSQL)
-- Paid orders older than a day
SELECT order_id, customer_id, total, paid_at
FROM shop.orders
WHERE status = 'paid'
AND paid_at < now() - interval '24 hours';
Step 2 · Warehouse (SQL Server)
-- Shipments created in the last two weeks
SELECT order_id, carrier, created_at
FROM dbo.Shipments
WHERE created_at > DATEADD(day, -14, SYSUTCDATETIME());
Final query · @result1 joined with @result2
-- Runs in Beacon's in-memory SQLite store
SELECT a.order_id, a.customer_id, a.total
FROM @result1 a
LEFT JOIN @result2 b ON b.order_id = a.order_id
WHERE b.order_id IS NULL
ORDER BY a.paid_at;

Both data sources are linked to the same project, so the query can read them together. The final query is SQLite SQL; it is set through the API or by an AI actor, and the editor shows it read-only.

NEW SUBSCRIPTIONReview
Cron expression
0 7 * * 1-5
Send notification
When result count changes
Recipients
Teams #fulfilment, email ops@acme.example
Attachment
CSV, up to the subscription's max rows
Tasks
Keep a task open while the query returns rows
Beacon07:00
Paid orders without shipment
Query Results
order_idcustomer_idtotal
104 21158 120129.00
104 23611 90448.50
104 24073 455312.90
View Query Results
Task opened Stays open until a run returns no rows, then resolves itself.
03Control Tower

One page that shows whether your checks are healthy.

The Control Tower groups every subscription by its success rate over the selected window. Success means a run that sent, silenced or found nothing; a skipped run counts against it.

Green90% or more of runs succeed
Amber70% to 90%
Redbelow 70%
Stalledno runs, created more than a day ago
HEALTH · LAST 30 DAYSworst first
StateSubscriptionSuccessRunsOpen tasks
RedNightly ledger balance62.5%242
GreenPaid orders without shipment95.5%221
AmberDuplicate invoice numbers88.0%500
StalledStale exchange ratesno runs00
The Control Tower in the dark theme
The Control Tower: health buckets, KPIs, and badges for runs skipped because an owner lost access or a change is not approved.
04Guarantees

What every run can rely on.

Runs as its owner

A scheduled run uses its owner's access, checked again before any SQL runs. If the owner loses access, the run is recorded as skipped and nothing is sent.

Read-only, always

Every step passes the SQL execution gate in its own dialect. Writes, DDL, other databases and dynamic SQL are rejected before anything reaches the database.

Bounded results

A row cap (100,000 by default) is written into the SQL, and each statement has a timeout (120 seconds by default). A larger result fails the run rather than being cut silently.

Masked before delivery

Rows that reach recipients and attachments are PII-masked under the strictest settings of the projects that link the data.

Reviewed SQL only

With the approval workflow on, a scheduled run executes only the query's active version. Anything else is skipped and marked "Not approved". In strict mode the version must also carry an approval for exactly its content.

Every run recorded

Each run keeps its status, row count and timing. The count drives the trigger, the minimum row count, anomaly detection and tasks; the status drives the Control Tower.