monitors section of devhelm.yml defines your monitoring checks. Each monitor specifies a type, configuration, assertions, and scheduling.
Monitor fields
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Unique monitor name |
type | string | Yes | HTTP, DNS, TCP, ICMP, HEARTBEAT, MCP_SERVER |
config | object | Yes | Type-specific configuration (see below) |
frequency | integer | — | Check frequency in seconds (30–86400) |
enabled | boolean | — | Whether the monitor runs checks (default: true) |
regions | string[] | — | Probe regions (e.g., us-east, eu-west) |
environment | string | — | Environment slug for variable substitution |
tags | string[] | — | Tag names to attach |
alertChannels | string[] | — | Alert channel names to notify on incidents |
assertions | object[] | — | Pass/fail criteria (see below) |
auth | object | — | Authentication configuration (see below) |
incidentPolicy | object | — | Trigger, confirmation, and recovery rules |
Monitor types
HTTP
| Config field | Type | Required | Description |
|---|---|---|---|
url | string | Yes | Target URL to check |
method | string | — | HTTP method: GET, POST, PUT, PATCH, DELETE, HEAD |
verifyTls | boolean | — | Validate TLS certificate (default: true) |
customHeaders | map | — | Custom request headers |
requestBody | string | — | Request body for POST/PUT/PATCH |
contentType | string | — | Content-Type header value |
DNS
| Config field | Type | Required | Description |
|---|---|---|---|
hostname | string | Yes | Domain name to resolve |
recordTypes | string[] | — | DNS record types to query |
nameservers | string[] | — | Custom nameservers |
timeoutMs | integer | — | Query timeout in milliseconds |
totalTimeoutMs | integer | — | Total timeout across retries |
TCP
| Config field | Type | Required | Description |
|---|---|---|---|
host | string | Yes | Target hostname or IP |
port | integer | — | TCP port (1–65535) |
timeoutMs | integer | — | Connection timeout in milliseconds |
ICMP
| Config field | Type | Required | Description |
|---|---|---|---|
host | string | Yes | Target hostname or IP |
packetCount | integer | — | Number of ICMP packets to send |
timeoutMs | integer | — | Timeout in milliseconds |
Heartbeat
| Config field | Type | Required | Description |
|---|---|---|---|
expectedInterval | integer | — | Expected ping interval in seconds |
gracePeriod | integer | — | Grace period before marking as missed |
MCP Server
| Config field | Type | Required | Description |
|---|---|---|---|
command | string | Yes | Command to launch the MCP server |
args | string[] | — | Command arguments |
env | map | — | Environment variables |
Assertions
Assertions define pass/fail criteria for each check:| Field | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Assertion type name |
config | object | — | Type-specific assertion config |
severity | string | — | fail or warn (default: fail) |
StatusCodeAssertion, ResponseTimeAssertion, HeaderAssertion, BodyContainsAssertion, and JsonPathAssertion.
Authentication
For monitors that need to authenticate against protected endpoints:| Auth type | Fields | Description |
|---|---|---|
BearerAuthConfig | secret | Bearer token from vault secret |
BasicAuthConfig | secret | Base64 username:password from vault secret |
ApiKeyAuthConfig | headerName, secret | Custom header with API key |
HeaderAuthConfig | headerName, secret | Custom header with arbitrary value |
secret field references a key from the secrets section or vault.
Incident policy
Control when incidents are created, confirmed, and resolved:Trigger rules
| Field | Type | Description |
|---|---|---|
type | string | consecutive_failures, failures_in_window, or response_time |
severity | string | down or degraded |
scope | string | per_region or any_region |
count | integer | Failure count threshold |
windowMinutes | integer | Time window for failures_in_window |
thresholdMs | integer | Response time threshold for response_time |
aggregationType | string | all_exceed, average, p95, max |
Confirmation
| Field | Type | Description |
|---|---|---|
type | string | multi_region |
minRegionsFailing | integer | Minimum failing regions to confirm |
maxWaitSeconds | integer | Maximum time to wait for confirmation |
Recovery
| Field | Type | Description |
|---|---|---|
consecutiveSuccesses | integer | Consecutive passing checks to recover |
minRegionsPassing | integer | Minimum passing regions to recover |
cooldownMinutes | integer | Delay before auto-resolving |
Resource groups
Group monitors into composite health views:| Field | Type | Description |
|---|---|---|
name | string | Resource group name |
description | string | Human-readable description |
alertPolicy | string | Notification policy name for group alerts |
defaultFrequency | integer | Default check frequency for members |
defaultRegions | string[] | Default probe regions for members |
defaultAlertChannels | string[] | Default alert channel names |
defaultEnvironment | string | Default environment slug |
healthThresholdType | string | COUNT or PERCENTAGE |
healthThresholdValue | number | Threshold value |
suppressMemberAlerts | boolean | Suppress individual member alerts |
confirmationDelaySeconds | integer | Delay before confirming group incident |
recoveryCooldownMinutes | integer | Delay before auto-resolving |
monitors | string[] | Monitor names in this group |
services | string[] | Dependency service slugs in this group |
Next steps
Alert channels
Configure notification channels in YAML.
Tags and secrets
Tags, secrets, and environment variables.