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% 的循环折扣。