海外云服务器搭建Prometheus+Grafana监控告警系统完整教程(2026最新版)

📅 · 海外云服务器自建服务教程 - ChengziCloud

一句话结论

Meta Description: 海外云服务器搭建Prometheus+Grafana监控告警系统完整教程:Node Exporter采集服务器指标、Prometheus存储与告警规则、Grafana可视化仪表盘、Alertmanager+Telegram实时告警推送,全部命令可直接复制执行,附服…

本文要点
  • 前言:你的服务器"裸奔"了多久?
  • 监控系统架构:四个组件各管什么
  • 服务器配置推荐与价格对比
  • 第一步:系统初始化
  • 第二步:安装 Node Exporter(每台被监控的机器都要装)
  • 第三步:安装 Prometheus(监控主服务器)
  • 第四步:配置告警规则
  • 第五步:安装 Grafana 并导入仪表盘

Meta Description: 海外云服务器搭建Prometheus+Grafana监控告警系统完整教程:Node Exporter采集服务器指标、Prometheus存储与告警规则、Grafana可视化仪表盘、Alertmanager+Telegram实时告警推送,全部命令可直接复制执行,附服务器配置推荐、价格对比表与常见问题FAQ,半小时搭好你的服务器监控。

关键词:海外云服务器监控、Prometheus教程、Grafana搭建、Node Exporter、服务器监控告警、Alertmanager、Telegram告警、云服务器运维、服务器状态监控

前言:你的服务器"裸奔"了多久?

一句话回答:用一台 1核2G 的海外云服务器装好 Prometheus + Grafana + Node Exporter + Alertmanager 四件套,就能把名下所有服务器的 CPU、内存、磁盘、带宽、宕机状态全部可视化,并在出问题时通过 Telegram 第一时间通知你——整套流程大约 30-40 分钟,本文所有命令均可直接复制执行。很多站长把网站搭好后就把服务器丢在一边,直到某天"网站打不开了"才去登录后台,一看磁盘 100%、内存爆了、进程早就挂了,却完全不知道是什么时候发生的。这就是典型的"裸奔":没有监控就没有预警,只有事故。自建监控并不复杂,Prometheus 生态四件套是当前开源监控的事实标准,下面按步骤带你从零搭完。

🚀 还没有海外云服务器?通过 5.chengzicloud.cloud 选购阿里云/AWS/腾讯云国际版,享专属折扣和中文技术支持。

监控系统架构:四个组件各管什么

先花两分钟搞懂架构,后面配置才不会懵:

组件作用装在哪默认端口
Node Exporter采集服务器 CPU/内存/磁盘/网络等系统指标每台被监控的服务器9100
Prometheus定时抓取指标并存储,执行告警规则监控主服务器9090
Grafana把指标画成图表,可视化仪表盘监控主服务器3000
Alertmanager接收 Prometheus 告警并推送到 Telegram/邮件监控主服务器9093

工作流程一句话:Node Exporter 在每台机器上"报数"→ Prometheus 每 15 秒去抓一次并存进自带时序数据库 → 指标超过告警规则阈值时 Prometheus 把告警发给 Alertmanager → Alertmanager 推送到你的 Telegram。Grafana 负责把存储的指标画成漂亮的大屏,随时打开看一眼就知道所有机器健不健康。

服务器配置推荐与价格对比

监控服务本身非常轻量,不用买贵机器。Prometheus 单机版 + Grafana 常驻内存大约 300-500MB,抓取 10 台以内的机器毫无压力:

监控规模推荐配置带宽/流量说明
个人博客/1-3台机器1核2G1M 或 300G/月最省钱方案,完全够用
中小网站群/5-10台机器2核4G3M 或 1T/月推荐起步档,留足余量
企业集群/20-50台机器4核8G5M 或 2T/月指标基数大,建议上 SSD
大规模/100+ 机器8核16G+按量带宽建议上 Thanos/分片方案

💡 新手建议:监控主服务器和网站服务器尽量选同一区域(比如都选香港或新加坡),内网延迟低,抓取更稳定。

主流海外云服务商价格对比如下(均为入门配置档,年付更划算):

服务商月付年付(折扣后)数据中心优点
阿里云国际版 ECS$4.2$3.2/月新加坡/香港/硅谷中文面板、支持支付宝
AWS Lightsail$3.5$3.5/月全球20+区域新用户免费套餐、生态完善
腾讯云国际版 CVM$4.5$3.5/月香港/新加坡/东京低延迟到国内、微信支付
Vultr$6.0$6.0/月全球32个按小时计费、随时销毁
DigitalOcean$6.0$6.0/月全球14个文档最完善、社区教程多

🚀 通过 5.chengzicloud.cloud 购买以上平台均有额外折扣,点击首页查看最新优惠。

以下教程假设:监控主服务器已开通(本文以 2核4G 为例),被监控服务器若干台,系统均为 CentOS 7 或 Ubuntu 22.04,全程使用 root 账号操作。

第一步:系统初始化

新机器先更新系统并装好基础工具(CentOS 7 与 Ubuntu 22.04 命令不同,按你的系统选一组执行):


// CentOS 7
yum install -y epel-release wget tar vim net-tools
yum update -y

// Ubuntu 22.04
apt-get update && apt-get install -y wget tar vim net-tools
apt-get upgrade -y

设置时区并开启 BBR 加速(可选但强烈建议,能明显改善跨境连接速度):


timedatectl set-timezone Asia/Shanghai

// 开启 BBR(CentOS 7 / Ubuntu 22.04 通用)
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p

第二步:安装 Node Exporter(每台被监控的机器都要装)

Node Exporter 是 Prometheus 官方出品的系统指标采集器。进入每一台被监控的服务器,下载安装(v1.8.2 为稳定版,想用新版去 GitHub Releases 换版本号即可):


cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
tar -xzf node_exporter-1.8.2.linux-amd64.tar.gz
mv node_exporter-1.8.2.linux-amd64/node_exporter /usr/local/bin/
node_exporter --version

创建 systemd 服务实现开机自启:


cat > /etc/systemd/system/node_exporter.service <<'EOF'
[Unit]
Description=Node Exporter
After=network.target

[Service]
ExecStart=/usr/local/bin/node_exporter
Restart=always

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now node_exporter

验证指标是否正常输出:


curl -s localhost:9100/metrics | head -5

看到 node_cpu_seconds_total 之类的指标就说明采集成功。这一步要在每一台被监控的服务器上重复执行,包括监控主服务器自己——监控自己同样是刚需。

第三步:安装 Prometheus(监控主服务器)

回到监控主服务器,下载安装 Prometheus(这里用 v2.53.0 稳定版):


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
mkdir -p /usr/local/prometheus /etc/prometheus /var/lib/prometheus
mv prometheus-2.53.0.linux-amd64/prometheus /usr/local/prometheus/
mv prometheus-2.53.0.linux-amd64/promtool /usr/local/prometheus/
mv prometheus-2.53.0.linux-amd64/consoles /etc/prometheus/
mv prometheus-2.53.0.linux-amd64/console_libraries /etc/prometheus/
/usr/local/prometheus/prometheus --version

创建专用运行用户(安全习惯,不用 root 跑服务):


useradd --no-create-home --shell /bin/false prometheus
chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus

创建主配置文件,把上一步装好 Node Exporter 的所有机器 IP 都填进 targets 列表(监控主服务器自己也填 localhost:9100):


cat > /etc/prometheus/prometheus.yml <<'EOF'
global:
  scrape_interval: 15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
    - static_configs:
        - targets: ["localhost:9093"]

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

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

  - job_name: "node"
    static_configs:
      - targets: ["被监控机器1的IP:9100", "被监控机器2的IP:9100"]
EOF

创建 systemd 服务并启动:


cat > /etc/systemd/system/prometheus.service <<'EOF'
[Unit]
Description=Prometheus
After=network.target

[Service]
User=prometheus
Group=prometheus
ExecStart=/usr/local/prometheus/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus/data --storage.tsdb.retention.time=30d
Restart=always

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now prometheus

验证 Prometheus 状态和抓取结果:


systemctl status prometheus
curl -s localhost:9090/api/v1/targets | python3 -m json.tool

看到每个 target 的 health 都是 "up" 就说明抓取正常(如果机器上没装 python3,直接 curl -s localhost:9090/api/v1/targets 看原文也行)。

第四步:配置告警规则

创建规则目录和规则文件,四条规则覆盖最常见故障场景:宕机、CPU 爆满、内存爆满、磁盘写满——磁盘写满是最常见的"网站突然打不开"元凶,务必保留(注意 YAML 缩进必须是两个空格):


mkdir -p /etc/prometheus/rules
cat > /etc/prometheus/rules/node-alerts.yml <<'EOF'
groups:
  - name: node-alerts
    rules:
      - alert: InstanceDown
        expr: up == 0
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "服务器宕机"
          description: "{{ $labels.instance }} 已停止响应超过 2 分钟"
      - alert: HighCPU
        expr: 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "CPU 使用率过高"
          description: "{{ $labels.instance }} CPU 使用率超过 90%"
      - alert: HighMemory
        expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 90
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "内存使用率过高"
          description: "{{ $labels.instance }} 内存使用率超过 90%"
      - alert: DiskAlmostFull
        expr: (1 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"})) * 100 > 85
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "磁盘空间不足"
          description: "{{ $labels.instance }} 根分区使用率超过 85%"
EOF

用 promtool 校验规则语法,没问题就重启 Prometheus 加载:


/usr/local/prometheus/promtool check rules /etc/prometheus/rules/node-alerts.yml
systemctl restart prometheus

第五步:安装 Grafana 并导入仪表盘

Grafana 用官方软件源安装最省事(CentOS 7 用 yum 源,Ubuntu 22.04 用 apt 源):


// CentOS 7
cat > /etc/yum.repos.d/grafana.repo <<'EOF'
[grafana]
name=grafana
baseurl=https://rpm.grafana.com
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://rpm.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOF
yum install -y grafana

// Ubuntu 22.04
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

启动 Grafana:


systemctl enable --now grafana-server

浏览器访问 http://你的服务器IP:3000,首次登录账号密码都是 admin,登录后强制修改密码。接着三步完成连接:

  1. 左侧菜单 Configuration → Data sources → Add data source,选 Prometheus;
  2. URL 填 http://localhost:9090,点击 Save & Test,提示 Success 即连接成功;
  3. 左侧 Dashboards → New → Import,输入官方仪表盘 ID 1860(Node Exporter Full),Load 后数据源选刚才建的那个,Import 完成。

导入后就能看到每台服务器的 CPU、内存、磁盘、网络全维度图表,大屏效果直接拉满。

第六步:安装 Alertmanager 并接入 Telegram 告警

Prometheus 只负责"判断",真正把告警送到你手机的是 Alertmanager。下载安装:


cd /tmp
wget https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz
tar -xzf alertmanager-0.27.0.linux-amd64.tar.gz
mv alertmanager-0.27.0.linux-amd64/alertmanager /usr/local/bin/
alertmanager --version

创建配置。先到 Telegram 找 @BotFather 创建一个 bot 拿到 token,再把你拉进一个群拿到群 ID(群 ID 以 -100 开头,就是 chat_id):


cat > /etc/alertmanager.yml <<'EOF'
global:
  resolve_timeout: 5m

route:
  group_by: ["alertname"]
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 4h
  receiver: "telegram"

receivers:
  - name: "telegram"
    telegram_configs:
      - bot_token: "123456789:你的BOT_TOKEN"
        chat_id: -1001234567890
        api_url: "https://api.telegram.org"
        send_resolved: true
EOF

创建 systemd 服务并启动:


cat > /etc/systemd/system/alertmanager.service <<'EOF'
[Unit]
Description=Alertmanager
After=network.target

[Service]
ExecStart=/usr/local/bin/alertmanager --config.file=/etc/alertmanager.yml
Restart=always

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now alertmanager
systemctl restart prometheus

验证告警链路:随便选一台机器执行 systemctl stop node_exporter,2 分钟后你的 Telegram 应该收到"服务器宕机"告警;重启 node_exporter 后还会收到恢复通知。这一步务必实测,别等真出事了才发现没配通。

第七步:防火墙放行(按需)

如果服务器开了防火墙,只放行必要端口,且 Node Exporter 的 9100 端口只对监控主服务器开放,不要对全网开放:


// CentOS 7(firewalld)
firewall-cmd --permanent --add-port=9090/tcp
firewall-cmd --permanent --add-port=3000/tcp
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address=监控主服务器IP port port="9100" protocol="tcp" accept'
firewall-cmd --reload

// Ubuntu 22.04(ufw)
ufw allow 9090/tcp
ufw allow 3000/tcp
ufw allow from 监控主服务器IP to any port 9100 proto tcp
ufw enable

如果被监控机器没开防火墙,也建议给 Node Exporter 加上 --web.listen-address=内网IP:9100 启动参数,只监听内网,避免 9100 端口暴露在公网被扫描。

第八步:用 Nginx 反代 + 登录认证保护 Grafana

Grafana 默认 3000 端口裸奔,建议用 Nginx 反代并加一层 Basic Auth(先装 Nginx 和 htpasswd 工具):


// CentOS 7
yum install -y nginx httpd-tools
// Ubuntu 22.04
apt-get install -y nginx apache2-utils

生成登录密码文件并写 Nginx 配置:


mkdir -p /etc/nginx
htpasswd -bc /etc/nginx/.htpasswd admin 你的强密码
cat > /etc/nginx/conf.d/monitor.conf <<'EOF'
server {
    listen 80;
    server_name monitor.example.com;

    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/.htpasswd;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
EOF

nginx -t
systemctl enable --now nginx
systemctl reload nginx

之后访问 http://monitor.example.com 会先弹出账号密码框,通过后才进入 Grafana。想上 HTTPS 加密访问,参考文末的 Nginx + Let's Encrypt 教程给这个站点套上免费证书,一分钟搞定。

进阶:还能监控什么

Node Exporter 只是系统层指标。Prometheus 生态有大量官方 exporter,接入方式都是"装 exporter + 在 prometheus.yml 加一个 job",举几个常用的:

监控对象用的 exporter默认端口
MySQL/MariaDBmysqld_exporter9104
Nginxnginx_exporter9113
Redisredis_exporter9121
网站可用性/SSL 证书blackbox_exporter9115
Docker 容器cAdvisor8080

比如监控网站是否在线:用 blackbox_exporter 的 http 探针,每 30 秒探测一次你的网站 URL,返回码不是 200 就触发告警——比被动等用户反馈强一百倍。

常见问题 FAQ

  • Q:监控服务器本身挂了怎么办?
  • A:这是监控的经典悖论。务实做法:① 把监控服务器也纳入云厂商自带的基础监控(阿里云/腾讯云控制台都有免费的主机监控和短信告警);② 用 uptime 类第三方服务盯监控机的 9090/3000 端口;③ 定期做快照,配置都在 /etc/prometheus 和 /etc/grafana 两个目录,备份好就能快速重建。
  • Q:Prometheus 数据存多久?磁盘会不会爆?
  • A:默认保留 15 天,我们启动参数里已改为 30 天。1-5 台机器 30 天数据大约占 1-3GB,基本不用管。想缩短就改 --storage.tsdb.retention.time 参数,想长期留存就配数据目录定期快照或上 Thanos 架构。
  • Q:Grafana 图表是空的,看不到数据?
  • A:按顺序排查:① curl -s localhost:9090/api/v1/targets 看 target 是否 up;② Grafana 数据源 URL 是不是填的 http://localhost:9090;③ 仪表盘是否选对了数据源;④ 时间范围是否对(默认 Last 6 hours)。90% 的情况是数据源没连上或 target 是 down。
  • Q:Telegram 告警收不到?
  • A:三步排查:① 先手动给你的 bot 发一条消息,确认 token 和 chat_id 正确;② 打开 Prometheus 的 9090 端口 /alerts 页面看规则是否触发;③ 看 Alertmanager 日志 journalctl -u alertmanager -f 有没有报错。另外 repeat_interval 别设太短,避免告警轰炸被 Telegram 限流。
  • Q:阿里云/腾讯云自带监控,还要自建吗?
  • A:两者互补。云厂商监控只能看单台机器的基础指标,同时有阿里云、AWS、腾讯云的机器时无法统一查看,也没有 Grafana 这种好看的大屏,告警通道也受限。自建 Prometheus 可以统一纳管所有厂商的机器,一套面板看全部,这正是混合云运维的标准姿势。
  • Q:被监控机器是 Windows 能装吗?
  • A:可以。Windows 用官方提供的 windows_exporter,下载安装后监听 9182 端口,同样在 prometheus.yml 加一行 target 即可,配置思路完全一样。
  • Q:1核2G 的机器跑监控会影响业务吗?
  • A:监控服务常驻内存约 300-500MB,CPU 占用通常低于 5%,对 1核2G 机器有影响但可控。更稳妥的做法是买一台独立的 1核2G 机器专做监控,一年也就 40 美元左右,参考上面的价格表,还能顺手跑些运维脚本。

🚀 想让监控服务器和业务服务器同区域、低延迟互通?通过 5.chengzicloud.cloud 购买阿里云/AWS/腾讯云国际版服务器,全程中文支持,享专属折扣。

总结

自建监控 = 装四个组件 + 配一个文件 + 导入一张仪表盘:Node Exporter 负责采集(每台机器装一个)、Prometheus 负责存储与判断、Grafana 负责好看、Alertmanager 负责喊你。全部流程 30-40 分钟,之后服务器出任何问题,你都会在用户发现之前收到 Telegram 通知。强烈建议装完就把"磁盘写满"和"宕机"两条规则各实测一遍,确认告警真的能收到——监控系统的价值不在于"装好了",而在于"坏的时候真的叫得醒你"。

建议搭配阅读:监控同样装在海外云服务器上,选购与安全初始化参考 海外云服务器选购避坑指南;给 Grafana 套 HTTPS 保护参考 Nginx 反向代理 + Let's Encrypt 免费 SSL 教程;嫌命令行麻烦的读者可以看 宝塔面板安装+建站一站式教程,面板自带监控模块。

延伸阅读:

本文由 5.chengzicloud.cloud 提供,点击访问首页了解更多海外云服务器部署方案和专属优惠。