服务器监控教程:用Prometheus+Grafana搭建可视化告警系统

服务器监控的核心目标是:在CPU跑满、内存泄漏或磁盘写满之前收到通知,而不是等网站打不开才去查。
本文用Prometheus采集数据、Grafana展示图表、node_exporter监控Linux主机,全部通过Docker部署,适合刚接触运维的新手照做。

这套方案适合什么场景

如果你只有一两台云服务器,不想装商业监控Agent,又希望看到历史趋势和阈值告警,Prometheus+Grafana是常见选择。
它不依赖外部服务,数据存在本地,缺点是数据默认保留15天,长期存储需要额外配置。

需要准备:
一台Linux服务器(Ubuntu 20.04/Debian 11/CentOS 7以上均可),
已安装Docker和Docker Compose,
服务器能访问外网拉取镜像。

第一步:确认Docker环境

先检查Docker是否可用:

docker --version
docker compose version

如果提示command not found,先安装Docker。
以Ubuntu为例:

apt update && apt install -y docker.io docker-compose-plugin
systemctl enable --now docker

验证方式:执行docker ps能正常输出表头即表示Docker服务已运行。

第二步:编写监控服务的compose文件

新建目录并进入:

mkdir -p /opt/monitor && cd /opt/monitor

创建docker-compose.yml,内容如下:

version: '3.8'
services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - ./rules:/etc/prometheus/rules
      - prom_data:/prometheus
    restart: unless-stopped

  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    ports:
      - "9100:9100"
    restart: unless-stopped

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3000:3000"
    volumes:
      - grafana_data:/var/lib/grafana
    restart: unless-stopped

volumes:
  prom_data:
  grafana_data:

注意:node-exporter默认暴露9100端口,如果服务器有公网IP,建议后面用防火墙限制来源,不要直接对全网开放。

第三步:配置Prometheus采集目标

在同级目录创建prometheus.yml:

global:
  scrape_interval: 15s

rule_files:
  - /etc/prometheus/rules/*.yml

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['node-exporter:9100']

这里用容器名node-exporter作为地址,因为Compose默认创建了同一网络,容器之间可以通过服务名互相访问。
如果你要监控多台远程服务器,把targets改成['IP:9100'],并在每台被监控机上单独部署node-exporter。

验证方式:启动服务后访问http://服务器IP:9090/targets,看到node这个job的状态是UP,说明采集正常。

第四步:启动并检查服务状态

docker compose up -d
docker compose ps

三个容器都应该是running状态。
如果某个容器反复重启,用以下命令看日志:

docker logs prometheus --tail 50
docker logs grafana --tail 50

常见报错Error loading config多数是prometheus.yml缩进写错。
YAML对空格敏感,不要用Tab缩进,冒号后面要留一个空格。

第五步:在Grafana接入数据源并导入面板

浏览器打开http://服务器IP:3000,默认账号密码都是admin,首次登录会要求改密码。

操作路径:
左侧菜单 → Connections → Data sources → Add data source → 选择Prometheus → URL填http:
//prometheus:
9090
→ 点击Save & test,
出现绿色提示即成功。

接着导入现成的仪表盘:
左侧菜单 → Dashboards → Import → 在输入框填入1860(Node Exporter Full的常用编号)→ Load → 选择Prometheus数据源 → Import。

预期结果:页面出现CPU、内存、磁盘、网络等图表,数据每隔15秒刷新一次。
如果图表显示No data,先回到Prometheus的targets页面确认采集状态。

第六步:配置一条磁盘告警规则

在/opt/monitor下创建rules目录和规则文件:

mkdir -p rules

新建rules/disk.yml:

groups:
  - name: disk-alert
    rules:
      - alert: DiskWillFillIn4Hours
        expr: predict_linear(node_filesystem_avail_bytes{mountpoint="/"}[1h], 4 * 3600) < 0
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "根分区预计4小时内写满"

这条规则用predict_linear根据过去1小时的趋势预测4小时后剩余空间,比单纯判断“使用率大于90%”更早发现异常。

修改后重载Prometheus配置:

curl -X POST http://localhost:9090/-/reload

如果提示方法不允许,说明启动参数没开启热加载,直接docker compose restart prometheus即可。

验证方式:访问http://服务器IP:9090/alerts,能看到DiskWillFillIn4Hours处于inactive状态,说明规则已加载。

容易踩的几个坑

  • 端口没放行:云服务器安全组要放行9090、3000、9100,否则浏览器打不开。
  • node-exporter只监控自己:它默认只采集本机数据,监控远程主机必须在目标机上部署。
  • Grafana数据源填错地址:容器内要用服务名prometheus,不要填localhost,因为localhost指向Grafana容器自身。
  • 告警没有通知渠道:Prometheus自身只负责触发告警,要发邮件或钉钉需要额外部署Alertmanager,本文未展开。
  • 数据盘占满:Prometheus默认保留15天,数据量大时定期检查prom_data卷占用。

怎么确认监控真的在跑

三个检查点:Prometheus的/targets页面状态为UP;
Grafana面板有随时间变化的曲线;/alerts页面能看到规则列表。
满足这三点,说明采集、展示、告警三条链路都已打通。
后续可根据需要增加MySQL、Nginx等exporter,采集方式与node-exporter一致。

如果你正在搭建服务器监控,建议先按本文把单机跑通,再逐步扩展到多台主机和通知渠道,避免一次性配置过多导致排错困难。

分享到:
上一篇
服务器集群教程:从零搭建高可用Web集群实操
下一篇
服务器命令教程:用 SSH 完成基础运维操作
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意