# Monitor Types

Telmai supports five monitor types. Each runs a check against your Fabric table and evaluates the result against a configured threshold.

![](/files/5FPqBNXcr82lM2rQ2xVM)

***

## Record Count

Tracks the number of rows in a table over time.

**What it detects:** Unexpected drops (data loss, failed loads) or spikes (duplicate injection).

**Configuration options:**

* **Threshold type**: static value, percentage change from previous run, or anomaly detection
* **Threshold value**: the limit at which an incident is created
* **Alert severity**: critical / high / medium / low

**Best for:** Critical tables where row count should be stable or monotonically increasing.

***

## Freshness

Monitors how recently data was loaded by inspecting a timestamp column.

**What it detects:** Data that hasn't been updated within the expected time window (stale data).

**Configuration options:**

* **Timestamp column**: must be a `datetime` or `datetime2` column
* **Max staleness**: maximum acceptable age in hours before an incident is created
* **CDC mode**: when enabled, evaluates only rows added since the last scan

**Best for:** Tables with SLAs on data arrival time (e.g., "data must be no more than 2 hours old").

> Only columns with datetime types appear in the timestamp column selector.

***

## Completeness

Measures the ratio of non-null values in selected columns, expressed as a percentage (0–100).

**What it detects:** Columns that are partially or fully unpopulated.

**Configuration options:**

* **Selected columns**: choose which columns to monitor for nulls
* **Minimum threshold**: minimum acceptable completeness % (e.g., 95 means alert if more than 5% nulls)

**Best for:** Key columns that should always be populated (e.g., `customer_id`, `order_date`, `email`).

***

## Schema

Detects structural changes to the table: column additions, removals, or type changes.

**What it detects:** Schema drift that could break downstream consumers.

**Configuration options:**

* **Allow new columns**: optionally allow column additions without triggering incidents
* **Monitored attributes**: restrict schema monitoring to specific columns
* **Forced types**: define expected types for specific columns

**Best for:** Tables consumed by downstream pipelines or reports where unexpected schema changes cause failures.

***

## Custom SQL

Run any T-SQL `SELECT` query against the table and evaluate the scalar result against a threshold.

**What it detects:** Any business-rule violation that standard monitors don't cover.

**Configuration options:**

* **SQL expression**: must return a single numeric value
* **Threshold**: min / max / range
* **Column name**: optional, for display context in incidents

**SQL safety rules:**

* Must be a `SELECT` statement
* Statements that modify data (`INSERT`, `UPDATE`, `DELETE`, `DROP`, etc.) are blocked

**Example:** Alert when any orders have a null status:

```sql
SELECT COUNT(*) FROM dbo.orders WHERE status IS NULL
```

Set threshold: max = 0

**Best for:** Complex business rules, referential integrity checks, custom data validations.

***

## Shared Settings

All monitors share these configuration options:

| Setting               | Description                                                               |
| --------------------- | ------------------------------------------------------------------------- |
| **Schedule**          | Cron expression controlling run frequency (default: every 6 hours)        |
| **Alert Channel**     | Notification destination (Slack, Teams, email, webhook)                   |
| **Impact / Severity** | Severity level assigned to incidents: `critical`, `high`, `medium`, `low` |
| **Enabled**           | Pause/unpause a monitor without deleting it                               |
| **Scan Delay**        | Optional offset — useful for tables with ingestion lag                    |

***

## Related

* [Connecting Assets](/user-guide/connecting-assets.md) — register tables for monitoring
* [Scan Jobs](/user-guide/scan-jobs.md) — understand how and when monitors run
* [Incidents](/user-guide/incidents.md) — what happens when a threshold is breached
* [Administration](/user-guide/administration.md) — configure alert channels


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://fabric-docs.telm.ai/user-guide/monitor-types.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
