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
| Field | Description | Default |
|---|
url | Target URL | (required) |
method | HTTP method: GET, POST, PUT, PATCH, DELETE, HEAD | GET |
customHeaders | Additional headers as key-value pairs | — |
requestBody | Body content for POST/PUT/PATCH | — |
contentType | Content-Type header value | — |
verifyTls | Validate TLS certificates | true |
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:
| Field | Description |
|---|
hostname | Domain to resolve |
recordTypes | A, AAAA, CNAME, MX, NS, TXT, SRV, SOA, CAA, PTR |
nameservers | Custom nameservers (uses system defaults if omitted) |
timeoutMs | Per-query timeout |
totalTimeoutMs | Total 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.