轻量监控:不装 Prometheus 也能知道机器什么时候出事
个人服务器装一整套 Prometheus + Grafana 有点重:吃内存、要维护。但其实我需要知道的就三件事:机器活着吗、磁盘还剩多少、站点能打开吗。用脚本就够了。
一、先做最基础的:日志别把磁盘写满
# /etc/logrotate.d/nginx(默认已有,确认一下)
/var/log/nginx/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
sharedscripts
postrotate
[ -f /run/nginx.pid ] && kill -USR1 $(cat /run/nginx.pid)
endscript
}logrotate -d /etc/logrotate.d/nginx # 调试模式,看会做什么
logrotate -f /etc/logrotate.d/nginx # 强制执行一次
# journald 也要限制
sudo journalctl --vacuum-size=300M在 /etc/systemd/journald.conf 里设 SystemMaxUse=300M 可以一劳永逸。
二、磁盘与内存告警脚本
#!/usr/bin/env bash
# /opt/scripts/watch.sh
THRESHOLD=80
usage=$(df -h / | awk "NR==2 {print $5}" | tr -d "%")
if [ "$usage" -gt "$THRESHOLD" ]; then
echo "[$(date)] disk usage ${usage}% over ${THRESHOLD}%" >> /var/log/watch.log
# 这里换成你自己的通知方式
curl -s -X POST "https://your-notify-hook" \
-d "disk ${usage}% on $(hostname)" > /dev/null
fichmod +x /opt/scripts/watch.sh
crontab -e
*/10 * * * * /opt/scripts/watch.sh三、站点可用性探测
#!/usr/bin/env bash
# /opt/scripts/healthcheck.sh
URL="https://www.bzii.cn"
code=$(curl -o /dev/null -s -w "%{http_code}" --max-time 10 "$URL")
cost=$(curl -o /dev/null -s -w "%{time_total}" --max-time 10 "$URL")
if [ "$code" != "200" ]; then
echo "[$(date)] site down, code=$code" >> /var/log/health.log
systemctl restart nginx # 简单的自愈尝试
fi
# 响应超过 3 秒也记一笔,慢也是故障
awk -v c="$cost" "BEGIN{exit !(c>3)}" && echo "[$(date)] slow: ${cost}s" >> /var/log/health.log四、顺便看证书还剩几天
#!/usr/bin/env bash
end=$(echo | openssl s_client -connect www.bzii.cn:443 -servername www.bzii.cn 2>/dev/null \
| openssl x509 -noout -enddate | cut -d= -f2)
left=$(( ( $(date -d "$end" +%s) - $(date +%s) ) / 86400 ))
echo "证书剩余天数: $left"
[ "$left" -lt 15 ] && echo "证书即将过期!" >> /var/log/health.log五、实时看机器状态
装个 btop 就够了,比 top 好看得多:
apt install -y btop
btop或者一行看关键指标:
echo "负载: $(cat /proc/loadavg | cut -d" " -f1-3) | 内存: $(free -m | awk "NR==2{printf "%.0f%%", $3*100/$2}") | 磁盘: $(df -h / | awk "NR==2{print $5}")"六、什么时候该上真监控系统
出现下面任一情况,就别自己写脚本了:
- 机器超过 5 台,需要统一视图;
- 需要看历史趋势(比如「上周三内存为什么涨了」);
- 需要精细告警(5 分钟内连续 3 次失败才告警);
- 需要监控应用内部指标(请求量、P99 延迟)。
那时候推荐:
| 方案 | 特点 |
|---|---|
| Prometheus + Grafana | 标准方案,吃资源,学习曲线陡 |
| Netdata | 装一条命令,开箱即用的漂亮图表,单机很合适 |
| Uptime Kuma | 轻量可用性监控,支持几十种通知渠道 |
| Cloudflare / 云厂商自带 | 零成本,够看基础指标 |
个人站点我现在用:Cloudflare 看流量 + 一个每日健康检查脚本 + Uptime Kuma 探测可用性。够用了。
七、别忘了告警渠道本身要可靠
告警发到哪?常见的选择:
- Server 酱 / 企业微信机器人 / Telegram Bot:免费、可靠;
- 邮件:容易被当垃圾邮件,但胜在有存档;
- 短信/电话:付费,真出大事才用。
最后提醒:告警规则别设太敏感,否则你会习惯性忽略它们——那跟没监控一样。
