VPS 资源监控与告警
引言
大家好啊!今天想跟你们聊聊 VPS 资源监控和告警这个话题。说实话,之前我有个朋友,他的博客网站突然挂了,访问不了,结果排查半天发现是服务器磁盘满了。你说这种问题要是能提前预警,是不是就不会那么狼狈了?
我自己也踩过不少坑。之前跑了个采集脚本,CPU 跑满了自己不知道,等发现的时候 VPS 已经被服务商给暂停了。从那以后,我就开始认真对待监控这事儿了。今天把我的经验整理一下,分享给有同样需求的小伙伴。
监控哪些指标
首先咱们得知道,VPS 到底需要监控哪些东西。我总结了一下,最核心的主要有这几个:
CPU 使用率 这个就不用多说了吧,CPU 跑满了网站肯定卡,严重的直接就挂掉了。一般超过 80% 就要注意了,90% 以上就得赶紧处理。 内存使用率 内存不够用的话,系统会开始用 swap,性能会明显下降。如果用的是 1G 以下小内存的 VPS,更要密切关注这个指标。 磁盘使用率 这个太重要了!磁盘满了不只是写入失败,很多服务甚至会直接崩溃。我之前那个朋友就是吃了这个亏。 磁盘 IO 有时候磁盘没满,但是 IO 读写特别频繁,也会导致性能问题。特别是跑数据库的朋友,这个指标很关键。 网络流量 入站出站流量都要关注,如果有异常流量,可能是被攻击了,或者脚本出问题了。 进程状态 关键服务是否在运行,比如 nginx、mysql、php-fpm 这些,挂了要及时知道。轻量级监控方案:Netdata
如果你不想搞太复杂的监控体系,我强烈推荐试试 Netdata。这玩意儿安装超级简单,界面又好看,基本上一条命令就搞定了。
# Ubuntu/Debian
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
安装完成后,直接访问 http://你的IP:19999 就能看到实时监控面板。CPU、内存、磁盘、网络、进程,一目了然。而且它自带告警功能,配置一下阈值就能自动提醒你。
Netdata 的配置文件在 /etc/netdata/netdata.conf,告警规则在 /etc/netdata/health.d/ 目录下。比如你想修改 CPU 告警阈值,可以编辑对应的配置文件:
# cpu.conf 示例
alarm: cpu_usage
on: system.cpu
lookup: average -1m unaligned
every: 10s
crit: $this > 90
warn: $this > 80
不过 Netdata 主要是本地查看,如果你不在服务器旁边,想远程接收告警,还得配合其他工具。
更专业的方案:Prometheus + Grafana
如果你想要更强大的功能,比如历史数据存储、多台服务器统一监控、漂亮的可视化面板,那就可以考虑 Prometheus + Grafana 这套组合拳。
Prometheus 负责采集和存储指标数据,Grafana 负责把数据变成好看的图表。这俩都是开源的,在技术圈里用得特别广。
安装 docker 后,一条命令就能跑起来:
docker run -d \
--name prometheus \
-p 9090:9090 \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
然后在 prometheus.yml 里配置要监控的目标:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'vps-monitor'
static_configs:
- targets: ['localhost:9100']
这里需要配合 node_exporter 来采集服务器指标。安装好 node_exporter 后,它会在 9100 端口暴露监控数据。
Grafana 安装也很简单,同样用 docker:
docker run -d \
--name grafana \
-p 3000:3000 \
grafana/grafana
然后登录 Grafana,添加 Prometheus 数据源,导入一个 Node Exporter 的 Dashboard,瞬间就拥有专业级的监控面板了。
告警怎么配置
监控做好了,告警也得跟上,不然整天盯着看多累啊。常见的告警方式有这几种:
邮件告警 最基础的方式,配置简单,但是有时候会被当成垃圾邮件,不太实时。 微信/钉钉告警 这个比较实用,推送消息及时。可以用企业微信机器人或者钉钉机器人,配置好 webhook,脚本就能自动发送消息。 Telegram 告警 如果你在 TG 上,直接用 bot 发消息,体验非常好,而且几乎没有延迟。 短信告警 适合重要业务,紧急情况下能保证通知到你。Prometheus 自带 AlertManager,可以配置各种告警规则。比如磁盘使用率超过 80% 就触发告警:
groups:
- name: node_rules
rules:
- alert: DiskSpaceLow
expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) < 0.2
for: 5m
labels:
severity: warning
annotations:
summary: "磁盘空间不足"
description: "服务器 {{ $labels.instance }} 磁盘剩余空间不足 20%"
简单粗暴的脚本方案
如果你觉得上面那些都太复杂了,想先整个简单的,那我再教你一个土办法——用 shell 脚本 + cron 定时任务。
比如监控磁盘使用率,超过 80% 就发邮件:
#!/bin/bash
check_disk.sh
USE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
THRESHOLD=80
if [ $USE -gt $THRESHOLD ]; then
echo "Warning: Disk usage is ${USE}%" | mail -s "VPS Disk Alert" [email protected]
fi
然后 crontab 里加上:
*/30 * * * * /path/to/check_disk.sh
每半小时检查一次,简单粗暴,但是管用!
总结
好啦,今天关于 VPS 资源监控和告警就聊到这里。总的来说,监控这个事儿真的非常重要,别等到出问题 了才后悔莫及。
如果你是刚入门的小白,建议先从 Netdata 开始,一条命令就能用,体验一下监控的感觉。等熟悉了之后,可以逐步加上告警,再用 Prometheus + Grafana 打造专业级的监控体系。
记住一句话:最好的监控是防患于未然,而不是出了问题再补救。希望这篇文章能帮到你,让你的 VPS 跑得更安心!
有问题欢迎评论区聊聊,咱们下期再见~
VPS 资源监控与告警
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法