Kubesense

Monitors

A monitor checks one target on a schedule, from the locations you pick, and alerts when the check keeps failing. Monitors are listed under Synthetics → Monitors.


Monitors List

ColumnDescription
NameMonitor name, with icons for an open outage, a monitor outside its active hours, restricted access, GitOps-managed monitors and tag-policy violations
ServiceThe monitor's service label. Click to filter
TypeCheck type
TargetURL, host or domain checked, with a copy button
StatusUp, Down, Degraded, No data, Pending or Paused
Uptime / p95Uptime and 95th-percentile response time over the time range picked in the top bar
Last run / Last runsTime of the latest run, and a bar of the recent runs
Labels, Probes, Owner, EveryLabels, the locations or agents it runs on, its owner and its interval
  • The state strip above the table filters by state with one click.
  • The search bar filters by status, type, location, probe, owner, enabled, tag_policy and any label key; plain text searches names.
  • The filter panel on the left offers the same filters as facets: Status, Type, Location, Probe, Team, Env, Service, Owner, Enabled, Tag policy and other labels.

Click a row to open the monitor's details.

Row and bulk actions

Each row's menu has Edit, Duplicate, Run now, Pause / Resume and Delete. Deleting a monitor also removes its results and outages.

Select rows to get the bulk bar: Run now, Pause, Resume, Add to maintenance window, Export CSV, Export selected (YAML or JSON) and Delete. Monitors you can only view are skipped by run, pause, resume and delete.

Export

Export above the table exports every monitor that matches the filters:

  • Export as YAML — SyntheticMonitor resources, ready for kubectl apply or for import.
  • Export as JSON — the API representation.
  • Download CSV — the table's columns for the selected time range.

Secrets are exported as {{ secret:<name>/<key> }} placeholders, never as values.


Creating a Monitor

Click Create Monitor. Pick how to start:

OptionDescription
Start from scratchA blank monitor of any check type
From a templateA prefilled monitor for a common check: health endpoints, JSON APIs, security headers, CORS, cookies, certificate expiry, DNS, gRPC health, open or closed ports, login flows, browser journeys, MCP servers, Kubernetes deployments and more. Filter by test type and feature, or search
From an APM serviceHTTP monitors for a traced service's busiest endpoints (needs access to Traces). Pick the service and a base URL, select endpoints, and review: each monitor gets a latency assertion of 2 × the endpoint's p95 and the service label
Import from YAML, JSON or TerraformSee Import Monitors

The editor has six steps. Next checks the current step; you can go back to any step at any time.

Step 1 — Define

FieldDescription
NameRequired, up to 200 characters
Check typeSee Check Types. It cannot change after the monitor is created
TargetURL, host, domain or resource, labelled for the type. For multistep and browser tests it is informational: shown in lists and notifications, never checked
DescriptionWhat the monitor covers and who to call
Team / ServiceStored as the team and service labels
LabelsKey/value labels. They drive filters, maintenance windows, agent targeting and the labels on alert series

If a tag policy is set, a banner lists the required or recommended tags.

Step 2 — Request (or Steps)

The type's settings: the HTTP method, headers, body and authentication, the DNS record type, the TCP port, and so on. For multistep and browser tests the step is called Steps and holds the test's steps. Every field is described in Check Types.

Fields accept variables as {{ NAME }}, for example Authorization: Bearer {{ API_TOKEN }}.

Step 3 — Assertions

Every assertion must pass for a run to succeed. Click Add assertion and pick what to check (status code, response time, body, header, certificate and so on, depending on the type), an operator and the expected value.

OperatorMeaning
equals / not equalsExact comparison
contains / does not containSubstring
matches regex / does not match regexRE2 regular expression
>, ≥, <, ≤Numeric comparison
does not exist / is undefinedThe header is absent / the path selects nothing

For a response body, pick JSONPath, XPath or JSON Schema to check part of it. When a path selects several values, choose whether the first value, every value or at least one value must match. For HTTP, Suggest assertions proposes assertions from a live response.

Test <type> → Run test runs the check once from the API server without saving, so you can see the response while you write assertions.

Step 4 — Locations & schedule

FieldDescription
StatusActive or Paused. Paused monitors don't run or alert
LocationsPick one or more locations. Each card shows the location's status and its online agents. The monitor runs on the agents of every location picked
Advanced: specific agents, agents by labelRun on named agents, or on every agent whose labels match (including agents that join later), e.g. env = prod
Location threshold (N-of-M)Alert when N of the M locations fail. Default 1
FrequencyHow often the monitor runs, from 10 seconds to 1 week. Default 1 minute. Browser tests start at 5 minutes (at least 1 minute)
TimeoutHow long one run may take. Default 10 seconds. Multistep tests have a Run budget for the whole test
CI execution ruleHow the monitor behaves in CI batches: Blocking (a failure fails the batch), Non-blocking (reported only) or Skipped. No effect on scheduled runs
Fast retriesRe-run a failed attempt up to 3 times before recording the result; only the final attempt counts for alerting and uptime. Default 2 retries, 300 ms apart (none for multistep and browser tests)
Active hours24/7, or Only during set hours: a timezone and day/time windows (presets Business hours and Weekends). Outside these hours the monitor does not run, does not alert on missing data and does not count toward uptime

Step 5 — Alerting

FieldDefaultDescription
Failure threshold3Consecutive failed runs before the monitor is Down
Alert only after failing foroffAlso require the failure to last this long
Recovery threshold2Consecutive passing runs before it is Up again
No-data timeout—Alert as No data when no result arrives for this long. 0 disables
Degraded aboveoffA passing run slower than this (ms) makes the monitor Degraded
Re-notify while DOWNNeverRepeat the notification every 5 minutes to 24 hours while down
Stop after … re-notifications0Cap the repeats. 0 repeats until recovery
PriorityNoneP1 to P5, carried on the alert
Notification contentShow everythingHide the type and target, hide @-mentions, or send the message only
Flap detectionoffTreat more than N state changes within M minutes as flapping, and notify once
Notify channelsSettings defaultsKubeSense notification channels to send to
Notification message—Markdown message with {{ }} variables, e.g. {{#is_alert}}…{{/is_alert}}. Preview renders it for a saved monitor

How alerts are created and delivered is described in Alerts & Maintenance.

Step 6 — Review & test

A summary of the monitor (for example Every 1m from 2 locations · 24/7 · alerts after 3 failures to Slack), with an Edit link per section. When editing, Changes lists every field you changed.

Test before saving → Run test runs the monitor once from the API server, without saving. Click Create monitor (or Save changes).

note: Defaults for new monitors (frequency, timeout, retries, locations, labels, thresholds and channels) come from Settings → Defaults & usage.


Editing, Duplicating and Deleting

  • Edit opens the same steps; Skip to review jumps to the summary. Every save records a version in the monitor's History tab, from which an earlier version can be restored.
  • Duplicate opens a copy named Copy of …, with the original's secrets.
  • Pause stops runs and alerts without deleting anything; Resume starts them again.
  • Delete removes the monitor, its results and its outages.

Monitors created from a SyntheticMonitor Kubernetes resource carry a GitOps badge. Change them in the resource; their access follows Kubernetes RBAC.


Import Monitors

Click Create Monitor → Import from YAML, JSON or Terraform, or Import monitors on an empty list.

  1. Upload files (.yaml, .yml, .json, .tf) or paste their content. The format is detected:
    • Kubernetes YAML or JSON — a KubeSense export (kind: SyntheticMonitor);
    • Terraform — kubesense_synthetics_monitor resources;
    • Datadog Terraform — datadog_synthetics_test tests and datadog_synthetics_global_variable variables (the variables are created too).
  2. Choose what happens If a monitor already exists: Report an error, Skip it or Replace it.
  3. Optionally, Copy secrets from an existing monitor, and map Secret placeholders → global variables.
  4. Click Validate. Nothing is written yet: the result lists what would be created, updated or skipped, and any issues.
  5. Click Import.

Imported monitors are managed from the web app and API. To manage monitors as code instead, apply the YAML with kubectl or the Terraform with the KubeSense provider.


Access

Each monitor has an owner. Editors can open Access on a monitor to set what everyone else gets — No access, Viewer or Editor — and to transfer ownership. A viewer can see the monitor and its results but not run, change or delete it.

Roles control the rest: Synthetics (monitors, suites, results, alerts, maintenance windows), Synthetics locations, Synthetics variables and Synthetics settings each have their own read and write permissions (see Role Access). Without write permission, the buttons that change things are disabled, while viewing and exporting still work.