Monitors
Monitor configuration
Pick a type, point it at a target, write conditions. Shared fields are the same for every type. The request options change with the type.
Shared fields
These apply to every monitor. Type-specific fields (method, DNS query, connection URL, heartbeat URLs) are on each type page. In Terraform the resource is nominal_monitor; group is deprecated, use tags.
| Field | What it does |
|---|---|
name | Shown in the admin, alerts, badges, and status pages. |
description | Optional notes: who owns it, what to do when it fails. |
tags | Labels for filtering in the admin and GraphQL (monitors(tag: "api")). |
enabled | Disabled monitors are not dispatched. |
interval_seconds | How often to check. Minimum 10s, or 300s (5m) if a [DOMAIN_EXPIRATION] condition is present. |
timeout_seconds | How long the probe waits. Outbound checks only. |
ip_family | Any, Ipv4, or Ipv6. Outbound checks only. |
retention_days | How long raw check results are kept. Aggregates stay for uptime and latency badges. |
probes | Which regions run the check. Each probe has a queue such as checks.us-east. Terraform: probe_ids (omit to attach default probes). |
notificationChannels | Where alerts go. Thresholds live on the monitor–channel link. Terraform: channel_ids on nominal_monitor. |
How a check is judged
Outbound monitors need at least one condition in the admin. Every listed expression must pass. If you create a monitor through GraphQL with no conditions, Nominal treats it as healthy when the probe connected — and, for HTTP, when the status is below 400.
Heartbeats have no conditions. Success is “a ping arrived within the interval,” or “the job that called /start finished in time.”
Types
HTTP
Request a URL. Assert status, body, timing, and certificate expiry.
GraphQL
POST a GraphQL document. Same headers, TLS, redirects, and conditions as HTTP.
Ping
ICMP echo. If the network blocks ping, the probe tries TCP 443 then 80.
TCP
Dial a host and port. Optionally write a payload after connect.
DNS
Query a named resolver. Assert the rcode and the first answer.
TLS
Handshake a TLS listener that is not HTTP. Certificate expiry included.
Heartbeat
Your jobs ping a unique URL. Missed pings fail. Hung starts fail too.
UDP
Send a datagram to a host and port. The reply, if you asked for one, is `[BODY]`.
WebSocket
Dial ws:// or wss://, complete the upgrade, then optionally exchange a text frame.
MySQL
Log in with a connection URL, then run a version/status query or your SQL.
Redis
Log in with a connection URL, then PING / INFO / DBSIZE or a command you supply.
PostgreSQL
Log in with a connection URL, then list public tables or run your SQL.