Safeguard
Developer Tools•

What should you monitor on a scanning platform? SLIs and SLOs

Track queue age, time to first result, scan success rate, database age and coverage. Set SLOs for each so a silent scanning failure shows up as an alert.

Safeguard Security Team
4 min read

Monitor five things: how long jobs wait in the queue, how long a scan takes end to end, what share of scans succeed, how old the vulnerability data is, and what share of repositories are covered. Set a service level objective for each, because scanning failures are usually silent.

Why scanners need their own monitoring

A scanning platform can fail without anyone noticing. A pipeline step that errors but is set to continue, a database that stopped refreshing, a webhook that quietly stopped firing: all of these look like "no findings". Green dashboards with no scans behind them are worse than red ones.

Treat scanning as a service with users, and measure what those users experience.

The core indicators

Indicator (SLI)What it measuresExample objective
Queue age, by laneTime between enqueue and startInteractive jobs start within a few minutes at the 95th percentile
Time to first resultEnqueue to result visible to the developerA target per scan type
Scan success rateCompleted over attempted, excluding user errorsA high percentage, with failure classes tracked
Data freshnessAge of the vulnerability database in useUnder a set number of hours
CoverageRepositories and artifacts with a recent scan over those that should have oneA target, with the gap listed by owner
Dead-letter depth and ageJobs that gave upZero older than a week

The example objectives are placeholders. Choose numbers from your own baseline, publish them, and review them each quarter.

The one most teams miss: coverage

Success rate tells you whether scans that ran were good. It says nothing about the repositories that never ran. Build an inventory of everything that should be scanned from your source host and registries, then compare. New repositories are the usual gap: created last week, no pipeline yet.

Steps

  1. Emit structured events at each stage: enqueued, started, finished, failed, with job ID, lane, tenant, scan type, scanner version and database build.
  2. Compute the indicators from those events.
  3. Define an SLO for each, and an error budget so you know when to stop launching changes and fix reliability.
  4. Alert on symptoms, such as queue age over target, not on every worker restart.
  5. Add a synthetic check: a known vulnerable test artifact scanned on a schedule, which must produce a known finding. If it does not, the platform is broken even if everything looks healthy.
  6. Review the monthly numbers with the teams that depend on them.

Report outward too

Platform teams often keep these numbers private. Sharing a short monthly summary of coverage and freshness with engineering leadership builds trust and makes the case for capacity when it is needed.

Try it yourself

Click through it at your own pace, or open it full screen. Look at how ongoing status is shown over time, which is the view your own indicators should give.

Safeguard's asset discovery helps find repositories and artifacts that should be scanned but are not. You can try the free scan at https://gold.safeguard.sh/scan.

Quick check

What is a synthetic check?

A scheduled scan of a known vulnerable test target that must return a known finding. It proves the whole path works.

Is a low failure rate enough?

No. Also measure coverage, because repositories that never got scanned produce no failures.

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.