2.1Choose a monitor type
Start from the question you want answered. Then use the type in the table.
| You want to know… | Use | Dashboard tab |
|---|---|---|
| Is my website or health endpoint up, with the right reply? | URL (2.2) | url |
| Does my API answer correctly, including calls that need a token or password? | API (2.3) | api |
| Does a chain of API calls work end to end, such as log in and then fetch data? | Multi-step API (2.4) | api-multistep |
| Can a user finish a task in a real browser, such as signing in? | Browser (2.5) | browser |
| Did my scheduled job, backup or worker run on time? | Heartbeat (2.6) | heartbeat |
| Are my DNS records right? Are my mail records healthy? Am I on a spam blocklist? | DNS (2.7) | dns |
| Is my TLS certificate valid, and when does it expire? | TLS certificate (2.8) | cert |
| When does my domain registration run out? | Domain expiry (2.9) | domain |
| Does my database, SSH or mail server accept connections? | TCP (2.10) | tcp |
| Does my UDP service, such as DNS, NTP or a game server, reply? | UDP (2.11) | udp |
| Does my server answer ping? | Ping (2.12) | ping |
| Does my gRPC server report itself healthy? | gRPC (2.13) | grpc |
| Does my WebSocket endpoint accept connections and answer? | WebSocket (2.14) | websocket |
Create a monitor in the dashboard#
- In the top bar, select + new monitor. The url tab is selected.
- Select the tab for the type you want. The page title changes, for example to new tcp monitor.
- Fill in the fields. The left column holds the settings most types share. The right side holds the settings for this type.
- Select create monitor →. The dashboard shows field errors only after you press it. Errors from the server appear above the buttons.
- When the monitor is created, its page opens.
To run a check at once, open an existing monitor, select Edit, then select run once now at the bottom of the page. You see queued — the result will appear on its own. The button is disabled on a new form, on a paused monitor, and on a heartbeat monitor. On a new form it shows Create the monitor first — there is nothing to run yet. The heartbeat form shows send test ping instead.
Settings most types share#
These fields are in the left column of the form. Each type page below says which of them it has.
| Dashboard field | Default | Limits and notes |
|---|---|---|
| name | Empty | Required. Up to 200 characters, on one line. |
| check interval | 60 seconds | At least 1 second. Your plan's minimum interval still applies: below it the form shows Your plan checks at most every N seconds. |
| timeout | 10 seconds | In seconds. A value above 60 seconds counts as 60 seconds. |
| locations | None (runs from us-west) | Choose from the regions shown. The check runs from each one you pick. |
| on failure — notify | None (all team channels) | Pick channels to limit who is alerted. Shown only when your team has channels. |
- The check interval is how often the check runs. Choose
seconds,minutesorhours. The form shows your plan's minimum, for exampleYour plan: every 30s or slower. If your plan's minimum is higher than 60 seconds, the form starts at that minimum. - The timeout is how long one check may wait for an answer.
- A location is a region the check runs from.
- An alert channel is a place alerts go, such as email or Slack. You create channels on the alerting pages (chapter 10).
Results: up, degraded, down#
- Up: the check passed.
- Degraded: the check passed, but something needs attention. For most types this means the check was slower than your slow limit. You set the slow limit (degraded when slower than (ms)) on the monitor's edit page (chapter 3). The message reads
slow: took Nms, the limit is Mms. - Down: the check failed. The message says why.
- Could not run: the check learned nothing about your target. A fixed sentence explains it. It is not counted in uptime or alerts.
Alerts for new monitors start on your team's default alert policy. You can change the policy on the edit page (chapters 3 and 9).
Plan rules#
- API, multi-step API and browser monitors need a plan that includes them. All other types are on every plan.
- If your plan does not include a type, its tab shows a notice instead of the form. You can upgrade, or select use a URL check instead.
- Your plan's minimum check interval applies to every type.
- Your plan sets how many monitors you can have. Browser monitors also have their own limit. At the limit, a banner says new checks are blocked until you upgrade or remove one.
Through the API, these cases fail with failed_precondition. Examples: plan does not allow this monitor type: API monitors require Pro or Business and monitor quota exceeded: N/M monitors used on the current plan. A too-short interval also starts with plan does not allow this monitor type, then names the interval.
Create monitors through the API#
Every create call is a POST with a JSON body. Field names use camelCase. Send your API key as a bearer token (chapter 13).
API=https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService
curl -s "$API/CreateUrlMonitor" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "checkout", "url": "https://example.com/health",
"method": "GET", "intervalSeconds": 60}'| Type | Create method |
|---|---|
| URL | CreateUrlMonitor |
| API and multi-step API | CreateApiMonitor |
| Browser | CreateBrowserMonitor |
| Heartbeat | CreateHeartbeatMonitor |
| DNS | CreateDnsMonitor |
| TLS certificate | CreateCertMonitor |
| Domain expiry | CreateDomainMonitor |
| TCP, UDP, ping | CreateTcpMonitor, CreateUdpMonitor, CreatePingMonitor |
| gRPC | CreateGrpcMonitor |
| WebSocket | CreateWebsocketMonitor |
intervalSecondsis required for every type except domain and a cron heartbeat. Without it you getinterval_seconds must be > 0.- If you leave out
timeoutMsor send 0, a default for the type applies. - If you leave out
locations, the check runs fromus-west.ListRegionsreturns the regions you can use. - If you leave out
alertChannelIds, all of your team's channels are attached. - A request body (
body) and a UDPpayloadare sent in base64. Base64 is a way to write any bytes as plain text. - Invalid input fails with
invalid_argumentand the messageinvalid input: <reason>. - Limits on save: up to 50 headers, 50 assertions and 50 steps (and 50 headers and assertions in each step). A URL is up to 8,192 bytes. A
matchespattern is up to 1,024 characters. The whole monitor is up to 900 KiB. TriggerNowwith{"monitorId": "<id>"}runs a check now. You can call it once every 30 seconds per monitor.