Monitors
HTTP monitors
Check a URL for the status code, content, and response time you expect, with the full timing waterfall.
HTTP monitors are the workhorse. They request a URL from each selected region, measure every phase of the request, and verify the response against your expectations.
What is measured
Section titled “What is measured”Every check records a timing waterfall in milliseconds:
| Phase | What it covers |
|---|---|
| DNS | Resolving the hostname (0 for IP targets) |
| TCP | Establishing the connection |
| TLS | The TLS handshake (0 for plain http://) |
| First byte | From request sent to first byte of the response |
| Download | Reading the rest of the body |
| Total | Wall-clock time for the whole check, including any redirects |
When redirects are followed, the DNS/TCP/TLS phases describe the first hop and Total covers the whole chain. The number of redirects and the final URL are stored with each check.
HTTPS targets also record the certificate’s expiry date on every check, so you get expiry warnings without a separate SSL monitor.
Options
Section titled “Options”Method. GET, HEAD, POST, PUT, PATCH, DELETE, or OPTIONS. The default is HEAD, which is upgraded to GET automatically when you add a content assertion (a HEAD response has no body).
Expected status. Which status codes count as up. Accepts an exact code (200), a class (2xx, the default), or a range (200-299, 1xx-3xx). Anything else marks the check as failed with the reason Unexpected status, and the response body (up to 64 KB) is captured so you can see why.
Follow redirects. On by default, following up to 10 hops. Turn it off to assert on a redirect itself, for example that http:// sends a 301 to https://.
Headers and body. Add request headers (an Authorization header for an authenticated health endpoint, an Accept header, a custom User-Agent) and, for write methods, a request body. Content-Type is only sent if you set it. Secrets in headers are stored encrypted and never appear in logs or alerts.
Keyword. The simplest content check: the body must contain this string. A missing keyword fails the check with Assertion failed.
Assertion. A structured check on the response: choose the target (body, a named header, or status), an operator (contains, not contains, equals, regex), and a value. A bad regular expression fails the assertion rather than the monitor.
Timeout. Default 10 seconds. A check that exceeds it is recorded as a timeout, a distinct failure reason from a connection error.
Failure reasons
Section titled “Failure reasons”StatusCheck records why a check failed, and that reason is shown in alerts and on the incident timeline.
| Reason | Meaning |
|---|---|
| Timeout | The check exceeded its timeout. |
| Unexpected status | The status code didn’t match Expected status. |
| Assertion failed | The keyword or assertion didn’t match. |
| Name not resolved | DNS returned no address for the hostname. |
| Connection refused | The host actively refused the connection. |
| Certificate expired | The TLS certificate’s validity period has ended. |
| Certificate not trusted | The chain doesn’t lead to a trusted root, or the hostname doesn’t match. |
- Point monitors at a health endpoint that exercises dependencies (database, cache) rather than a static page, and assert on its body.
{"status":"ok"}with acontainsassertion is a fine start. - Use a dedicated
User-Agentheader such asStatusCheck/1.0 (+https://statuscheck.io)so you can exclude probe traffic from analytics. StatusCheck sends this by default. - Keep intervals short on the endpoints customers notice first and longer on internal tooling.