- 作者:小梦
- 发表时间:2026-03-05
- 来源:原创
📈 引言:没有监控的服务器如同盲人摸象
当你将应用部署到云服务器后,最担心的是什么?无非是半夜收到用户投诉“网站打不开”,而你却对服务器的健康状况一无所知——CPU是否跑满?内存是否泄漏?磁盘是否写满?在故障发生时,如果能提前预警、快速定位,就能将损失降到最低。这就是监控系统的价值。
Prometheus 作为云原生时代的监控事实标准,以其强大的多维数据模型、灵活的查询语言(PromQL)和可靠的告警能力,成为监控云服务器的首选工具。本文将带你从零开始,在云服务器上搭建一套完整的 Prometheus 监控体系,涵盖指标采集、告警配置与可视化,让你真正掌控服务器的每一寸“脉搏”。
🔍 一、Prometheus 核心架构与原理
Prometheus 采用经典的“拉取”模型:监控目标暴露 HTTP 端点,Prometheus 服务端定期主动拉取指标数据。这种设计相比推模式,更容易控制采集频率和可靠性。其核心组件包括:
- Prometheus Server: 核心服务,负责采集、存储指标数据(TSDB),并提供 PromQL 查询接口。
- Exporter: 负责将各种系统或服务的指标转换为 Prometheus 可识别的格式,如 Node Exporter(主机指标)、MySQL Exporter 等。
- Alertmanager: 处理告警规则产生的告警,进行分组、抑制、静默,并发送到邮件、钉钉、Slack 等接收端。
- Grafana: 强大的可视化面板,从 Prometheus 查询数据并展示仪表盘。
Prometheus 支持四种指标类型:Counter(只增计数器)、Gauge(可增可减)、Histogram(直方图)和 Summary(摘要)。在实际监控中,Node Exporter 暴露的指标多数为 Gauge 类型,如 node_cpu_seconds_total 是一个 Counter,而 node_memory_MemAvailable_bytes 则是 Gauge。
🚀 二、实战部署:Prometheus Server 与 Node Exporter
本次实战基于 Ubuntu 20.04 LTS 云服务器,我们将通过二进制方式安装 Prometheus v2.45 和 Node Exporter v1.6。你也可以使用 Docker 或包管理器,但二进制更直观。
1. 下载并启动 Prometheus Server
# 下载最新版
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
cd prometheus-2.45.0.linux-amd64
# 创建系统用户
sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo cp prometheus promtool /usr/local/bin/
sudo cp -r consoles console_libraries /etc/prometheus/
# 修改配置文件 /etc/prometheus/prometheus.yml,默认即可,后续添加 target
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
# 创建 systemd 服务文件 /etc/systemd/system/prometheus.service
# 启动并设置开机自启
sudo systemctl start prometheus
sudo systemctl enable prometheus
2. 部署 Node Exporter
# 下载 Node Exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz
tar xvf node_exporter-1.6.0.linux-amd64.tar.gz
sudo cp node_exporter-1.6.0.linux-amd64/node_exporter /usr/local/bin/
sudo useradd --no-create-home --shell /bin/false node_exporter
# 创建 systemd 服务文件 /etc/systemd/system/node_exporter.service
# 启动并设置开机自启
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
# 验证指标端点
curl http://localhost:9100/metrics
Node Exporter 默认监听 9100 端口,暴露了大量主机指标,如 CPU、内存、磁盘、网络等。接下来,我们需要让 Prometheus 发现这个目标。
🎯 三、配置监控目标与关键指标
编辑 Prometheus 配置文件 /etc/prometheus/prometheus.yml,在 scrape_configs 中添加 Node Exporter 任务:
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100'] # 本机 Node Exporter
重启 Prometheus 后,即可在 Targets 页面(http://服务器IP:9090/targets)看到状态为 UP。现在我们可以查询一些关键指标,例如:
| 指标名 | 说明 | 类型 |
|---|---|---|
| node_cpu_seconds_total | CPU 累计使用时间,用于计算使用率 | Counter |
| node_memory_MemAvailable_bytes | 可用内存字节数 | Gauge |
| node_filesystem_avail_bytes | 文件系统可用空间 | Gauge |
| node_network_receive_bytes_total | 网络接收字节累计 | Counter |
通过这些指标,我们可以计算出 CPU 使用率、内存使用率、磁盘使用率等。例如,CPU 使用率公式:100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)。
⚠️ 四、告警配置:第一时间发现问题
监控的目的是在异常发生时及时通知。Prometheus 通过定义告警规则,将触发条件发送到 Alertmanager。
1. 定义告警规则文件
创建文件 /etc/prometheus/alert_rules.yml,添加如下规则:
groups:
- name: host_alerts
rules:
- alert: HighCPULoad
expr: 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
annotations:
summary: "CPU 使用率超过 80%"
description: "{{ $labels.instance }} CPU 使用率已达 {{ $value }}%"
- alert: DiskSpaceLow
expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 10
for: 5m
annotations:
summary: "根分区磁盘空间不足 10%"
description: "{{ $labels.instance }} 可用空间仅 {{ $value }}%"
然后在 prometheus.yml 中引入该文件:
rule_files:
- "alert_rules.yml"
2. 部署 Alertmanager
下载 Alertmanager,配置接收器(如企业微信、邮件)。以下是一个简单的邮件配置示例:
global:
smtp_smarthost: 'smtp.example.com:587'
smtp_from: 'alert@example.com'
smtp_auth_username: 'alert@example.com'
smtp_auth_password: 'password'
route:
group_by: ['alertname']
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: 'admin@example.com'
启动 Alertmanager 后,在 Prometheus 的 prometheus.yml 中配置 alertmanager 地址,重启即可生效。
📊 五、可视化:Grafana 让数据说话
数据有了,但命令行查询不够直观。Grafana 是 Prometheus 的最佳搭档,提供丰富的图表和仪表盘。
1. 安装 Grafana
sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install grafana
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
访问 http://服务器IP:3000,默认账号密码 admin/admin。
2. 添加 Prometheus 数据源并导入仪表盘
在 Grafana 中添加 Prometheus 数据源,URL 填写 http://localhost:9090。然后导入官方 Node Exporter 仪表盘(ID 通常为 1860),即可看到完整的服务器监控视图,包括 CPU、内存、磁盘、网络、进程等。
下图展示了 Grafana 仪表盘的效果,将枯燥的指标转化为直观的曲线和数字,运维效率大幅提升。
✅ 总结:监控是一切的开始
至此,我们已经在云服务器上搭建了一套完整的 Prometheus 监控体系,实现了主机指标的自动采集、告警通知和可视化展示。这套方案具备以下优势:
- **开源免费**,社区活跃,生态丰富;
- **易于扩展**,可随时添加更多 Exporter 监控数据库、中间件;
- **高可靠性**,Pull 模型和本地存储使得监控系统本身不易成为瓶颈;
- **数据驱动决策**,通过历史趋势分析,提前扩容或优化代码。
当然,监控体系建设不是一劳永逸的。你需要根据业务变化持续调整告警阈值、优化指标采集频率、关注存储容量。未来还可以引入服务发现(如 Consul)自动发现新服务器,或者将 Prometheus 与 Kubernetes 集成,实现容器化监控。