Check the pulse of your DNS infrastructure.
A beautiful, fast DNS health checker with rich TUI for SREs, DevOps, and DNS administrators. Features gradient colors, animated spinners, and stunning terminal visuals.
- π Deep DNS Health Checks - Resolution, DNSSEC validation, zone freshness
- π¨ Rich TUI Dashboard - Live monitoring with sparklines and gauges
- π JSON Output - CI/CD pipeline integration
- β‘ Performance Benchmarking - Latency percentiles (p50/p90/p95/p99)
- π DNSSEC Aware - Signature validation and expiration warnings
- π TLS Certificate Checks - Chain validation, expiry warnings
- π Global Propagation - Check across 10+ worldwide resolvers
- π DNS Trace - Follow resolution from root to authoritative
- π DNS Education - Human-readable explanations for SPF, DMARC, DKIM
- π Health Scoring - 0-100 score with letter grades (A-F)
- π‘ Prometheus Metrics - Native metrics endpoint for monitoring
cargo install dnspulseOr build from source:
git clone https://github.com/copyleftdev/dnspulse
cd dnspulse
cargo build --release| Command | Description |
|---|---|
check |
Check DNS health for a single domain |
multi |
Check multiple domains at once |
watch |
Live TUI dashboard with real-time monitoring |
compare |
Compare DNS responses across multiple servers |
propagation |
Check DNS propagation across global resolvers |
trace |
Trace DNS resolution from root to authoritative |
bench |
Run DNS performance benchmark with percentiles |
tls |
Check TLS certificate chain and expiry |
score |
Calculate DNS health score (0-100 with grades) |
explain |
Human-readable DNS record explanations |
serve |
Start Prometheus metrics server |
# Check a single domain
dnspulse check example.com
# Check with specific DNS server
dnspulse check example.com --server 8.8.8.8
# JSON output for scripts
dnspulse check example.com --output json
# Compact single-line output
dnspulse check example.com --output compact# Watch a domain with live updates
dnspulse watch example.com
# Custom check interval (seconds)
dnspulse watch example.com --interval 10# Check multiple domains at once
dnspulse multi example.com google.com cloudflare.com
# JSON output for CI/CD
dnspulse multi example.com google.com --output json# Compare responses across global resolvers (Google, Cloudflare, Quad9, etc.)
dnspulse compare example.com
# Compare specific servers
dnspulse compare example.com --servers 8.8.8.8,1.1.1.1,9.9.9.9# Check if DNS has propagated to all major resolvers
dnspulse propagation example.com# Trace from root servers to authoritative
dnspulse trace example.com# Run 100 queries, 10 concurrent
dnspulse bench example.com
# Custom count and concurrency
dnspulse bench example.com --count 500 --concurrent 20
# Benchmark specific server
dnspulse bench example.com --server 8.8.8.8# Check certificate chain and expiry
dnspulse tls example.com
# Check non-standard port
dnspulse tls example.com --port 8443# Get health score (0-100) with grade
dnspulse score example.com
# Include TLS in scoring
dnspulse score example.com --with-tls# Explain SPF record in human-readable format
dnspulse explain SPF google.com
# Explain DMARC policy
dnspulse explain DMARC google.com
# Other record types: A, AAAA, MX, TXT, CNAME, NS, SOA, CAA, DKIM, PTR
dnspulse explain MX google.com# Start metrics server on default port
dnspulse serve --domains example.com,google.com
# Custom port and interval
dnspulse serve --listen 0.0.0.0:9101 --domains example.com --interval 30 ____ _ _______ ____ __
/ __ \/ | / / ___// __ \__ __/ /_______
/ / / / |/ /\__ \/ /_/ / / / / / ___/ _ \
/ /_/ / /| /___/ / ____/ /_/ / (__ ) __/
/_____/_/ |_//____/_/ \__,_/_/____/\___/
DNS Health Report
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Domain: example.com
Time: 2024-12-16 17:30:00 UTC
Status: β
HEALTHY
Check Duration: 23ms
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π DNS Resolution
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
Response Time: 12ms
π Records:
β’ 93.184.216.34
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π DNSSEC
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
DNSSEC: Enabled
β
Signatures: Valid
π
Expires in: 30 days
π Algorithm: RSASHA256
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Zone Info
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
Serial: 2024121601
π₯οΈ Primary NS: ns1.example.com.
π Refresh: 3600s
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
{
"domain": "example.com",
"timestamp": "2024-12-16T17:30:00Z",
"overall_status": "Healthy",
"resolution": {
"status": "Healthy",
"response_time_ms": 12,
"records": ["93.184.216.34"]
},
"dnssec": {
"status": "Healthy",
"enabled": true,
"valid": true,
"expires_in_days": 30
},
"zone": {
"status": "Healthy",
"serial": 2024121601,
"primary_ns": "ns1.example.com."
}
}example.com | OK | 12ms | DNSSEC:β | serial:2024121601
# GitHub Actions example
- name: Check DNS Health
run: |
dnspulse check myapp.com --output json > dns-health.json
if [ $? -ne 0 ]; then
echo "DNS health check failed!"
exit 1
fi| Code | Meaning |
|---|---|
| 0 | All checks healthy |
| 1 | One or more checks unhealthy/degraded |
- Prometheus metrics endpoint
- DNS health scoring with grades
- TLS certificate validation
- Global propagation checking
- DNS resolution tracing
- Performance benchmarking
- Human-readable DNS explanations
- Slack/PagerDuty webhook notifications
- Historical data storage
- Web UI dashboard
- DNS over HTTPS (DoH) support
- Configuration file support (~/.dnspulse.toml)
- Janus - Full anycast BGP health automation (enterprise)
MIT License - See LICENSE for details.
Built with β€οΈ for the DNS community