Check Types
Pick the check type in the first step of the monitor editor. This page lists what each type tests, its settings (the Request step) and what it can assert (the Assertions step).
| Type | Target | Tests |
|---|---|---|
| HTTP | URL | A web page or API endpoint |
| TCP | Host | A port is open (or closed), optionally with TLS and a request/response exchange |
| DNS | Domain | Name resolution and record contents |
| SSL | Host | A TLS certificate's validity and expiry |
| gRPC | Host | gRPC health, or a unary call |
| ICMP | Host or IP | Ping reachability, latency and packet loss |
| WebSocket | URL | A WebSocket handshake and message exchange |
| UDP | Host or IP | A UDP service replies |
| Multistep API | Informational | A chain of requests that pass values to each other |
| Browser test | Informational | A user journey in a real browser |
| MCP server | MCP endpoint | A Model Context Protocol server answers and lists its tools |
| Network path | Host | The route to a host: hops, latency, loss and jitter |
| Kubernetes | Resource name | The health of a Kubernetes resource |
HTTP
| Setting | Description |
|---|---|
| Method | GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS |
| HTTP version | HTTP/1.1 or HTTP/2 |
| Valid status codes | Codes or ranges that count as success. Default 200-299, e.g. 200, 204, 300-399 |
| Headers | Request headers |
| Body | raw, json, xml, form, multipart (with file parts), graphql (Query, Variables, Operation name) or none |
| Authentication | None, basic, digest, NTLM, bearer, OAuth2 client credentials, OAuth2 password, AWS SigV4, or a signed JWT |
| Client certificate (mTLS) | Certificate and key presented to the server |
| Advanced | Query parameters, cookies, Follow redirects (on) and Max redirects (0–10), proxy URL and headers, IP version, certificate revocation (OCSP), self-signed certificates, trace headers and the identification header |
| Advanced TLS | Server name (SNI), CA certificate, skip verification |
Assertions: Status code, Response time (ms), Body (raw, JSONPath, XPath or JSON Schema), Header, Body hash (SHA256, SHA1, MD5), Body size (bytes), Certificate (expiry in days, issuer, subject, SAN, TLS version) and JavaScript.
Each request carries a W3C traceparent header, so a run links to its backend trace in KubeSense when the service is traced, and an X-Kubesense-Synthetics header with the monitor id, so you can recognise synthetic traffic in your logs.
TCP
| Setting | Description |
|---|---|
| Port | 1–65535 |
| Use TLS | Open a TLS session after connecting |
| Expectation | The port is open, or closed (passes when the connection is refused) |
| Send / expect steps | Optional exchange, e.g. send PING\r\n and expect PONG (substring or regex), each with a timeout |
| Track network hops | Measure the hop count to the target |
Assertions: Connection (established, refused, timeout), Received data, Response time, Network hops, Certificate and JavaScript.
DNS
| Setting | Description |
|---|---|
| Record type | A, AAAA, CNAME, MX, NS, PTR, SOA, SRV, TXT, CAA |
| Transport | UDP, TCP, DNS-over-TLS or DNS-over-HTTPS (with DoH URL and method) |
| Resolver IP / Resolver port | The resolver to ask. Empty uses the agent's resolvers |
| Recursion desired, DNSSEC (DO bit) | Query flags |
| Valid rcodes | Response codes that count as success. Default NOERROR |
| Answer matches / Answer must not match | Regular expressions on the answer |
Assertions: Every record, At least one record, Answer count, Authenticated data (with DNSSEC), Response time and JavaScript.
SSL
| Setting | Description |
|---|---|
| Protocol | Direct TLS, or STARTTLS for SMTP, IMAP, POP3 or FTP |
| Port | Default 443 |
| SNI server name | Server name sent in the handshake |
| Warn when expiring within (days) | Default 30 |
| Critical when expiring within (days) | Default 7. Must not be more than the warning days |
| Check revocation (OCSP), Fail on incomplete chain, Fetch missing intermediates (AIA), Skip chain verification | Chain checks |
| Client certificate (mTLS), CA bundle (PEM) | Client certificate, and extra CAs to trust |
Assertions: Certificate properties (expiry in days, issuer, subject, SAN, TLS version) and Response time.
When the certificate enters the warning or critical window, the monitor raises an SSL expiry alert and is listed in SSL expiring soon on the Overview; the check still passes. An expired or invalid certificate fails the check.
gRPC
| Setting | Description |
|---|---|
| Mode | Health check (the standard gRPC health service) or Behavior (unary call) |
| Port | Default 50051 |
| Service | Service name to check or call |
| Method / Request message (JSON) | For a unary call. Upload a descriptor set if the server has no reflection |
| Metadata, :authority, Use TLS | Request metadata and transport |
Assertions: Health status, gRPC status, Response message, Metadata / trailer, Response time, Certificate and JavaScript.
ICMP
| Setting | Description |
|---|---|
| Echo requests | 1–20, default 3 |
| Payload size (bytes) | Default 56 |
| IP version | IPv4 or IPv6 |
| Track network hops | Measure the hop count |
Assertions: Packet loss (%), Packets received, Latency (ms, average, min, max or jitter) and Network hops.
The agent needs the NET_RAW capability (see Locations & Agents).
WebSocket
Target is a ws:// or wss:// URL.
| Setting | Description |
|---|---|
| Message | Message sent after the handshake (up to 64 KiB) |
| Headers, Subprotocols, Cookies | Handshake options |
| Basic auth user / password, Client certificate (mTLS) | Authentication |
Assertions: Received message, Header, Response time, Certificate and JavaScript.
UDP
| Setting | Description |
|---|---|
| Port | Default 53 |
| Payload | Text (UTF-8) or Binary (base64) |
| Datagram | The datagram sent (up to 8 KiB) |
Assertions: Received message, Response time and JavaScript.
Multistep API
A chain of steps run in order, where later steps use values extracted from earlier ones — for example, log in, then call an API with the token.
- Add step adds a step of type HTTP, gRPC, SSL, DNS, TCP, UDP, WebSocket, ICMP, MCP, Wait or Subtest (play another multistep monitor, with overrides). Up to 10 steps by default.
- Each step has its own settings and Assertions, a Step timeout, Step retries, and execution options: Allow failure, Critical, Exit if succeeded and Always execute.
- Extract variables takes a value from a step's response (a header, the body with a regex, JSONPath or XPath, the status code, and so on) into a variable used by later steps as
{{ NAME }}. Mark it Secure to mask it in results. Extract from script does the same with JavaScript. - Share cookies between steps keeps one cookie jar for the whole run.
- The Run budget in the schedule step limits the whole test (up to 30 minutes).
Browser Test
A user journey in headless Chromium. It needs a browser agent in at least one of the monitor's locations (see Deployment and Locations & Agents).
| Setting | Description |
|---|---|
| Start URL | Opened before the first step |
| Device | Laptop (large), Tablet, Mobile (small) or Custom (size, pixel ratio, touch, user agent) |
| Options | Headers, cookies, HTTP authentication, blocked requests (URL patterns), proxy, default step timeout, locale, timezone, screenshots, bypass Content-Security-Policy, ignore certificate errors |
Steps (up to 50):
| Group | Steps |
|---|---|
| Actions | Go to URL, Click, Type text, Select option, Press key, Hover, Scroll, Drag, Drop, Upload files, Wait, Refresh |
| Assertions | Element is present, Element content, Element attribute, Page contains text, Page lacks text, Current URL, JavaScript assertion, Assert requests, Assert file download |
| Special | Extract variable, Play subtest, HTTP request (API test) |
- Elements are found by CSS selector, or XPath with the
xpath=prefix, with up to 5 alternatives per step. - Import from recorder loads steps recorded with the browser recorder extension.
- Test the journey → Run test runs the journey once while you build it.
- Each run records a screenshot per step, the console, network requests and Web Vitals. See Monitor Details & Runs.
- Plan about 1 vCPU and 1 GiB on the browser agent per test running at the same time.
MCP Server
Checks a Model Context Protocol server over Streamable HTTP.
| Setting | Description |
|---|---|
| Call type | Initialize only, List tools, or Call a tool (with Tool name and Tool arguments as JSON) |
| Advanced | Protocol version, per-request timeout, headers, authentication and mTLS |
Assertions: Follows the MCP specification, Server capabilities, Tool count, Longest tool name, MCP response, Response time and Certificate. Presets adds a common set in one click.
Network Path
Traces the route to a host, like traceroute, and measures end-to-end latency and loss.
| Setting | Description |
|---|---|
| Protocol | TCP, UDP or ICMP |
| Port | Default 443 |
| Max TTL | 1–64, default 30 |
| Traceroute queries / End-to-end queries | Probes per hop (default 3) / end-to-end probes (default 50) |
| TCP method | SYN or Prefer SACK |
| Reverse DNS | Name the routers. Default on |
Assertions: Latency, Packet loss, Jitter and Network hops. The run shows a hop table with each router's address, name, round-trip time and loss.
TCP paths run without extra privileges. UDP and ICMP paths, and router names, need networkPath.rawSocket=true on the agent.
Kubernetes
Checks the health of a resource in the cluster where the agent runs. It needs an agent installed with the synthetics-agent chart and k8sChecks=true; the in-cluster agents of the KubeSense chart do not run it.
| Setting | Description |
|---|---|
| Check | Pod readiness, Deployment health, StatefulSet health, Node health, PVC bound, Job completion, Ingress, or a custom resource condition |
| Namespace and labels | Which resources to check |
| Min ready replicas / Min ready percent / Min ready endpoints | Health thresholds |
| Custom resource | API group, version, resource (plural), cluster-scoped, Condition type (default Ready) and Expected status (default True). The agent must be allowed to read the resource (k8sCustomResources) |
Kubernetes checks have no separate assertions: the check itself passes or fails.
JavaScript Assertions
HTTP, TCP, DNS, gRPC, WebSocket and UDP monitors (and those multistep steps) accept a JavaScript assertion. It passes unless the script throws or returns false:
dd.expect(dd.response.statusCode).to.equal(200);
dd.expect(dd.response.bodyJSON.items.length).to.be.above(0);dd.response holds the status code, headers, body and timings; dd.variables holds the monitor's variables (secure values masked). Scripts run in a sandbox without network access, with a short CPU limit.