| name | health |
| version | 0.1.0 |
| author | devclaw |
| description | Health and system monitoring — check services, uptime, and alerts |
| category | monitoring |
| tags | ["health","monitoring","uptime","alerts","status"] |
| requires | {"bins":["curl","jq"]} |
Health
Monitor system health, services, and uptime.
Setup
API keys (optional; for UptimeRobot, Healthchecks.io, Slack, Resend; store in vault, never use export):
- UptimeRobot:
vault_save uptimerobot_key "xxx"
- Healthchecks.io:
vault_save healthchecks_uuid "xxx"
- Slack webhook:
vault_save slack_webhook_url "xxx"
- Resend:
vault_save resend_api_key "xxx"
- Keys auto-inject as uppercase env vars.
curl, jq, nc, openssl are usually pre-installed. For systemd/Docker checks, those tools must be available.
HTTP Health Checks
curl -s -o /dev/null -w "%{http_code}" https://example.com
curl -s -o /dev/null -w "HTTP: %{http_code}, Time: %{time_total}s\n" https://example.com
for url in "https://api.example.com/health" "https://app.example.com"; do
status=$(curl -s -o /dev/null -w "%{http_code}" "$url")
echo "$url: $status"
done
curl -s -w "\n\nDNS: %{time_namelookup}s\nConnect: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\nHTTP: %{http_code}\n" -o /dev/null https://example.com
Service Monitoring
nc -zv example.com 443
timeout 5 bash -c "echo > /dev/tcp/example.com/443" && echo "UP" || echo "DOWN"
systemctl is-active nginx
systemctl status nginx --no-pager
docker inspect -f '{{.State.Status}}' container_name
System Health
top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1
free -h
df -h
uptime
ps aux --sort=-%mem | head -10
lsof | wc -l
netstat -an | grep ESTABLISHED | wc -l
SSL Certificate Check
echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -dates
echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2 | xargs -I {} date -d {} +%s | xargs -I {} echo $(( ({} - $(date +%s)) / 86400 )) days
echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -text | grep -E "Issuer:|Subject:|DNS:"
Uptime Monitoring
UptimeRobot API
curl -s -X POST "https://api.uptimerobot.com/v2/getMonitors" \
-H "Cache-Control: no-cache" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "api_key=$UPTIMEROBOT_KEY&format=json" | jq '.monitors[]'
curl -s -X POST "https://api.uptimerobot.com/v2/newMonitor" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "api_key=$UPTIMEROBOT_KEY&friendly_name=MySite&url=https://example.com&type=1" | jq '.'
curl -s -X POST "https://api.uptimerobot.com/v2/getMonitors" \
-d "api_key=$UPTIMEROBOT_KEY&monitors=MONITOR_ID&custom_uptime_ratios=30" | jq '.monitors[0].custom_uptime_ratio'
Healthchecks.io
curl -s "https://hc-ping.com/$HEALTHCHECKS_UUID"
curl -s "https://hc-ping.com/$HEALTHCHECKS_UUID/fail"
curl -s "https://hc-ping.com/$HEALTHCHECKS_UUID/start"
curl -s "https://hc-ping.com/$HEALTHCHECKS_UUID/$?rid=$(uuidgen)"
Alerting
Slack Alert
send_alert() {
local message="$1"
curl -s -X POST "$SLACK_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d "{\"text\": \"🚨 Health Alert: $message\"}"
}
curl -s -o /dev/null -w "%{http_code}" https://example.com | grep -v "200\|301\|302" && send_alert "Site down!"
Email Alert
send_email() {
local subject="$1"
local body="$2"
curl -s -X POST "https://api.resend.com/emails" \
-H "Authorization: Bearer $RESEND_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"from\": \"alerts@example.com\", \"to\": \"admin@example.com\", \"subject\": \"$subject\", \"text\": \"$body\"}"
}
Monitoring Script
#!/bin/bash
check_url() {
local url=$1
local status=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 "$url")
if [[ "$status" =~ ^2[0-9][0-9]$ ]]; then
echo "✅ $url - OK ($status)"
else
echo "❌ $url - FAIL ($status)"
fi
}
check_url "https://example.com"
check_url "https://api.example.com/health"
Tips
- Set appropriate timeouts for checks
- Check from multiple locations if possible
- Monitor response time, not just status
- Set up alerts for certificate expiration
- Log check results for trend analysis
Triggers
health check, uptime, monitor, status check, service health,
ssl check, system monitoring, health monitoring