Files
caiwuzongzhang/deploy/monitor.sh
T

33 lines
1.2 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# 巡检:健康端点 + 磁盘水位告警。失败/越线写 ALERT.log(供总管日检)。
# 建议 cron*/5 * * * * /path/to/deploy/monitor.sh >/dev/null 2>&1
set -euo pipefail
ROOT="$(cd "$(dirname "$0")" && pwd)"
URL="${HEALTH_URL:-http://127.0.0.1:4173/}"
DATA_DIR="${DATA_DIR:-$ROOT/../data}"
ALERT="$ROOT/ALERT.log"
DISK_THRESHOLD="${DISK_THRESHOLD:-80}"
now() { date "+%Y-%m-%d %H:%M:%S"; }
# 1) 健康检查:HTTP 200 才算通过
if ! curl -fsS -m 8 -o /dev/null "$URL"; then
echo "[$(now)] HEALTH FAIL: $URL 无响应" >> "$ALERT"
exit 1
fi
# 2) 磁盘水位:数据所在分区使用率超阈值告警
pct="$(df -P "$DATA_DIR" | awk 'NR==2 {gsub("%",""); print $5}')"
if [ "${pct:-0}" -ge "$DISK_THRESHOLD" ]; then
echo "[$(now)] DISK ALERT: $DATA_DIR 使用率 ${pct}% >= ${DISK_THRESHOLD}%" >> "$ALERT"
exit 2
fi
# 3) 容器状态:非 running/restarting 告警
state="$(docker inspect -f '{{.State.Status}}' "${CONTAINER:-caiwuzongzhang-app}" 2>/dev/null || echo missing)"
if [ "$state" != "running" ]; then
echo "[$(now)] CONTAINER ALERT: ${CONTAINER:-caiwuzongzhang-app} state=$state" >> "$ALERT"
exit 3
fi
echo "[$(now)] ok"