The devhelm.yml file defines your entire monitoring configuration. Deploy it with devhelm deploy -f devhelm.yml.
Minimal example
version : "1"
monitors :
- name : API Health
type : HTTP
config :
url : https://api.example.com/health
frequency : 60
regions : [ us-east ]
Top-level structure
version : "1"
defaults :
monitors :
frequency : 60
enabled : true
regions : [ us-east , eu-west ]
tags :
- ...
environments :
- ...
secrets :
- ...
alertChannels :
- ...
notificationPolicies :
- ...
webhooks :
- ...
resourceGroups :
- ...
monitors :
- ...
dependencies :
- ...
All section keys are camelCase . Every section is optional — include only what you need.
version
The schema version. Currently "1" is the only supported value. The CLI warns on unrecognized versions but does not reject them.
defaults
Set default values that apply to all monitors unless overridden:
defaults :
monitors :
frequency : 60
enabled : true
regions : [ us-east , eu-west ]
alertChannels : [ Slack Alerts ]
incidentPolicy :
confirmation :
type : multi_region
minRegionsFailing : 2
Defaults are applied with shallow per-field merge: if a monitor sets a field, the monitor value wins. Nested objects like incidentPolicy are replaced entirely, not deep-merged.
Resource sections
Each section is detailed on its own page:
Section Key Reference by Docs Tags tagsnameTags & Secrets Environments environmentsslugTags & Secrets Secrets secretskeyTags & Secrets Alert Channels alertChannelsnameAlert Channels Notification Policies notificationPoliciesnameNotification Policies Webhooks webhooksurlTags & Secrets Resource Groups resourceGroupsnameMonitors Monitors monitorsnameMonitors Dependencies dependenciesservice slugTags & Secrets
Cross-references
Resources reference each other by name (or slug), not by ID. The CLI resolves names to IDs at deploy time:
monitors :
- name : API Health
tags : [ production ] # references tag by name
alertChannels : [ Slack Alerts ] # references alert channel by name
environment : staging # references environment by slug
auth :
type : BearerAuthConfig
secret : API_TOKEN # references secret by key
Environment variable interpolation
Use ${VAR} syntax to inject environment variables into any string value:
alertChannels :
- name : Slack Alerts
type : slack
config :
webhookUrl : ${SLACK_WEBHOOK_URL}
With a default fallback:
monitors :
- name : API Health
type : HTTP
config :
url : ${API_URL:-https://api.example.com/health}
Environment variables are resolved before YAML parsing. If a required variable is missing, the CLI exits with an error listing all unresolved variables.
Environment variable interpolation (${VAR}) is different from vault secrets. Variables are resolved from the shell environment at deploy time. Vault secrets are stored in DevHelm and referenced by key in auth blocks.
Multi-file configs
Pass multiple files with -f:
devhelm deploy -f base.yml -f overrides.yml --yes
Or point to a directory (all *.yml and *.yaml files are loaded in sorted order):
devhelm deploy -f config/ --yes
Resources from all files are merged by name. If the same monitor name appears in multiple files, the last file wins.
Full example
version : "1"
defaults :
monitors :
frequency : 60
regions : [ us-east , eu-west ]
tags :
- name : production
color : "#10b981"
- name : api
color : "#3b82f6"
environments :
- name : Production
slug : production
variables :
BASE_URL : https://api.example.com
secrets :
- key : SLACK_WEBHOOK_URL
value : ${SLACK_WEBHOOK_URL}
alertChannels :
- name : Slack Alerts
type : slack
config :
webhookUrl : ${SLACK_WEBHOOK_URL}
- name : PagerDuty On-Call
type : pagerduty
config :
routingKey : ${PAGERDUTY_ROUTING_KEY}
notificationPolicies :
- name : Critical Alerts
enabled : true
priority : 10
matchRules :
- type : tag
values : [ production ]
escalation :
steps :
- channels : [ Slack Alerts ]
delayMinutes : 0
- channels : [ PagerDuty On-Call ]
delayMinutes : 5
requireAck : true
monitors :
- name : API Health
type : HTTP
config :
url : https://api.example.com/health
method : GET
tags : [ production , api ]
alertChannels : [ Slack Alerts ]
assertions :
- type : StatusCodeAssertion
config :
expected : "200"
operator : equals
severity : fail
dependencies :
- service : github
alertSensitivity : INCIDENTS_ONLY
Next steps
Monitors in YAML All monitor types, assertions, and incident policies.
Deploy workflow Validate, plan, and deploy lifecycle.