THE FIELD GUIDEMonitoring protocols HTTP, TCP, UDP, DNS, ICMP, SMTP, IMAP, gRPC, WebSocket and TLS check configuration.
Project source · da59007Updated 2026-10-17 Define each monitored target as a Soul. The protocol selects the checker; the target, interval, timeout and assertions decide what a healthy result means.
Souls (Monitored Targets)
Root souls Array
Each soul represents a monitored target.
Field Type Default Required Description namestring - Yes Human-readable name typestring - Yes Check type (see below) targetstring - Yes Target URL/host weightduration 60sNo Check interval timeoutduration 10sNo Check timeout enabledboolean trueNo Enable/disable check tagsarray - No Tags for filtering/alerting regionsarray - No Regions to run checks from <type>object - Conditional Protocol-specific config
Supported Types
Type Protocol Config Block httpHTTP/HTTPS httptcpTCP tcpudpUDP udpdnsDNS dnssmtpSMTP smtpimapIMAP imapicmpICMP Ping icmpgrpcgRPC grpcwebsocketWebSocket websockettlsTLS Cert tls
http Block
Field Type Default Description methodstring GETHTTP method headersobject - Custom headers bodystring - Request body valid_statusarray [200-299]Accepted status codes body_containsstring - Required body substring body_regexstring - Body regex pattern json_pathobject - JSON path assertions json_schemastring - JSON Schema (draft 2020-12) featherduration - Max response time budget follow_redirectsboolean trueFollow redirects max_redirectsinteger 5Max redirect count
HTTP Example
souls :
- name : "Production API"
type : http
target : "https://api.example.com/health"
weight : 30s
timeout : 10s
tags : [ "production" , "api" , "critical" ]
http :
method : GET
headers :
Authorization : "Bearer ${API_TOKEN}"
valid_status : [ 200 , 201 ]
body_contains : '"status":"ok"'
json_path :
"$.status" : "ok"
"$.services.db" : "connected"
feather : 500ms
tcp Block
Field Type Default Description banner_matchstring - Expected banner regex sendstring - Data to send (hex or text) expectstring - Expected response
TCP Example
souls :
- name : "PostgreSQL Primary"
type : tcp
target : "db-primary.example.com:5432"
weight : 15s
timeout : 5s
tags : [ "database" , "critical" ]
tcp :
banner_match : "PostgreSQL"
dns Block
Field Type Default Description record_typestring ADNS record type expectedarray - Expected values nameserversarray System DNS Nameservers to query propagation_checkboolean falseCheck propagation propagation_thresholdinteger 100Required agreement % dnssec_validateboolean falseValidate DNSSEC
DNS Example
souls :
- name : "Primary DNS"
type : dns
target : "example.com"
weight : 60s
timeout : 10s
tags : [ "dns" , "critical" ]
dns :
record_type : A
expected : [ "93.184.216.34" ]
nameservers :
- "8.8.8.8:53"
- "1.1.1.1:53"
propagation_check : true
propagation_threshold : 100
tls Block
Field Type Default Description expiry_warn_daysinteger 30Days until warning expiry_critical_daysinteger 7Days until critical min_protocolstring TLS1.2Minimum TLS version expected_issuerstring - Expected CA issuer check_ocspboolean falseCheck OCSP stapling min_key_bitsinteger 2048Minimum key size
TLS Example
souls :
- name : "API Certificate"
type : tls
target : "api.example.com:443"
weight : 3600s
timeout : 10s
tags : [ "security" , "certificate" ]
tls :
expiry_warn_days : 30
expiry_critical_days : 7
min_protocol : "TLS1.2"
expected_issuer : "Let's Encrypt"
check_ocsp : true
min_key_bits : 2048
grpc Block
Field Type Default Description servicestring - gRPC service name tlsboolean falseUse TLS metadataobject - Request metadata featherduration - Response time budget
gRPC Example
souls :
- name : "Payment Service gRPC"
type : grpc
target : "grpc.example.com:9090"
weight : 30s
timeout : 5s
tags : [ "production" , "grpc" , "payments" ]
grpc :
service : "payment.PaymentService"
tls : true
metadata :
x-api-key : "${GRPC_API_KEY}"
feather : 200ms
websocket Block
Field Type Default Description headersobject - Upgrade headers subprotocolsarray - WebSocket subprotocols sendstring - Message to send expect_containsstring - Expected response substring ping_checkboolean falseValidate ping/pong
WebSocket Example
souls :
- name : "Realtime Feed"
type : websocket
target : "wss://ws.example.com/feed"
weight : 60s
timeout : 10s
tags : [ "websocket" , "realtime" ]
websocket :
headers :
Authorization : "Bearer ${WS_TOKEN}"
subprotocols : [ "graphql-ws" ]
send : '{"type":"connection_init"}'
expect_contains : "connection_ack"
ping_check : true
icmp Block
Field Type Default Description countinteger 4Number of pings intervalduration 200msBetween pings max_loss_percentinteger 0Max packet loss % featherduration - Latency budget privilegedboolean trueUse raw sockets
ICMP Example
souls :
- name : "Gateway Router"
type : icmp
target : "10.0.0.1"
weight : 15s
timeout : 5s
tags : [ "network" , "infrastructure" ]
icmp :
count : 5
interval : 200ms
max_loss_percent : 20
feather : 100ms
privileged : true