2026 Prometheus 自建监控系统:Docker 部署实现服务器全方位监控

1579 字
8 分钟
2026 Prometheus 自建监控系统:Docker 部署实现服务器全方位监控

你的服务器是不是也经常这样:半夜被报警短信吵醒,登录一看 CPU 100%,却不知道刚才发生了什么?或者想排查性能瓶颈,翻遍系统日志也找不到头绪看 CPU 100%,却不知道刚才发生了什么?或者想排查性能瓶颈,翻遍系统日志也找不到头绪?

Prometheus 就是为了解决这种问题而生的。它是一个用 Go 语言编写的开源监控系统,由 CNCF 孵化,现在已经是云原生监控的事实标准。无论是单台 VPS 还是上千节点的 Kubernetes 集群,Prometheus 都能搞定。

而且 Go 写的服务就是香:单二进制文件、超低内存占用、开箱即用。用 Docker 部署 Prometheus 只需两条命令,在 1 核 2G 的廉价 VPS 上都能跑得飞起。


一、Prometheus 监控体系架构#

Prometheus 采用「拉模型」采集监控数据。它定期从被监控的目标(称为 Targets)拉取指标数据,存储在本地时序数据库中。

核心组件#

组件作用Docker 镜像
Prometheus Server核心引擎,采集和存储指标prom/prometheus
Node Exporter采集服务器硬件和 OS 指标prom/node-exporter
cAdvisor采集容器运行指标(可选)gcr.io/cadvisor/cadvisor
Alertmanager告警管理和通知分发prom/alertmanager
Grafana可视化仪表盘(需另部署)grafana/grafana

监控指标分类#

指标类型采集来源示例
CPUNode Exporternode_cpu_seconds_total
内存Node Exporternode_memory_MemAvailable_bytes
磁盘Node Exporternode_filesystem_avail_bytes
网络Node Exporternode_network_receive_bytes_total
进程Node Exporternode_processes_pids
容器cAdvisorcontainer_cpu_usage_seconds_total
自定义业务代码接入自行定义指标

二、Docker Compose 一键部署#

这是目前最推荐的部署方式。一个 docker-compose.yml 文件,启动所有组件。

准备工作#

Terminal window
# 创建监控专用目录
mkdir -p ~/monitoring/prometheus ~/monitoring/grafana
cd ~/monitoring

docker-compose.yml#

version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
ports:
- \"9090:9090\"
volumes:
- ./prometheus:/etc/prometheus
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=15d'
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
- '--web.console.templates=/usr/share/prometheus/consoles'
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
restart: unless-stopped
ports:
- \"9100:9100\"
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--path.rootfs=/rootfs'
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
volumes:
prometheus_data:

Prometheus 配置文件#

prometheus/prometheus.yml

global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
# Prometheus 自身指标
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# 服务器节点指标
- job_name: 'node'
static_configs:
- targets: ['node-exporter:9100']
# 如需监控其他服务器,在这里添加
# - job_name: 'remote-node'
# static_configs:
# - targets: ['192.168.1.100:9100', '192.168.1.101:9100']
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager:9093']
rule_files:
- 'alerts.yml'

告警规则#

prometheus/alerts.yml

groups:
- name: node_alerts
rules:
- alert: HighCPUUsage
expr: 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: \"CPU 使用率超过 80% ({{ $value }}%)\"
description: \"实例 {{ $labels.instance }} CPU 使用率已超过 80% 持续 5 分钟\"
- alert: DiskSpaceLow
expr: (node_filesystem_avail_bytes{mountpoint=\"/\"} / node_filesystem_size_bytes{mountpoint=\"/\"}) * 100 < 10
for: 5m
labels:
severity: critical
annotations:
summary: \"磁盘空间不足 (剩余 {{ $value | humanizePercentage }})\"
description: \"实例 {{ $labels.instance }} 根分区剩余空间不足 10%\"
- alert: MemoryHigh
expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85
for: 5m
labels:
severity: warning
annotations:
summary: \"内存使用率超过 85% ({{ $value }}%)\"
description: \"实例 {{ $labels.instance }} 内存使用率已超过 85%\"

启动#

Terminal window
docker compose up -d

访问 http://你的IP:9090,Prometheus Web UI 页面就出来了。在查询框输入 up,如果能看到 1 值的指标,说明采集成功了。


三、Node Exporter 详解#

Node Exporter 是 Prometheus 生态中最常用的指标采集器,它暴露了服务器几乎所有的底层指标。

常用 PromQL 查询#

你想看什么PromQL 查询
CPU 使用率100 - (avg by (instance) (rate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)
内存使用率(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100
磁盘使用率(node_filesystem_avail_bytes{mountpoint=\"/\"} / node_filesystem_size_bytes{mountpoint=\"/\"}) * 100
磁盘 IOrate(node_disk_io_time_seconds_total[5m])
网络流量rate(node_network_receive_bytes_total[5m])
系统负载node_load15
运行时间time() - node_boot_time_seconds

多服务器监控#

要监控多台服务器,只需在每台机器上部署 Node Exporter:

Terminal window
# 在其他服务器上也跑 Node Exporter
docker run -d --name node-exporter \\
--restart unless-stopped \\
--net=\"host\" \\
--pid=\"host\" \\
-v \"/proc:/host/proc:ro\" \\
-v \"/sys:/host/sys:ro\" \\
-v \"/:/rootfs:ro\" \\
prom/node-exporter:latest \\
--path.procfs=/host/proc \\
--path.sysfs=/host/sys \\
--path.rootfs=/rootfs

然后在 Prometheus 配置的 scrape_configs 中添加对应 IP:

- job_name: 'remote-nodes'
static_configs:
- targets: ['192.168.1.10:9100', '192.168.1.11:9100']

四、Prometheus vs 其他监控方案#

对比项PrometheusNetdataZabbixUptime Kuma
语言GoCC++Node.js
部署复杂度中等简单复杂很简单
资源占用~200MB~100MB~500MB+~50MB
告警能力强(Alertmanager)很强一般
历史数据存储本地 TSDB存多久设多久数据库有限
多节点支持⭐ 原生分布式主从原生单机为主
自定义指标✅ 完善❌ 仅预设
社区生态CNCF 顶级项目活跃老牌稳定较新
Docker 镜像大小~100MB~30MB~200MB~20MB

选型建议: 单台服务器看状态用 Uptime Kuma 就够了;要深入分析性能用 Netdata;生产环境多服务器监控首选 Prometheus——它的数据模型和查询语言是业界标准,Grafana 上的仪表盘模板多到用不完。


五、常见问题 FAQ#

Q1:Prometheus 会占用多少磁盘空间?#

取决于采集频率和保留时间。按默认 scrape_interval: 15sretention.time: 15d 计算,单台服务器的指标数据大约占用 2-5GB。你可以调整 retention.time 来节省空间。

Q2:为什么查询 up 指标返回空?#

最可能的原因:

  1. Prometheus 配置里的 targets 地址不对——Docker 内要用容器名,跨主机用 IP
  2. Node Exporter 没启动——检查 docker ps
  3. 防火墙没开端口——需要放行 90909100

Q3:1 核 2G 的 VPS 跑得动吗?#

完全没问题。 Prometheus 本身只占 ~200MB 内存,Node Exporter 不到 20MB。在 1 核 2G 的廉价 VPS 上同时跑 Prometheus + Grafana + 几个 Web 服务都毫无压力。

Q4:如何用 Grafana 展示 Prometheus 数据?#

先部署 Grafana(下一篇文章会详细讲),然后在 Grafana 中:

  1. 添加数据源 → 选择 Prometheus
  2. URL 填 http://prometheus:9090(Docker 内网通信)
  3. Save & Test
  4. 导入仪表盘模板(推荐 ID 1860 的 Node Exporter Full 模板)

Q5:告警通知怎么配置?#

在 Alertmanager 配置文件中添加接收器:

receivers:
- name: 'webhook'
webhook_configs:
- url: 'https://your-bot-url/webhook'

支持邮件、钉钉、Slack、Webhook、PagerDuty 等多种通知方式。

Q6:Prometheus 和 InfluxDB 有什么区别?#

对比项PrometheusInfluxDB
数据模型Metric + LabelMeasurement + Tag
查询语言PromQL(强项)Flux/InfluxQL
拉/推模式拉模型推模型
高可用Thanos/Cortex 扩展原生集群
适用场景监控告警物联网/APM

简单说:做监控告警选 Prometheus,做应用性能分析选 InfluxDB。


Prometheus 的部署只是第一步。有了指标数据,下一篇文章我们会部署 Grafana,把那些冷冰冰的数字变成赏心悦目的仪表盘,再配合 Loki 做日志分析——这三个组合在一起,才是完整的可观测体系。”

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
2026 Prometheus 自建监控系统:Docker 部署实现服务器全方位监控
https://www.kshare.top/posts/2026-prometheus-自建监控系统docker-部署实现服务器全方位监控/
作者
Kshare
发布于
2026-06-25
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Kshare
Hello, I'm Kshare.
公告
站点已开启广告(类型:弹窗广告),给您带来的不便敬请谅解。如有更好的广告建议,欢迎发送邮件至 t9uzrz6u@anonaddy.me,感谢您的支持!
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
187
分类
9
标签
190
总字数
490,175
运行时长
0
最后活动
0 天前

文章目录