Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.devhelm.io/llms.txt

Use this file to discover all available pages before exploring further.

This guide walks you through creating monitors for each supported type. For conceptual background, see Monitoring overview.

HTTP monitors

The most common monitor type. Checks a URL and evaluates response status, body, headers, and timing.
devhelm monitors create \
  --name "API Health" \
  --type HTTP \
  --url https://api.example.com/health \
  --frequency 60 \
  --regions us-east,eu-west

HTTP config options

FieldDescriptionDefault
urlTarget URL(required)
methodHTTP method: GET, POST, PUT, PATCH, DELETE, HEADGET
customHeadersAdditional headers as key-value pairs
requestBodyBody content for POST/PUT/PATCH
contentTypeContent-Type header value
verifyTlsValidate TLS certificatestrue

Adding assertions

Assertions define pass/fail criteria beyond “did the request succeed”:
monitors:
  - name: API Health
    type: HTTP
    config:
      url: https://api.example.com/health
    frequencySeconds: 60
    regions:
      - us-east
    assertions:
      - config:
          type: status_code
          expected: "200"
          operator: equals
        severity: fail
      - config:
          type: response_time
          thresholdMs: 2000
        severity: fail
      - config:
          type: response_time_warn
          warnMs: 500
        severity: warn
      - config:
          type: ssl_expiry
          minDaysRemaining: 14
        severity: fail

Authenticated requests

For endpoints that require authentication, store credentials in the Vault and reference them:
monitors:
  - name: Private API
    type: HTTP
    config:
      url: https://api.example.com/private/health
    auth:
      type: bearer
      vaultSecretId: "your-vault-secret-id"
    frequencySeconds: 60
    regions:
      - us-east
Supported auth types: bearer, basic, header, api_key.

TCP monitors

Check that a host is accepting connections on a specific port.
devhelm monitors create \
  --name "Database Port" \
  --type TCP \
  --host db.example.com \
  --port 5432 \
  --frequency 60 \
  --regions us-east

DNS monitors

Verify domain name resolution and record values.
monitors:
  - name: DNS Resolution
    type: DNS
    config:
      hostname: example.com
      recordTypes:
        - A
        - AAAA
    frequencySeconds: 300
    regions:
      - us-east
    assertions:
      - config:
          type: dns_resolves
        severity: fail
      - config:
          type: dns_expected_ips
          ips:
            - "93.184.216.34"
        severity: fail
DNS config supports custom nameservers and timeouts:
FieldDescription
hostnameDomain to resolve
recordTypesA, AAAA, CNAME, MX, NS, TXT, SRV, SOA, CAA, PTR
nameserversCustom nameservers (uses system defaults if omitted)
timeoutMsPer-query timeout
totalTimeoutMsTotal timeout for all queries

ICMP monitors

Ping a host to check reachability and measure latency.
monitors:
  - name: Server Ping
    type: ICMP
    config:
      host: server.example.com
      packetCount: 5
      timeoutMs: 3000
    frequencySeconds: 60
    regions:
      - us-east
    assertions:
      - config:
          type: icmp_reachable
        severity: fail
      - config:
          type: icmp_packet_loss
          maxPercent: 10
        severity: warn

MCP Server monitors

Check that an MCP (Model Context Protocol) server starts and responds correctly. Useful for monitoring AI tool servers.
monitors:
  - name: My MCP Server
    type: MCP_SERVER
    config:
      command: npx
      args:
        - "@my-org/mcp-server"
      env:
        API_KEY: ${MCP_API_KEY}
    frequencySeconds: 300
    regions:
      - us-east
    assertions:
      - config:
          type: mcp_connects
        severity: fail
      - config:
          type: mcp_tool_available
          toolName: search
        severity: fail

Heartbeat monitors

Passive monitors — your service pings DevHelm instead of DevHelm checking your service. Ideal for cron jobs, background workers, and batch processes.
monitors:
  - name: Nightly Backup
    type: HEARTBEAT
    config:
      expectedInterval: 86400
      gracePeriod: 3600
    frequencySeconds: 86400
After creating a heartbeat monitor, you’ll receive a ping endpoint URL. Send a request to it from your job:
curl -X POST https://api.devhelm.io/api/v1/heartbeat/<token>
Heartbeat monitors cannot have probe regions — they rely on incoming pings from your infrastructure.

Customizing incident policies

Override the default incident policy per monitor:
monitors:
  - name: API Health
    type: HTTP
    config:
      url: https://api.example.com/health
    frequencySeconds: 60
    regions:
      - us-east
      - eu-west
      - ap-south
    incidentPolicy:
      triggerRules:
        - type: consecutive_failures
          count: 3
          scope: per_region
          severity: down
        - type: response_time
          thresholdMs: 5000
          aggregationType: p95
          severity: degraded
      confirmation:
        type: multi_region
        minRegionsFailing: 2
        maxWaitSeconds: 120
      recovery:
        consecutiveSuccesses: 3
        minRegionsPassing: 2
        cooldownMinutes: 10

Next steps

Alerting guide

Route monitor incidents to your team.

Monitoring as Code

Manage monitors in YAML and deploy from CI.