AnubisWatchDOCUMENTATION

Search the hall

Search guides, configuration fields and command examples.
↑↓ select · Enter openEsc close
GitHub
Documentation
THE FIELD GUIDE

Monitoring 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.

FieldTypeDefaultRequiredDescription
namestring-YesHuman-readable name
typestring-YesCheck type (see below)
targetstring-YesTarget URL/host
weightduration60sNoCheck interval
timeoutduration10sNoCheck timeout
enabledbooleantrueNoEnable/disable check
tagsarray-NoTags for filtering/alerting
regionsarray-NoRegions to run checks from
<type>object-ConditionalProtocol-specific config

Supported Types

TypeProtocolConfig Block
httpHTTP/HTTPShttp
tcpTCPtcp
udpUDPudp
dnsDNSdns
smtpSMTPsmtp
imapIMAPimap
icmpICMP Pingicmp
grpcgRPCgrpc
websocketWebSocketwebsocket
tlsTLS Certtls

http Block

FieldTypeDefaultDescription
methodstringGETHTTP 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_redirectsbooleantrueFollow redirects
max_redirectsinteger5Max redirect count

HTTP Example

YAML
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

FieldTypeDefaultDescription
banner_matchstring-Expected banner regex
sendstring-Data to send (hex or text)
expectstring-Expected response

TCP Example

YAML
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

FieldTypeDefaultDescription
record_typestringADNS record type
expectedarray-Expected values
nameserversarraySystem DNSNameservers to query
propagation_checkbooleanfalseCheck propagation
propagation_thresholdinteger100Required agreement %
dnssec_validatebooleanfalseValidate DNSSEC

DNS Example

YAML
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

FieldTypeDefaultDescription
expiry_warn_daysinteger30Days until warning
expiry_critical_daysinteger7Days until critical
min_protocolstringTLS1.2Minimum TLS version
expected_issuerstring-Expected CA issuer
check_ocspbooleanfalseCheck OCSP stapling
min_key_bitsinteger2048Minimum key size

TLS Example

YAML
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

FieldTypeDefaultDescription
servicestring-gRPC service name
tlsbooleanfalseUse TLS
metadataobject-Request metadata
featherduration-Response time budget

gRPC Example

YAML
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

FieldTypeDefaultDescription
headersobject-Upgrade headers
subprotocolsarray-WebSocket subprotocols
sendstring-Message to send
expect_containsstring-Expected response substring
ping_checkbooleanfalseValidate ping/pong

WebSocket Example

YAML
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

FieldTypeDefaultDescription
countinteger4Number of pings
intervalduration200msBetween pings
max_loss_percentinteger0Max packet loss %
featherduration-Latency budget
privilegedbooleantrueUse raw sockets

ICMP Example

YAML
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

Adapted from the AnubisWatch project. Examples use placeholder services and credentials.View project source Suggest a correction

AnubisWatch is built and maintained by

oxognet.

A small studio in Estonia building AI agents, developer tools and the infrastructure behind them.

Made in Estonia. Shipped worldwide.