Prometheus 服务器监控系统搭建教程

Prometheus 是一个开源的系统监控和告警工具包,最初由 SoundCloud 开发,现已成为 CNCF 毕业项目。它采用拉取(pull)模式采集指标数据,内置强大的查询语言 PromQL,并可与 Grafana 无缝集成实现数据可视化。本文将在搬瓦工 VPS 上完成 Prometheus 的完整部署。

一、环境准备

  • 操作系统:Ubuntu 20.04+ 或 Debian 11+(本文以 Ubuntu 22.04 为例)。
  • 内存:最低 512MB,建议 1GB 以上(监控目标越多需要的内存越大)。
  • 磁盘:根据数据保留周期预留空间,每秒采集 1000 个样本大约消耗 1-2 GB/天。
  • 端口:Prometheus 默认使用 9090 端口。

二、创建系统用户

出于安全考虑,为 Prometheus 创建一个专用的系统用户:

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

三、下载并安装 Prometheus

3.1 下载最新版本

cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.51.0/prometheus-2.51.0.linux-amd64.tar.gz
tar xzf prometheus-2.51.0.linux-amd64.tar.gz
cd prometheus-2.51.0.linux-amd64

3.2 安装二进制文件

cp prometheus promtool /usr/local/bin/
cp -r consoles console_libraries /etc/prometheus/
chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool
chown -R prometheus:prometheus /etc/prometheus/consoles /etc/prometheus/console_libraries

四、配置 Prometheus

4.1 创建主配置文件

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

alerting:
  alertmanagers:
    - static_configs:
        - targets:
          - localhost:9093

rule_files:
  - "alert_rules.yml"

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

  - job_name: "node"
    static_configs:
      - targets: ["localhost:9100"]
EOF

chown prometheus:prometheus /etc/prometheus/prometheus.yml

4.2 验证配置文件

promtool check config /etc/prometheus/prometheus.yml

五、创建 Systemd 服务

cat > /etc/systemd/system/prometheus.service <<EOF
[Unit]
Description=Prometheus Monitoring System
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 \\
  --storage.tsdb.retention.time=30d \\
  --web.enable-lifecycle
ExecReload=/bin/kill -HUP \$MAINPID
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target
EOF

启动 Prometheus

systemctl daemon-reload
systemctl start prometheus
systemctl enable prometheus
systemctl status prometheus

六、使用 Docker 安装

如果已安装 Docker,也可以使用容器方式部署:

mkdir -p /opt/prometheus
# 将 prometheus.yml 放入 /opt/prometheus/ 目录

docker run -d \
  --name prometheus \
  --restart unless-stopped \
  -p 9090:9090 \
  -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
  -v prometheus-data:/prometheus \
  prom/prometheus:latest \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.retention.time=30d

七、配置告警规则

创建告警规则文件 /etc/prometheus/alert_rules.yml

cat > /etc/prometheus/alert_rules.yml <<EOF
groups:
  - name: server_alerts
    rules:
      - alert: InstanceDown
        expr: up == 0
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "实例 {{ \$labels.instance }} 不可达"
          description: "{{ \$labels.instance }} 已离线超过 2 分钟。"

      - alert: HighCpuUsage
        expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "实例 {{ \$labels.instance }} CPU 使用率过高"
          description: "CPU 使用率超过 80% 已持续 5 分钟。"

      - alert: HighMemoryUsage
        expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "实例 {{ \$labels.instance }} 内存使用率过高"
          description: "内存使用率超过 85% 已持续 5 分钟。"

      - alert: DiskSpaceLow
        expr: (1 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"})) * 100 > 85
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "实例 {{ \$labels.instance }} 磁盘空间不足"
          description: "根分区使用率超过 85%。"
EOF

chown prometheus:prometheus /etc/prometheus/alert_rules.yml

验证告警规则

promtool check rules /etc/prometheus/alert_rules.yml

八、数据保留与存储优化

Prometheus 默认保留 15 天的数据,可以通过启动参数调整:

  • --storage.tsdb.retention.time=30d:按时间保留 30 天。
  • --storage.tsdb.retention.size=10GB:按大小保留最多 10GB。

查看当前存储使用情况:

du -sh /var/lib/prometheus/

九、与 Grafana 集成

安装好 Grafana 后,在 Grafana 中添加 Prometheus 数据源,URL 填写 http://localhost:9090。推荐导入以下常用仪表板:

  • 仪表板 ID 1860:Node Exporter Full,展示详细的系统指标。
  • 仪表板 ID 3662:Prometheus 2.0 Overview,展示 Prometheus 自身状态。

十、安全配置

10.1 启用基本认证

# 安装密码生成工具
apt install apache2-utils -y
htpasswd -nBC 12 "" | tr -d ':\n' > /tmp/pass.txt

# 创建 web 配置文件
cat > /etc/prometheus/web.yml <<EOF
basic_auth_users:
  admin: YOUR_BCRYPT_HASH_HERE
EOF

# 在 prometheus.service 的 ExecStart 中添加:
# --web.config.file=/etc/prometheus/web.yml

10.2 防火墙配置

# 仅允许本机和 Grafana 服务器访问
ufw allow from 127.0.0.1 to any port 9090
ufw allow from YOUR_GRAFANA_IP to any port 9090

总结

Prometheus 是构建现代监控体系的基础。部署完成后,建议继续安装 Node Exporter 采集系统指标、配置 AlertManager 接收告警通知,并通过 Grafana 实现数据可视化。选购搬瓦工 VPS 请参考 全部方案,使用优惠码 NODESEEK2026 可享受 6.77% 的循环折扣。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。