Prometheus Grafana实时服务器监控

当您的基础设施超过几台服务器后,通过SSH进行手动监控变得不切实际。Prometheus + Grafana是业界标准的开源监控和可视化解决方案。Prometheus充当时间序列数据库,从您的服务器和应用程序收集指标。Grafana是美观、交互式的前端,将原始指标转变为富有洞察力的仪表板。两者结合使用,能够实现实时监控、历史分析和智能告警——这些都是运行可靠系统的关键。

为什么选择Prometheus + Grafana?

传统方法是通过SSH登录每台服务器,然后运行 topdffree -h 来获取系统信息。这种方法不具可扩展性。Prometheus和Grafana一次性解决了多个问题:

系统要求

第一步 — 安装Prometheus

创建prometheus用户和目录

sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /etc/prometheus /var/lib/prometheus

下载并提取Prometheus

cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
tar -xvf prometheus-2.45.0.linux-amd64.tar.gz

# 复制二进制文件到系统路径
sudo cp prometheus-2.45.0.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-2.45.0.linux-amd64/promtool /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool

# 复制控制台文件
sudo cp -r prometheus-2.45.0.linux-amd64/consoles /etc/prometheus
sudo cp -r prometheus-2.45.0.linux-amd64/console_libraries /etc/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus

创建Prometheus配置文件

sudo tee /etc/prometheus/prometheus.yml > /dev/null << 'EOF'
global:
  scrape_interval: 15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
    - static_configs:
        - targets: []

rule_files:
  - '/etc/prometheus/alert.rules.yml'

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

  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']

  - job_name: 'remote-vps-1'
    static_configs:
      - targets: ['192.168.1.100:9100']

  - job_name: 'remote-vps-2'
    static_configs:
      - targets: ['192.168.1.101:9100']

EOF
sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml

为Prometheus创建systemd服务

sudo tee /etc/systemd/system/prometheus.service > /dev/null << 'EOF'
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/var/lib/prometheus/ \
  --web.console.templates=/etc/prometheus/consoles \
  --web.console.libraries=/etc/prometheus/console_libraries

Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus

验证Prometheus是否正在运行

curl -s http://localhost:9090
# 应返回HTML响应
# 在浏览器访问 http://YOUR_VPS_IP:9090

注意:Prometheus可以监控自身,但要监控其他服务器,您必须在每台目标服务器上安装Node Exporter。

第二步 — 安装Node Exporter(在每台被监控的服务器上)

cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar -xvf node_exporter-1.6.1.linux-amd64.tar.gz

sudo cp node_exporter-1.6.1.linux-amd64/node_exporter /usr/local/bin/
sudo chown root:root /usr/local/bin/node_exporter

# 创建systemd服务
sudo tee /etc/systemd/system/node_exporter.service > /dev/null << 'EOF'
[Unit]
Description=Node Exporter
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/node_exporter

Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter

验证Node Exporter

curl -s http://localhost:9100/metrics | head -20
# 应显示metrics,如node_cpu_seconds_total、node_memory_MemTotal_bytes等

第三步 — 安装Grafana

添加Grafana仓库并安装

sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
sudo apt-get update
sudo apt-get install -y grafana

启动Grafana服务

sudo systemctl start grafana-server
sudo systemctl enable grafana-server

sudo systemctl status grafana-server

访问Grafana仪表板

# 在浏览器打开 http://YOUR_VPS_IP:3000
# 默认凭证:
#   用户名: admin
#   密码: admin
# 首次登录时更改密码

第四步 — 添加Prometheus作为数据源

  1. 在Grafana中:配置(齿轮图标)→ 数据源
  2. 点击"添加数据源"
  3. 选择"Prometheus"
  4. 将URL设置为:http://localhost:9090
  5. 点击"保存并测试" → 应显示"Data source is working"

第五步 — 创建您的第一个仪表板

选项A:从头创建

转到 仪表板 → 创建 → 仪表板 → 添加面板(包含PromQL查询)

选项B:导入预构建的仪表板(推荐新手)

# 在Grafana中:+ (加号) → 导入
# 输入仪表板ID:1860(Node Exporter Full)
# 选择Prometheus数据源
# 点击导入
# 现在您拥有一个完整的仪表板,显示CPU、内存、磁盘、网络指标

第六步 — 设置告警规则

创建告警规则文件

sudo tee /etc/prometheus/alert.rules.yml > /dev/null << 'EOF'
groups:
  - name: System Alerts
    interval: 30s
    rules:
      - alert: HighCPUUsage
        expr: (100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)) > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "{{ $labels.instance }} CPU使用率过高"
          description: "{{ $labels.instance }} CPU使用率为 {{ $value }}%"

      - alert: HighMemoryUsage
        expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "{{ $labels.instance }} 内存使用率过高"

      - alert: HighDiskUsage
        expr: (1 - (node_filesystem_avail_bytes{fstype!~"tmpfs"} / node_filesystem_size_bytes)) * 100 > 90
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "{{ $labels.instance }} 磁盘使用率为 {{ $value | humanize }}%"

EOF
sudo chown prometheus:prometheus /etc/prometheus/alert.rules.yml

重新加载Prometheus

sudo systemctl reload prometheus

# 验证告警:http://YOUR_VPS_IP:9090/alerts

故障排查常见问题

Prometheus无法连接到Node Exporter

# 检查Prometheus日志
sudo journalctl -u prometheus -n 50

# 如果是远程服务器,允许防火墙
sudo ufw allow 9100/tcp

# 验证配置文件语法
sudo -u prometheus /usr/local/bin/promtool check config /etc/prometheus/prometheus.yml

Grafana显示"无数据"

# 验证时间范围是否足够大(默认:最后6小时)
# 检查面板查询中的PromQL语法
# 确认Prometheus有数据:curl http://localhost:9090/api/v1/targets

告警不工作

# 验证告警规则语法
sudo -u prometheus /usr/local/bin/promtool check rules /etc/prometheus/alert.rules.yml

# 在Prometheus UI中测试表达式
# 访问 http://YOUR_VPS_IP:9090/graph
# 尝试查询:avg(rate(node_cpu_seconds_total{mode=\"user\"}[5m]))

下一步:配置Alertmanager

上面的告警规则在Prometheus中本地触发,但不会发送通知。要将告警发送到Slack、Email或PagerDuty,您需要Alertmanager——一个处理告警路由和通知的配套组件。这是一个更高级的主题,但上述的Prometheus + Grafana + Node Exporter已为大多数用例提供了坚实的监控基础。

需要用于运行Prometheus + Grafana的VPS吗?

AsiaGB提供功能强大的Linux VPS,具有完整的root访问权限和SSD存储,非常适合运行监控基础设施。每月仅需500泰铢起,提供99%正常运行时间保证。

查看VPS套餐

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