← Help & Docs

Application Monitoring

OneDrive health, CISA KEV exposure, Purview DLP alert activity, and your own templated agent monitors as a single findings surface - with create, on/off, and promote-to-task. Last updated 2026-07-13

What it does

Application Monitoring (TATER Manage → Endpoint Health → Application Monitoring) is the home for noisy, continuously-detected fleet signals. Instead of auto-filing thousands of help-desk tickets, every detection is kept as a deduplicated finding - a continuously-updated state you acknowledge, suppress, resolve, or explicitly promote to an Ops task when it genuinely needs help-desk lifecycle. The same findings queue is also available to technicians in TATER Ops → Workspace → App Monitoring; monitor definitions (create/toggle) are managed in TATER Manage.

It has two layers:

Findings - sources & lifecycle

Findings carry a severity, a source, the affected device, and a lifecycle state. Sources include:

SourceWhere it comes from
onedriveThe OneDrive Sync Health built-in monitor (confirmed-degraded devices).
kevThe CISA KEV Exposure built-in monitor (installed software matched to the Known Exploited Vulnerabilities catalog; 21-day BOD 25-01 SLA).
monitorYour templated agent monitors (service, process, port, disk, cert, BitLocker, scheduled task, custom script).
purview-dlpMicrosoft Purview DLP alert activity, aggregated per policy - see Microsoft Purview DLP alerts below. Metadata only (counts / status / severity), never matched content.
eol / cve / sensor-alert / hardening / power-automate / keepit-backup / ...Other detectors as they come online.

Lifecycle: open → acknowledged → suppressed → remediated → superseded. A finding auto-reopens if the signal returns, and auto-clears (remediated) when the detector or agent reports the condition resolved. Findings have a 180-day TTL.

Built-in monitors

Two monitors are always present, seeded per organization. They are toggle-only (you can turn them off, but not delete them):

Templated monitors

Create monitors from the Monitors tab → + Create Monitor. The TATER agent (v2.4.17+) evaluates each enabled monitor on its targeted devices every 15 minutes and reports pass/fail, which raises or clears a monitor finding.

TypeChecksConfigPlatforms
Service RunningA Windows service / systemd unit is runningserviceNameWindows, Linux
Process RunningA named process is runningprocessNameWindows, Linux, macOS
Port ListeningA local TCP port accepts connectionsport, hostall
Disk Free SpaceFree space stays above a thresholdpath, minFreePercentall
Certificate ExpiryA LocalMachine\My cert is not near expirysubjectMatch, warnDaysWindows
BitLocker EncryptionA drive is fully BitLocker-encrypteddriveWindows
Scheduled Task HealthA task exists and ran recently / succeededtaskName, maxAgeHoursWindows
Custom ScriptYour PowerShell/bash returns the expected resultinterpreter, script, successCriteria, expectOutputall

Custom-script bodies must be ASCII-only - non-ASCII characters corrupt the temp file the agent writes for evaluation.

Scan freshness (stale data alerts)

Scan-derived views render whatever was last captured, with no live re-check - so a capture that has quietly fallen weeks behind reads on screen exactly like current data. TATER tracks each scan source against a cadence SLA and raises a monitoring finding (source scan-freshness) when a source goes stale or has never run, so nobody has to notice on their own.

SourceRefreshed byAgingStale
M365 CloudScan-M365Cloud (weekly)7 days14 days
Endpoint / IntuneScan-Endpoints (daily)2 days4 days
Identity / NHIScan-M365Cloud (rides the cloud scan)7 days14 days

Aging does not alert. It is the headroom state - one missed cycle, still within tolerance - and paging on it would train people to ignore the signal. Only Stale and Never run raise a finding. Stale carries the higher severity of the two: never-run is a setup gap where there is simply nothing to trust yet, while stale actively misleads, because the data is on screen looking current.

Findings auto-resolve: when a source comes back inside its SLA the finding is remediated automatically, so fixing the scan clears the alert without anyone closing it by hand. The sweep runs every 6 hours, comfortably inside the tightest (4-day) window.

Identity / NHI is tracked separately on purpose. It is refreshed by the cloud scan, so it can silently fall behind while the cloud source itself still looks fresh - which is exactly how an Identity Security view kept showing app registrations that had already been remediated. Watching the parent scan alone would not have caught it.

You can also pull the same picture on demand at any time from GET /api/scan-source-health, which returns each source's state, capture timestamp, age, record count, last job status, and a plain-language diagnosis with the command to refresh it.

Microsoft Purview DLP alerts

TATER can ingest Microsoft Purview Data Loss Prevention (DLP) alert activity as monitoring findings (source purview-dlp), one aggregate finding per DLP policy. This gives continuous visibility into DLP health - and in particular catches the case where a rule's "Send an alert to admins" (GenerateAlert) setting was silently turned off: alert volume for that policy drops to zero, which surfaces here as a finding to review. Maps to CISA SCuBA 4.3 / 4.4 continuous-DLP-evidence expectations.

Metadata only - never content. By design, TATER stores only aggregate/status metadata for each policy: policy identity, a policy name (when safely available), severity, resolution status, timestamps, and the alert count. It never reads or stores the matched content, sensitive-info-type snippets or confidence, filenames, file paths, email subject lines, or sender / recipient / actor identity. This is enforced in code by a single extraction function that returns a fixed whitelist of fields; the alert title (which can embed a subject or filename) is treated as tainted and discarded except for a strictly-matched policy name. Firms handling SSN / ITIN / tax data can enable it without creating a new store of references to that data.

Setup

  1. Grant the Graph permission (customer tenant, Entra admin). On the app registration you use for TATER cloud scanning (the app whose Client ID + Secret are stored as this org's tenant credential under Settings → Tenants): add the Microsoft Graph application permission SecurityAlert.Read.All and grant admin consent. This is the exact least-privilege permission the Graph /security/alerts_v2 API requires - it is read-only and does not grant access to DLP content. No new app or secret is needed.
  2. Confirm the DLP policies actually alert (Purview admin). In the Purview portal → Data loss prevention → Policies, make sure each relevant rule has "Send an alert to admins" (GenerateAlert) enabled. From then on, a drop to zero alerts on a previously-active policy is itself surfaced as a finding.
  3. Enable it in TATER (Admin). POST /api/monitoring/dlp/config with { "enabled": true, "targetTenantId": "<your M365 tenant GUID>", "windowDays": 30 } - or ask the AI Analyst to run ingest_purview_dlp({ target_tenant_id, window_days }) to configure-and-run in one step. A daily sweep then keeps it fresh; you can also run POST /api/monitoring/dlp/ingest on demand.
  4. Verify. The ingest returns { policies, alerts, findings } - a nonzero alerts confirms Graph access works. The per-policy findings then appear on this page filtered to source Purview DLP.
SymptomCause / fix
Ingest returns 403The app is missing SecurityAlert.Read.All admin consent in the target tenant. Re-grant consent; allow a few minutes to propagate.
"No TenantCredential for tenant …"The tenant's Client ID / Secret aren't stored in TATER. Add them under Settings → Tenants (same app as the cloud scan).
alerts: 0 unexpectedlyEither no DLP alerts fired in the window (widen windowDays), or GenerateAlert is off on the policies - which is the blind spot this feature exists to surface.
A finding shows a GUID instead of a policy nameThe tenant's DLP alert titles don't match the standard "DLP policy (NAME) matched" shape, so the name is safely not extracted. The GUID still identifies the policy; look the name up in the Purview portal.

Detecting a disabled GenerateAlert flag directly (rather than inferring it from zero alert volume) requires reading the DLP rule configuration via Security & Compliance PowerShell - a separate build. This feature detects it via the alert-volume signal, which needs only the read-only Graph permission above.

The page

Promote to an Ops task

Most findings should stay on the monitoring surface. When one genuinely needs help-desk lifecycle (assignment, SLA, comments), click To Task - it creates a linked TATER Ops task pre-filled with the finding evidence, priority derived from severity, and a back-link. Only do this when you want a person to own it.

Permissions

Auditor+ can view findings and monitors. Admin+ can acknowledge / suppress / resolve / promote findings, and create / edit / delete / toggle monitors.

MCP tools

Available on both the HTTP and stdio MCP servers:

Activating templated monitors on the fleet

Built-in monitors (OneDrive, KEV) work immediately. Templated monitors require agent v2.4.17+ - the agent auto-updates at next restart (or push a fleet restart wave). Once updated, agents pick up enabled monitors within ~15 minutes.