【VPS 进阶玩法精选 039】VPS 监控实战:uptime / 流量 / 资源告警与 Telegram 第一时间推送

用 UptimeRobot、Uptime Kuma、vnstat、Netdata 等免费工具,给 VPS 做外部探活、流量统计与资源监控,并把宕机、超额、跑满告警第一时间推到 Telegram,几乎零成本。

延伸阅读

更多相关攻略推荐:Ollama AI系列(2):VPS上的AI推理与API应用Ollama AI系列(2):VPS上的AI推理与API应用【CPU选型 01】搭载 AMD Ryzen 9950X 的 VPSARM / Ampere 席卷 VPS:性价比真香还是兼容陷阱?Ollama AI系列(2):VPS上的AI推理与API应用

一、为什么要监控你的 VPS

很多人买完 VPS 就只管往上部署服务,认为只要能连上就万事大吉。可真实世界里,机器不会因为你没看它就乖乖不出事。常见的三个痛点几乎每个人都踩过。

第一个是宕机没人知道。比如数据库在凌晨两点悄悄挂掉,你自己睡得正香,直到早上被用户投诉、工单刷屏才发现服务已经断了三小时。如果有一套外部探活,挂掉的一分钟内手机就能收到推送,你睡醒前可能就修好了。

第二个是流量超额。不少 VPS 商家按流量计费,比如给一 TB 一个月,月底跑超了不是直接扣费就是被限速到几乎不能用。等到账单出来或者网站变卡才察觉,往往已经晚了。如果能每天看着流量曲线,提前几天知道快到顶,就能主动省着点用。

第三个是 CPU、内存、磁盘悄悄跑满。某个定时任务失控、日志无限增长、或者被人扫端口,资源一旦打满,轻则服务变慢,重则整个系统卡死连 SSH 都登不进去。这类问题靠外部探活是发现不了的,必须看机器内部的资源数据。

监控的本质不是为了炫技,而是把「出问题才知道」变成「出问题第一时间就知道」。下面我们就把这件事拆成两层来讲。

二、监控的两层:外部探测 vs 内部资源

理解监控,最关键的是分清「外部探测」和「内部资源」这两类,它们互补,缺一个都不完整。

外部探测,相当于让别人家的服务器来 ping 你。它回答的问题是:从外面看,你的网站或服务还活着吗、能不能访问、证书过期了没、域名到期了没。它的好处是不占用你自己的资源,而且即便你这台机器彻底宕机,外部探测依然能告诉你「它挂了」。常见做法是注册一个 SaaS 监控,或者自己另起一台小机器跑一个开源探针。

内部资源,相当于在你自己机器上装仪表。它回答的问题是:CPU 现在吃了多少、内存还剩多少、磁盘快满了吗、这个月流量跑了多少。它直接读系统内部数据,所以能看到外部根本看不见的细节,比如某个进程内存泄漏、某个分区悄悄写满。

两者的关系像这样:外部探测像让朋友每隔几分钟给你家打个电话,打不通就知道你家出事了;内部资源像家里装的水电表,你自己看用了多少。一个看「别人能不能找到你」,一个看「你自己家还有没有电」。外部挂了不代表内部也挂,反之亦然,所以两层都要有。

好消息是,对绝大多数个人和小团队来说,一套几乎零成本的免费组合就能把三层问题都兜住:外部探活用 UptimeRobot 或自托管的 Uptime Kuma,流量统计用 vnstat,内部资源看板用 Netdata。我们逐个拆开说。

三、外部探活:免费 SaaS 三选一

外部探活最省事的办法是用现成的 SaaS,注册即用,不用自己维护。下面三个是免费档比较能打的,各有取舍。

  • UptimeRobot:免费档给 50 个监控项、每 5 分钟检查一次,自带邮件通知和托管状态页。它支持 HTTP、端口、Ping、关键字、SSL 证书到期、域名到期、心跳等多种检查类型,还能从多个地区探测。缺点是免费档不含 Telegram、Slack、Discord、Webhook 这类高级通知渠道,这些在付费档才解锁,比如 Solo 大约 7 美元每月,检查间隔能缩到 60 秒。如果你只想免费收邮件,它足够;但想要 Telegram 推送,得另想办法。
  • HetrixTools:永久免费给 15 个 uptime 监控加 32 个黑名单监控,检查间隔 1 分钟、还能从 4 个全球节点同时探测。它自带公开状态页,还有服务器资源监控 agent(看 CPU、内存、网络、存储),并且域名与 SSL 到期也会提醒。通知渠道里直接支持 Telegram、Email、Slack、Discord、Webhook。对想要免费 Telegram 告警的人来说,这是很省心的选择。
  • Uptime Kuma:开源、可以自己托管(许可证 MIT),不限监控数量,最快每 20 秒检查一次,支持 90 多种通知渠道,其中包括 Telegram、钉钉、飞书、Webhook 等。监控类型覆盖 HTTP、TCP、Ping、DNS、Docker 容器、SSL 证书等,自带漂亮的状态页,数据存在本地 SQLite。它等于把上面两家的能力都收进你自己的一台机器里,代价是你得自己跑一个 Docker 容器。

怎么选?如果你懒得折腾、只要有人邮件提醒你挂了,UptimeRobot 免费档够用;如果你要免费 Telegram 推送又不想自己托管,HetrixTools 合适;如果你想要好看的状态页、自己掌握数据、还想要钉钉飞书这些,那就自己跑 Uptime Kuma。下面重点讲自托管 Kuma,因为它能顺手解决 Telegram 推送这件事。

四、自托管 Uptime Kuma:部署与接入 Telegram

Uptime Kuma 用 Docker 一行就能起来,对机器要求极低,跑在和你业务同一台小机上也没问题(当然更稳妥是放另一台)。启动命令大致是:docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:2。跑起来后浏览器打开 IP 加 3001 端口,按引导设管理员账号密码即可。

加监控项很简单:在界面里点新增监控,选类型(比如 HTTP 就填你的网址,TCP 就填主机和端口,Ping 就填 IP),设检查间隔,保存即可。多个站点就加多个监控项,无限数量不收费。

接 Telegram 是 Kuma 的强项。先在 Telegram 里找 BotFather,发 /newbot 按提示创建一个机器人,你会拿到一个 Token,形如一串数字加冒号加字母。再拿到你的 chat_id,可以是你个人的 ID,也可以是某个群组的 ID,用 userinfobot 这类机器人能查到自己的 ID。回到 Kuma 的通知设置里选 Telegram,把 Token 和 chat_id 填进去,发一条测试消息,手机上收到就说明通了。之后每个监控项勾上这个通知,一旦探测失败,手机秒收「[Down] 某某服务」的推送。

Kuma 还自带状态页功能,你可以生成一个只读链接发给用户或同事,让他们自己看服务健康度,省去你反复被问「是不是挂了」。

五、流量统计与超额预警:vnstat

vnstat 是个控制台流量统计器,它直接读 Linux 内核的网络计数器,几乎不影响性能,而且查询时不需要 root。它会按小时、天、周、月、年累计流量,特别适合做流量计费与超额预警。

安装很简单,Debian 或 Ubuntu 上执行 sudo apt install vnstat -y,然后启用守护进程 sudo systemctl enable --now vnstat;RedHat 系用 dnf 安装即可。装好后常用的几个命令:vnstat 看总览;vnstat -d 看今日和昨日;vnstat -m 看本月;vnstat -h 看按小时;vnstat -l 看实时速率;vnstat -y 看年度;vnstat --top 10 看流量最高的十天。

有个细节很实用:vnstat 默认按自然月统计,但很多 VPS 商家是按自己设定的账单周期结算的。你可以在 /etc/vnstat.conf 里把 MonthRotate 设成 18,这样统计月就对齐到商家每月 18 号结算,你看的「本月已用」才准。另外 MaxBandwidth 可以设成网卡带宽,方便它估算。想要写脚本做超额告警,可以用 vnstat --json m 输出 JSON,自己解析本月已用字节。

超额提醒的思路:用 vnstat 取出本月已用流量,比如超过 80GB 就触发 Telegram 推送。可以写成一个小脚本放进 crontab,每天跑一次。这样离超额还有几天的时候你就收到了预警,而不是月底被限速才傻眼。结合前面 Kuma 的推送方式,流量告警和宕机告警能汇到同一个 Telegram 会话里,集中看很方便。

六、内部资源看板:Netdata 一键开箱

如果你想知道 CPU、内存、磁盘、网络实时跑到什么程度,又不想折腾 Grafana 那一套,Netdata 是最省心的。它主打零配置,装完就能用,指标每秒刷新一次。它资源占用极低,大约 1% CPU 和 100MB 左右内存就能追踪两千多个指标。它内置八百多个集成,自带预置告警,比如磁盘快满、内存压力大、CPU 飙高都会自己提醒,还自带 Web 仪表盘,不需要再配 Grafana。

安装方式有两种。一种是官方一键脚本 bash 加小于号加 curl 到 get.netdata.cloud/kickstart.sh;另一种是 Docker 启动,跑起来后访问 IP 加 19999 端口就能看到实时面板。对「不想折腾、就想看个实时图」的人,Netdata 几乎是开箱即用的最优解。

它和 vnstat 的分工可以这样理解:vnstat 专门管流量账,Netdata 管的是 CPU、内存、磁盘、网络速率这些活指标。两者一起装,一台机器的内外状况基本就透明了。Netdata 的告警也能接外部通知渠道,如果你想让它也推 Telegram,按它文档配通知即可。

七、进阶:Prometheus + Node Exporter + Grafana

当你机器变多、想要历史曲线、或者要自定义复杂告警规则时,前面那几个轻量工具就不够用了,这时候上 Prometheus 加 Node Exporter 加 Grafana 这套组合。它是拉模型,也就是 Prometheus 主动去抓各个节点的数据。默认端口上,Node Exporter 监听 9100,Prometheus 自己 9090,Grafana 是 3000,抓取间隔默认 15 秒。

社区里有现成的仪表盘,比如 ID 为 1860 的「Node Exporter Full」,一键导入就能看到 CPU、内存、磁盘、网络的完整图表,不用自己画。整套在 1 到 2GB 内存的 VPS 上就能跑,Prometheus 常驻大约 150 到 250MB 内存。Grafana 可以通过联系点配置 Telegram 告警,填 Bot Token 和 chat_id 即可。

安全上要特别注意:9090、3000、9100 这些端口不要对公网开放,要么走 SSH 隧道,要么用带认证的反向代理访问。否则你的监控面板等于敞开给全网看,反而变成安全隐患。这套体系偏重,个人一两台机器一般没必要,团队或多节点才值得投入。

八、推荐免费组合与落地步骤

把上面的工具拼起来,对绝大多数用户,我推荐的零成本组合是:UptimeRobot 做外部免费邮件探活、vnstat 做流量统计与超额预警、Uptime Kuma 做自托管探活并负责 Telegram 推送。如果你连外部都不想用别人家 SaaS,可以全部用 Uptime Kuma 一家扛,它既探活又发 Telegram,再配 vnstat 补流量账。

给一条十分钟左右能上线的清单。第一步,装 vnstat,设好 MonthRotate 对齐账单日,加个 crontab 每天查流量超阈值就发 Telegram。第二步,Docker 跑起 Uptime Kuma,建管理员,加你要监控的站点或端口。第三步,在 Kuma 里配 Telegram 通知,填 Token 和 chat_id,发测试消息确认收到。第四步,需要实时资源图就装 Netdata,访问面板看一眼即可。第五步,把 Kuma 状态页链接发给相关人。做完这几步,宕机、流量超额、资源跑满这三类问题,你基本都能第一时间知道。

最后提醒两个容易翻车的点。一是别把监控和主业挤在同一台很小的机器上还互相抢资源,理想情况是监控轻量、或者探活放另一台;二是 Bot Token 属于敏感凭据,别写进会公开的地方。另外证书到期也建议监控,很多人网站挂了才发现是证书过期,这种用 UptimeRobot 或 Kuma 的 SSL 检查就能提前提醒。

#VPS监控 #UptimeRobot #UptimeKuma #vnstat #Netdata #Telegram告警

💡 延伸阅读:关于架构与基础设施的更多深潜指南,请前往 VPS 主题导读中心 (Hub) 获取全盘策略。