checkId: check.notify.channel.connectivity plugin: stellaops.doctor.notify severity: warn tags: [notify, channel, connectivity, network, air-gap]
Notification Channel Connectivity
This Doctor check is the setup-wizard compatibility check for Notify channel reachability. It probes configured Email, Slack, Teams, and generic Webhook destinations from the Doctor runtime and reports a single aggregate result.
What It Checks
The check reads the configured Notify channels and tests reachability:
- Email opens a TCP connection to the configured SMTP host and port.
- Slack and Teams validate the configured webhook endpoint is reachable.
- Webhook opens a TCP connection to the configured webhook endpoint.
In sealed or forced offline mode, external Slack and Teams probes are skipped. External Email and Webhook targets are also skipped, while loopback, RFC1918, link-local, and IPv6 unique-local addresses still run because they can be internal services inside the sealed perimeter.
Why It Matters
Configuration-only checks prove that a value exists. This check proves Doctor can reach the configured delivery targets from the deployed runtime. It catches firewall, DNS, proxy, TLS, and service availability problems before operators depend on Notify for incident and release-gate alerts.
Common Causes
- SMTP, Slack, Teams, or Webhook target is unreachable from the Doctor container or host.
- Firewall or proxy rules block outbound traffic.
- DNS cannot resolve the configured host.
- A webhook URL is malformed or has expired.
- The deployment is sealed and the target is external, so the probe is intentionally skipped.
How to Fix
Docker Compose
docker exec <doctor-container> getent hosts smtp.internal.example
docker exec <doctor-container> nc -zv smtp.internal.example 587
docker exec <doctor-container> curl -I https://notify.internal.example/hooks/stella
Bare Metal / systemd
getent hosts smtp.internal.example
nc -zv smtp.internal.example 587
curl -I https://notify.internal.example/hooks/stella
If the site is sealed, prefer internal SMTP relays and webhooks using loopback or private addresses.
Kubernetes / Helm
kubectl exec -it deploy/stellaops-doctor -- nc -zv smtp.internal.example 587
kubectl exec -it deploy/stellaops-doctor -- curl -I https://notify.internal.example/hooks/stella
kubectl get networkpolicy -A
Verification
stella doctor run --check check.notify.channel.connectivity
Related Checks
check.notify.channel.configured- validates that at least one channel is configuredcheck.notify.email.connectivity- Email-specific reachabilitycheck.notify.slack.connectivity- Slack-specific reachabilitycheck.notify.teams.connectivity- Teams-specific reachabilitycheck.notify.webhook.connectivity- Webhook-specific reachability
