服务器出问题的时候,最怕的不是挂,而是挂了都不知道怎么挂的。CPU 什么时候打满的?内存是一点点涨上去的还是某次泄漏?带宽是谁在偷?
这篇用 Prometheus + Grafana 搭一套最经典的服务器监控,装完你就能在网页上看到实时的 CPU、内存、磁盘、网络曲线,还能设阈值告警。全程命令可抄。
玩游戏的服务器、跑网站的云服务器都能用这套方案。需要云服务器可以看看财富云计算:NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上,一键开服面板,主流游戏快速部署。
一、这套方案是什么
三个组件,各司其职:
| 组件 | 干什么 | 资源占用 |
|---|---|---|
| Node Exporter | 装在每台被监控机器上,采集系统指标 | 很小(几十 MB 内存) |
| Prometheus | 定时来拉取指标,按时序存起来 | 中等(几百 MB,看保留时间) |
| Grafana | 把指标画成图表,配告警规则 | 中等 |
数据流:Node Exporter(被监控机)→ Prometheus(拉取存储)→ Grafana(展示告警)。
为什么选它:开源免费、社区模板多、对 Linux 支持最好、轻量(2G 内存的小机器也能跑)。
二、安装:一行一个组件
以下以 Ubuntu/Debian 为例,CentOS 把 apt 换成 yum。
1. 装 Node Exporter(被监控的机器上)
# 下载(以 1.7.0 为例,建议去官网看最新版)
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar -xzf node_exporter-1.7.0.linux-amd64.tar.gz
cp node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/
# 创建专用用户(不要用 root 跑)
useradd -rs /bin/false node_exporter
# 注册为 systemd 服务
cat > /etc/systemd/system/node_exporter.service <<'EOF'
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now node_exporter
# 验证: 应该输出一堆指标
curl http://localhost:9100/metrics | head -20看到 node_cpu_seconds_total 之类的指标就说明装好了。
2. 装 Prometheus(监控机,可以就是同一台)
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.53.0/prometheus-2.53.0.linux-amd64.tar.gz
tar -xzf prometheus-2.53.0.linux-amd64.tar.gz
cp -r prometheus-2.53.0.linux-amd64 /opt/prometheus
# 配置: 告诉 Prometheus 去拉谁
cat > /opt/prometheus/prometheus.yml <<'EOF'
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
EOF
# 起服务(直接前台跑测试)
cd /opt/prometheus && ./prometheus --config.file=prometheus.yml浏览器访问 http://服务器IP:9090,能看到 Prometheus 界面。在查询框输入 up 回车,显示 1 表示目标在线。
3. 装 Grafana(画图)
# 用官方源安装(最省事)
apt-get install -y apt-transport-https software-properties-common
wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" \
> /etc/apt/sources.list.d/grafana.list
apt-get update && apt-get install -y grafana
systemctl enable --now grafana-server访问 http://服务器IP:3000,默认账号 admin / admin,首次登录要求改密码。
三、配置 Grafana 看板
进 Grafana 后:
- Connections → Data sources → Add data source → Prometheus,URL 填
http://localhost:9090,保存 - Dashboards → New → Import,输入看板 ID 1860(Node Exporter Full,社区最流行的模板)
- 选择刚才加的 Prometheus 数据源,点 Import
十秒后你就能看到十几张图:CPU 使用率、内存、磁盘 IO、网络流量、系统负载、温度——全在一個页面上。
常用查询语句( Graphs 面板里手写查询用):
# CPU 使用率(百分比)
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# 内存使用率
100 * (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)
# 磁盘使用率
100 - (node_filesystem_avail_bytes{fstype!~"tmpfs|overlay"}
/ node_filesystem_size_bytes * 100)
# 网络出站流量(MB/s)
rate(node_network_transmit_bytes_total[5m]) / 1024 / 1024四、配告警:出问题主动找你
光看板不够,你得知道什么时候出问题。Grafana Alerting 配一条:
- 编辑某个图表面板 → Alert → Create alert rule
条件示例:
- CPU 持续 5 分钟 > 90%
- 内存使用率 > 90%
- 磁盘使用率 > 85%
- Notification channel 配邮箱、钉钉、企业微信或 Telegram
游戏服最值得加的两条告警:
- 进程存活告警:
up{job="node"} == 0,机器失联立刻通知 - 服务端进程告警(进阶):用 textfile collector 把游戏服进程状态暴露出来,挂了直接推送
五、资源占用与保留策略
Prometheus 默认保留 15 天数据,2G 小机器注意:
# /opt/prometheus/prometheus.yml 的 global 下加
global:
scrape_interval: 15s
# 数据保留15天(默认)
# 命令行参数 --storage.tsdb.retention.time=15d内存建议:监控机至少 1G 内存;被监控机只要有 Node Exporter(约 15MB 内存),不影响游戏运行。
多台机器怎么加:在 prometheus.yml 的 targets 里加 IP 就行:
static_configs:
- targets: ['192.168.1.10:9100', '192.168.1.11:9100']前提是那些机器也装了 Node Exporter,且 9100 端口互通。
六、不想这么复杂?轻量替代方案
如果只是想「看看机器卡不卡」,不想搭三件套:
| 需求 | 轻量工具 |
|---|---|
| 实时看一眼 | htop + iftop + iostat |
| 历史曲线 + Web 界面 | Netdata(单二进制,装完就有看板) |
| 国内面板中文 | 宝塔面板(自带监控图表) |
| 定时跑脚本 + 邮件告警 | 自写 Shell + mail 命令 |
Netdata 安装只要一行:bash <(curl -sS https://get.netdata.cloud/cda),装完访问 http://IP:19999 就有完整看板,适合不想折腾的人。宝塔和 Netdata 的详细用法见Netdata 与宝塔面板可视化监控。
七、常见问题
Q:Prometheus 占内存越来越大?
数据保留时间太长或抓取目标太多。缩短 --storage.tsdb.retention.time,或者只监控核心指标。
Q:防火墙挡了 9090/3000/9100?
监控机防火墙要放行对应端口,但 Grafana 和 Prometheus 不要直接暴露公网,建议只监听内网或加 Nginx 反代 + Basic Auth。
Q:能在 Windows 上用吗?
能,Node Exporter 有 windows 版本,windows_exporter.msi 装完即可,其余流程一样。
Q:指标显示不全 / 时断时续?
检查 scrape_interval 和网络连通性,up 指标为 0 就是拉取失败,多半是防火墙或 IP 写错。
小结
监控的意义是把「不知道怎么就挂了」变成「早有预兆」。Node Exporter + Prometheus + Grafana 这套一小时能搭完,之后所有性能问题都有数据可查,排查再靠猜。
更多云服务器运维内容见财富云计算知识库:Linux 命令速查、SSH 密钥登录、资源排查、备份策略、防火墙配置等全系列教程。需要云服务器可以看看财富云计算:一键开服面板,NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上。
延伸阅读
- 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
- 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
- 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
- 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
- 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
- RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
- 短链接服务搭建:Shlink 自托管,链接数据自己掌握
- 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道

[...]traceroute -n 目标IP | head -15五、NAT 型服务器的地域考量NAT 型云服务器(无独立公网 IP)在地域选择上有几个特殊点:线路质量取决于服务商网关,不是机房本身。同一个地域,不同 NAT 服务商的体验可能天差地别优先选带 BGP/多线接入的服务商,NAT 网关做多线融合是常见卖点实测比标称重要:买月付/短期套餐实测一周,晚高峰让玩家连一次,满意再续端口映射延迟:NAT[...]
2026-10-14 回复
[...]sar -b # IO 历史配 crontab 每 10 分钟采一次,排障时能回溯。更完整的方案见Linux 监控体系。小结性能排查记住这个顺序:vmstat 定方向 → top/iotop/iostat 找元凶 → perf/pidstat 深挖。90% 的卡顿能在这三个工具里找到答案,不需要装任何额外软件。排查完按「优化程序 → 错峰任务 → 升级配置」的顺序处理。更多运维内容见财富云计[...]
2026-10-14 回复
[...]docker inspect myapp --format '{{.HostConfig.Memory}} {{.HostConfig.Cpus}}'三层防护配齐:层级配置防的场景单容器--memory --cpus --pids_limit单容器发疯宿主机总内存留 20% 余量、监控告警多容器集体膨胀编排层K8s ResourceQuota / LimitRange团队滥用告警规则照抄:Prom[...]
2026-10-14 回复
[...]journalctl -u palworld --since "1 hour ago" | grep -i error长期方案:Prometheus 监控体系或Netdata 可视化监控,配一条内存 85% 告警,凌晨自动重启前你就能收到消息。六、常见问题速查现象原因解法玩 2 小时必卡内存泄漏累积定时重启(第二节)基地一多就掉帧同屏实体过多降 DropItemMaxNum、限[...]
2026-10-15 回复
[...]uptime # load做成 cron 每日邮件报告,模板见服务器日常巡检清单与自动化。监控告警体系见Prometheus 监控体系。排查口诀:先 uptime 看 load,再 top 找 CPU,ps 看状态位,iostat 看磁盘,dmesg 看内核,crontab 查根。按顺序来,没有查不到的问题。进程异常大多有迹可循:僵尸找爹、[...]
2026-10-15 回复
[...]0 9 * df -h | awk '$5+0 > 80 {print $0}' | mail -s "磁盘告警-$(hostname)" admin@example.com或上监控系统见Prometheus 监控体系,配磁盘使用率曲线,涨势看得见。巡检模板见服务器日常巡检清单与自动化。五、应急:磁盘 100% 时先救火满盘时很多命令都报错,按这个顺序腾空间:# [...]
2026-10-15 回复
[...]└─ 已经 OOM → dmesg 确认 → Swap 急救 → 重启 → 再走上面流程七、预防清单[ ] 关键服务配 MemoryMax 或 mem_limit,泄漏可控[ ] Swap 必配(小内存机器的保险丝)[ ] 关键进程(DB)调低 oom_score_adj,别被冤杀[ ] 内存监控告警:85% 持续 10 分钟[ ] 每周看一次 RSS 趋势曲线[ ] 新服务上线前跑一轮 valg[...]
2026-10-15 回复
[...]0 9 * df -h / | awk 'NR==2 && $5+0>80 {print "磁盘空间:"$0}'; df -i / | awk 'NR==2 && $5+0>80 {print "inode:"$0}' | mail -s "资源告警" admin@example.com[...]
2026-10-15 回复
[...]MiB Swap: 4096 total, 1024 free, 3072 used. 6501 avail现象诊断对策free 少,buff/cache 高,Swap used ≈ 0健康。Linux 把空闲内存拿来做缓存是本能,不是内存不足不用管Swap used 持续增长物理内存真的不够加 Swap(Swap 优化)或加内存Swap used 高 + wa 高内存在换页,磁盘[...]
2026-10-18 回复
[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-18 回复
[...]}反代细节见Nginx 反向代理与多站点配置,证书见免费 SSL 证书申请与 HTTPS 部署。三、监控项配置:按这个清单加基础四件(每个站长都该有):监控项类型间隔说明网站首页HTTPS60s关键字匹配"你的品牌词",防"能打开但是挂马页"服务器 PingPing60s探活,不通就是机器/网络层出事SSH 端口TCP:2260s服务没挂但 SSH 不通 = 被墙或防火墙抽风数据库端口TCP:33[...]
2026-10-18 回复