URL Monitors
Monitor HTTP/HTTPS endpoints for availability, response time, and content validation.
URL Monitors
URL monitors check HTTP/HTTPS endpoints for availability and validate responses. Perfect for monitoring websites, APIs, and health check endpoints.
Creating a URL Monitor
Basic Configuration
Name: Production API Health
URL: https://api.example.com/health
Method: GET
Interval: 1 minuteRequest Configuration
| Field | Description | Example |
|---|---|---|
| URL | Full URL to check | https://api.example.com/health |
| Method | HTTP method | GET, POST, PUT, DELETE, HEAD |
| Headers | Custom request headers | Authorization: Bearer token |
| Body | Request body (POST/PUT) | {"key": "value"} |
| Timeout | Max wait time | 30 seconds |
Assertions
Define what constitutes a successful response:
Status Code
Assertion:
Type: status_code
Operator: equals
Value: 200Operators:
equals- Exact matchnot_equals- Not equal toless_than- Less than valuegreater_than- Greater than valuein- One of values (e.g.,[200, 201, 204])
Response Time
Assertion:
Type: response_time
Operator: less_than
Value: 2000 # millisecondsBody Contains
Assertion:
Type: body_contains
Value: "status": "healthy"For case-insensitive matching:
Assertion:
Type: body_contains
Value: healthy
Case Sensitive: falseBody Regex
Assertion:
Type: body_regex
Pattern: "version":\s*"\d+\.\d+\.\d+"JSON Path
Extract and validate JSON values:
Assertion:
Type: json_path
Path: $.status
Operator: equals
Value: "ok"Common JSON path expressions:
| Path | Description |
|---|---|
$.status | Root-level property |
$.data.items[0].id | Nested array element |
$.data.items.length | Array length |
$.users[*].email | All emails in array |
Header Contains
Assertion:
Type: header_contains
Header: Content-Type
Value: application/jsonSSL Certificate
Assertion:
Type: ssl_expiry
Operator: greater_than
Value: 30 # days until expirationAdvanced Configuration
Custom Headers
Add headers to requests:
Headers:
Authorization: Bearer {{API_TOKEN}}
Content-Type: application/json
X-Custom-Header: custom-valueRequest Body
For POST/PUT requests:
Method: POST
Body:
Type: json
Content: |
{
"query": "health_check",
"timestamp": "{{timestamp}}"
}Or form data:
Body:
Type: form
Content:
username: testuser
action: checkAuthentication
Basic Auth
Authentication:
Type: basic
Username: {{USERNAME}}
Password: {{PASSWORD}}Bearer Token
Headers:
Authorization: Bearer {{API_TOKEN}}API Key
Headers:
X-API-Key: {{API_KEY}}Follow Redirects
Follow Redirects: true
Max Redirects: 5By default, URL monitors follow up to 5 redirects. Set Follow Redirects: false to fail on any redirect.
Response Metrics
Each run captures:
| Metric | Description |
|---|---|
| Response Time | Total request duration |
| DNS Time | DNS lookup duration |
| Connect Time | TCP connection time |
| TLS Time | TLS handshake duration |
| First Byte | Time to first byte (TTFB) |
| Download Time | Response body download time |
| Status Code | HTTP response status |
| Response Size | Body size in bytes |
SSL/TLS Monitoring
Monitor certificate health:
SSL Monitoring:
Enabled: true
Alert Before Expiry: 30 days
Verify Chain: true
Check Revocation: trueCertificate Details Captured
- Issuer
- Subject
- Valid from/to dates
- Days until expiration
- Chain validity
- Cipher suite
Examples
Health Check Endpoint
Name: API Health Check
URL: https://api.example.com/health
Method: GET
Interval: 1 minute
Assertions:
- type: status_code
equals: 200
- type: response_time
less_than: 1000
- type: json_path
path: $.status
equals: "healthy"Authenticated API
Name: User API Check
URL: https://api.example.com/v1/users/me
Method: GET
Headers:
Authorization: Bearer {{API_TOKEN}}
Assertions:
- type: status_code
equals: 200
- type: json_path
path: $.data.id
exists: trueForm Submission
Name: Contact Form
URL: https://example.com/api/contact
Method: POST
Headers:
Content-Type: application/x-www-form-urlencoded
Body:
name: Test User
email: [email protected]
message: Health check
Assertions:
- type: status_code
in: [200, 201]GraphQL Query
Name: GraphQL API
URL: https://api.example.com/graphql
Method: POST
Headers:
Content-Type: application/json
Body: |
{
"query": "{ health { status version } }"
}
Assertions:
- type: status_code
equals: 200
- type: json_path
path: $.data.health.status
equals: "ok"Troubleshooting
Timeout Errors
Problem: Monitor times out frequently.
Solutions:
- Increase timeout value
- Check network latency from test location
- Verify server response time
- Check for firewall blocking
SSL Certificate Errors
Problem: SSL verification failing.
Solutions:
- Verify certificate is valid
- Check certificate chain is complete
- Ensure intermediate certificates are installed
- Check for expired certificates
Inconsistent Results
Problem: Monitor alternates between success and failure.
Solutions:
- Check for load balancer issues
- Verify all backend servers are healthy
- Look for rate limiting
- Check for geographic restrictions
Run the same monitor from multiple locations to identify region-specific issues.