Uptime Monitoring

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 minute

Request Configuration

FieldDescriptionExample
URLFull URL to checkhttps://api.example.com/health
MethodHTTP methodGET, POST, PUT, DELETE, HEAD
HeadersCustom request headersAuthorization: Bearer token
BodyRequest body (POST/PUT){"key": "value"}
TimeoutMax wait time30 seconds

Assertions

Define what constitutes a successful response:

Status Code

Assertion:
  Type: status_code
  Operator: equals
  Value: 200

Operators:

  • equals - Exact match
  • not_equals - Not equal to
  • less_than - Less than value
  • greater_than - Greater than value
  • in - One of values (e.g., [200, 201, 204])

Response Time

Assertion:
  Type: response_time
  Operator: less_than
  Value: 2000  # milliseconds

Body Contains

Assertion:
  Type: body_contains
  Value: "status": "healthy"

For case-insensitive matching:

Assertion:
  Type: body_contains
  Value: healthy
  Case Sensitive: false

Body 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:

PathDescription
$.statusRoot-level property
$.data.items[0].idNested array element
$.data.items.lengthArray length
$.users[*].emailAll emails in array

Header Contains

Assertion:
  Type: header_contains
  Header: Content-Type
  Value: application/json

SSL Certificate

Assertion:
  Type: ssl_expiry
  Operator: greater_than
  Value: 30  # days until expiration

Advanced Configuration

Custom Headers

Add headers to requests:

Headers:
  Authorization: Bearer {{API_TOKEN}}
  Content-Type: application/json
  X-Custom-Header: custom-value

Request 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: check

Authentication

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: 5

By default, URL monitors follow up to 5 redirects. Set Follow Redirects: false to fail on any redirect.

Response Metrics

Each run captures:

MetricDescription
Response TimeTotal request duration
DNS TimeDNS lookup duration
Connect TimeTCP connection time
TLS TimeTLS handshake duration
First ByteTime to first byte (TTFB)
Download TimeResponse body download time
Status CodeHTTP response status
Response SizeBody size in bytes

SSL/TLS Monitoring

Monitor certificate health:

SSL Monitoring:
  Enabled: true
  Alert Before Expiry: 30 days
  Verify Chain: true
  Check Revocation: true

Certificate 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: true

Form 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.