Install Grafana and Prometheus on Ubuntu VPS for real-time monitoring

监控您的 VPS 对任何生产工作负载都至关重要。本指南指导您设置 Grafana 和 Prometheus — 当今最强大的开源监控堆栈。您将有一个漂亮的仪表板,显示实时 CPU、RAM、磁盘和网络指标,自动告警在一小时内配置完毕。

什么是 Grafana 和 Prometheus

在深入安装之前,以下是这些组件如何一起工作的:

数据流:Node Exporter (端口 9100) → Prometheus 抓取 (端口 9090) → Grafana 可视化 (端口 3000)

要求

在开始之前,请确保以下条件:

安装 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.target
sudo 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_exporter
sudo 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.target
sudo 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 数据源

  1. 转到配置 → 数据源
  2. 点击添加数据源并选择Prometheus
  3. 将 URL 设置为 http://localhost:9090
  4. 点击保存和测试 — 您应该看到"数据源正在工作"

导入仪表板 Node Exporter Full (ID 1860)

Grafana.com 为 Node Exporter 提供预构建仪表板,具有数百个现成面板:

  1. 转到仪表板 → 导入
  2. 输入仪表板 ID:1860
  3. 点击加载
  4. 选择您创建的 Prometheus 数据源
  5. 点击导入

您将立即看到一个全面的仪表板,显示 CPU 使用情况、内存利用率、磁盘 I/O、网络带宽和数百个其他指标 — 无需 PromQL 查询。

添加特定应用程序的导出器

Node Exporter 仅涵盖操作系统级指标。当您的 VPS 运行特定服务时,其他导出器会扩展到应用程序层的可见性:

每个导出器在其自己的端口上公开指标。在 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 提醒

  1. 通过 @BotFather 创建 Telegram 机器人并获取您的机器人令牌
  2. 转到警报 → 联系点 → 新建联系点
  3. 选择Telegram,输入您的机器人令牌和聊天 ID
  4. 在任何仪表板面板中创建警报规则 — 例如: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 方案

查看泰国VPS主机全部套餐 →