
监控您的 VPS 对任何生产工作负载都至关重要。本指南指导您设置 Grafana 和 Prometheus — 当今最强大的开源监控堆栈。您将有一个漂亮的仪表板,显示实时 CPU、RAM、磁盘和网络指标,自动告警在一小时内配置完毕。
什么是 Grafana 和 Prometheus
在深入安装之前,以下是这些组件如何一起工作的:
- Prometheus — 一个时间序列数据库,以定义的间隔(默认每 15 秒)从导出器抓取指标,并以其内部时间序列格式存储它们
- Node Exporter — 一个安装在您服务器上的轻量级代理,收集操作系统级指标,如 CPU 使用率、内存、磁盘 I/O 和网络流量,在端口 9100 上公开它们
- Grafana — 一个可视化平台,连接到 Prometheus 作为数据源并呈现漂亮的仪表板,内置对警报规则和通知渠道的支持
数据流:Node Exporter (端口 9100) → Prometheus 抓取 (端口 9090) → Grafana 可视化 (端口 3000)
要求
在开始之前,请确保以下条件:
- Ubuntu 20.04 LTS 或 22.04 LTS VPS
- 至少 1 GB RAM(建议 2 GB 以获得舒适的性能)
- 所需端口:9090 (Prometheus)、3000 (Grafana)、9100 (Node Exporter — 仅限内部)
- Root 或 sudo 访问权限
安装 Prometheus
从 GitHub Releases 下载 Prometheus 二进制文件并配置 systemd 服务:
# Create a dedicated system user
sudo useradd --no-create-home --shell /bin/false prometheus
# Download Prometheus
PROM_VER="2.52.0"
wget https://github.com/prometheus/prometheus/releases/download/v${PROM_VER}/prometheus-${PROM_VER}.linux-amd64.tar.gz
tar xzf prometheus-${PROM_VER}.linux-amd64.tar.gz
cd prometheus-${PROM_VER}.linux-amd64
# Copy binaries and config files
sudo cp prometheus /usr/local/bin/
sudo cp promtool /usr/local/bin/
sudo mkdir /etc/prometheus /var/lib/prometheus
sudo cp -r consoles/ console_libraries/ /etc/prometheus/
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus创建 systemd 服务文件:
sudo nano /etc/systemd/system/prometheus.service[Unit]
Description=Prometheus Monitoring
After=network.target
[Service]
User=prometheus
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--storage.tsdb.retention.time=30d \
--web.listen-address=0.0.0.0:9090
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus
sudo systemctl status prometheus需要了解的基本 PromQL 查询
PromQL(Prometheus 查询语言)是如何从 Prometheus 中提取特定指标以在 Grafana 面板中显示的方式。预构建的仪表板涵盖了大多数需求,但了解一些核心查询可以让您构建自定义面板和警报规则:
| 指标 | PromQL 查询 | 显示内容 |
|---|---|---|
| CPU 使用率 % | 100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) | 过去 5 分钟内使用的 CPU % |
| RAM 使用率 % | (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 | 当前正在使用的 RAM 百分比 |
| 磁盘空闲 % | (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 | 根分区上的空闲磁盘空间 |
| 网络输入 | rate(node_network_receive_bytes_total{device="eth0"}[5m]) | 入站流量(字节/秒) |
即使使用仪表板 ID 1860,了解这些查询模式对于构建自定义面板和编写有针对性的警报规则非常有价值。
安装 Node Exporter
Node Exporter 收集操作系统指标并使其可供 Prometheus 抓取:
NODE_VER="1.8.1"
wget https://github.com/prometheus/node_exporter/releases/download/v${NODE_VER}/node_exporter-${NODE_VER}.linux-amd64.tar.gz
tar xzf node_exporter-${NODE_VER}.linux-amd64.tar.gz
sudo cp node_exporter-${NODE_VER}.linux-amd64/node_exporter /usr/local/bin/
sudo useradd --no-create-home --shell /bin/false node_exportersudo nano /etc/systemd/system/node_exporter.service[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter配置 Prometheus 抓取配置
编辑 /etc/prometheus/prometheus.yml 使 Prometheus 知道从 Node Exporter 抓取:
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']sudo systemctl restart prometheus
# Verify at http://YOUR_VPS_IP:9090/targets
# Both targets should show status UP安装 Grafana
使用官方 Grafana APT 储存库以便于更新:
sudo apt-get install -y apt-transport-https software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install -y grafana
sudo systemctl daemon-reload
sudo systemctl enable grafana-server
sudo systemctl start grafana-server打开浏览器并导航到 http://YOUR_VPS_IP:3000。使用用户名 admin 和密码 admin 登录。Grafana 将立即提示您设置新密码。
将 Grafana 连接到 Prometheus 数据源
- 转到配置 → 数据源
- 点击添加数据源并选择Prometheus
- 将 URL 设置为
http://localhost:9090 - 点击保存和测试 — 您应该看到"数据源正在工作"
导入仪表板 Node Exporter Full (ID 1860)
Grafana.com 为 Node Exporter 提供预构建仪表板,具有数百个现成面板:
- 转到仪表板 → 导入
- 输入仪表板 ID:1860
- 点击加载
- 选择您创建的 Prometheus 数据源
- 点击导入
您将立即看到一个全面的仪表板,显示 CPU 使用情况、内存利用率、磁盘 I/O、网络带宽和数百个其他指标 — 无需 PromQL 查询。
添加特定应用程序的导出器
Node Exporter 仅涵盖操作系统级指标。当您的 VPS 运行特定服务时,其他导出器会扩展到应用程序层的可见性:
- MySQL / MariaDB 导出器 — 跟踪查询吞吐量、慢查询和连接池使用情况
- Nginx 导出器 — 通过 stub_status 模块监控请求速率、活跃连接和错误率
- Blackbox 导出器 — 探测 HTTP 和 TCP 端点以验证网站是否正确响应;非常适合外部运行状态检查
- Redis 导出器 — 报告 Redis 缓存实例的命中率、内存使用和连接的客户端数
每个导出器在其自己的端口上公开指标。在 prometheus.yml 的 scrape_configs 部分添加相应的条目:
# Add Nginx Exporter to scrape_configs
- job_name: 'nginx'
static_configs:
- targets: ['localhost:9113']
# Add MySQL Exporter to scrape_configs
- job_name: 'mysql'
static_configs:
- targets: ['localhost:9104']设置警报规则和通知渠道
配置警报以在 CPU 或内存使用超过阈值时通知您:
电子邮件提醒
# Edit /etc/grafana/grafana.ini
[smtp]
enabled = true
host = smtp.gmail.com:587
user = [email protected]
password = your_app_password
from_address = [email protected]Telegram 提醒
- 通过 @BotFather 创建 Telegram 机器人并获取您的机器人令牌
- 转到警报 → 联系点 → 新建联系点
- 选择Telegram,输入您的机器人令牌和聊天 ID
- 在任何仪表板面板中创建警报规则 — 例如:CPU > 85% 持续 5 分钟
专业提示:使用来自 Grafana.com 的仪表板 ID 1860"Node Exporter Full" — 此预构建仪表板包含 200 多个指标图表,不需要 PromQL 配置。这是快速启动并运行完整 VPS 可见性的最快方式。
管理 Prometheus 数据保留和备份
Prometheus 将时间序列数据存储在 /var/lib/prometheus 中,此目录会随时间增长。从一开始就规划存储可以防止磁盘满的问题:
调整保留期
之前配置的 systemd 服务设置了 30 天的保留。您可以根据可用磁盘空间调整它:
# Inside prometheus.service — adjust retention as needed
--storage.tsdb.retention.time=15d # 15 days (~2–3 GB for one server)
--storage.tsdb.retention.time=90d # 90 days (~6–9 GB for one server)
--storage.tsdb.retention.size=10GB # hard size cap — auto-purges oldest data备份 Prometheus 数据
最清洁的方法是通过 Prometheus admin API 触发快照,然后将其同步到场外存储:
# Create a snapshot (requires --web.enable-admin-api flag in prometheus.service)
curl -XPOST http://localhost:9090/api/v1/admin/tsdb/snapshot
# List available snapshots
ls /var/lib/prometheus/snapshots/
# Sync to a remote backup server
rsync -avz /var/lib/prometheus/snapshots/ backup@backupserver:/prometheus-backup/至少每周备份一次,并导出 Grafana 仪表板 JSON(共享 → 导出 → 保存到文件) — 仪表板配置存储在 Grafana 自己的数据库中,而不是 Prometheus 数据中。
防火墙和安全加固
仅在公共网络上公开 Grafana 端口。Node Exporter 和 Prometheus 绝不应该可从互联网访问:
sudo ufw allow 3000/tcp # Grafana only — expose this port
# Do NOT open ports 9090 or 9100 to the public — they expose sensitive data
sudo ufw reload为了增加安全性,将 Grafana 放在具有 HTTPS 和基本身份验证的 Nginx 反向代理后面,或使用 UFW 规则按 IP 限制访问。
获取 VPS 来运行您的监控堆栈
AsiaGB VPS 配备 2 GB 或更多 RAM,可平稳运行 Grafana、Prometheus 和 Node Exporter — 具有 99% 正常运行时间保证和高速 SSD 存储,起价为 500 泰铢/月。
查看 VPS 方案