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 跑得更安心!

有问题欢迎评论区聊聊,咱们下期再见~