Are you an LLM? You can read better optimized documentation at /ai/homelab/prometheus-grafana.md for this page in Markdown format
使用 Prometheus + Grafana 搭建高颜值服务器与 Docker 容器监控大屏全攻略
在搭建了包含 Emby 影音库、FastGPT 知识库、Alist 存储聚合 等复杂服务的家庭服务器(Homelab)或云主机(VPS)后,服务器的运行健康度往往变得像一个“黑盒”。
很多玩家搭建了 Uptime Kuma 服务监控,但它只能进行黑盒存活探测(告诉你网站打不打得开)。 当你遇到真正的性能故障时,黑盒监控往往无能为力:
- 网页虽然能打开,但响应极慢,你无法知道究竟是哪一个 Docker 容器在偷跑 CPU;
- 服务器突然死机重启,查不出是哪个服务发生了内存泄露(OOM);
- 硬盘读写经常卡顿,不知道是 NAS 磁盘损坏还是转码任务占满了 IOPS。
Prometheus(普罗米修斯)+ Grafana 是云原生领域公认的工业级白盒监控与时序指标可视化黄金标准。配合 Node Exporter(系统硬件探针)与 cAdvisor(容器粒度探针),你能以秒级精度洞察宿主机与每一个独立容器的真实性能负载,并投射出极具极客质感的酷炫监控大屏。
本文将遵循 E-E-A-T(经验、专业、权威、可信) 原则,为你带来监控全家桶的生产级 Docker Compose 部署与仪表盘导入实战。
📊 四大主流服务器监控系统深度多维横评
| 对比维度 | 📈 Prometheus + Grafana (工业级白盒标准) | 🦭 Uptime Kuma (轻量黑盒检测) | 🪆 哪吒监控 (多小鸡集中看板) | ⚡ Netdata (单机实时分析) |
|---|---|---|---|---|
| 主要定位 | 全维度时序指标采集、聚合与大屏呈现 | 服务可用性、Ping 延迟与断线告警 | 跨机房多台 VPS 资产集中状态概览 | 单机秒级极致实时诊断分析 |
| 指标深度 | 👑 极深(硬件细节 + 容器单体粒度) | 较浅(仅探测端口/HTTP状态) | 中等(基础 CPU/内存/网速汇总) | 极深(单机极其丰富) |
| 时序存储 (TSDB) | 👑 原生内置强大 TSDB,支持历史回溯 | SQLite 记录历史响应时间 | SQLite/MySQL 记录流水 | 默认不偏重长期历史存档 |
| 单容器监控能力 | 👑 原生配合 cAdvisor 监控单容器资源 | 仅支持 Docker 容器存活状态 | ❌ 无法细化到单个容器指标 | 支持容器监控 |
| 大屏视觉表现力 | 👑 天花板级别(海量顶级开源仪表盘) | 简约状态页 | 简约卡片式列表 | 偏向专业密集图表 |
| 资源消耗 | 中等(整套约占用 300MB~500MB 内存) | 👑 极低(约 50MB 内存) | 较低(约 50MB 内存) | 较高(频繁采集吃 CPU) |
💡 架构师选型总结:
- Uptime Kuma 负责“在服务挂掉时给你发 Telegram/微信告警”;
- Prometheus + Grafana 负责“在服务挂掉前让你看清是谁在吃满内存、提前介入调优”。两者搭配才是最完美的运维闭环!
🧭 云原生可观测性流水线架构
mermaid
graph TD
subgraph 数据采集层 (Exporters)
NodeExp[Node Exporter: 采集宿主机 CPU/内存/磁盘/网络]
cAdvisor[cAdvisor: 采集每个 Docker 容器的单体资源开销]
end
subgraph 数据存储与计算层 (TSDB)
Prometheus[Prometheus 时序数据库 (默认 9090 端口)]
NodeExp -->|Prometheus 定时拉取 Metrics| Prometheus
cAdvisor -->|Prometheus 定时拉取 Metrics| Prometheus
end
subgraph 数据呈现与告警层 (Visualization)
Grafana[Grafana 高颜值仪表盘 (默认 3000 端口)]
Prometheus -->|PromQL 查询时序数据| Grafana
Grafana --> UserScreen[你的电脑 / 平板 / 电视监控墙大屏]
end🛠️ 第一步:前置配置与目录规划
在服务器上规划清晰的持久化目录:
bash
mkdir -p /docker/monitor/prometheus/data
mkdir -p /docker/monitor/grafana/data
cd /docker/monitor1. 编写 Prometheus 抓取配置文件 prometheus.yml
在 /docker/monitor/prometheus/prometheus.yml 中写入:
yaml
global:
scrape_interval: 15s # 全局每 15 秒拉取一次指标
evaluation_interval: 15s
scrape_configs:
# 1. 采集 Prometheus 自身健康数据
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# 2. 采集宿主机硬件物理指标
- job_name: 'node_exporter'
static_configs:
- targets: ['node-exporter:9100']
# 3. 采集每个 Docker 容器的运行资源
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8080']🐳 第二步:编写生产级 Docker Compose 编排
在 /docker/monitor 目录下创建 docker-compose.yml:
yaml
services:
# 1. 时序数据存储与处理核心
prometheus:
image: prom/prometheus:latest
container_name: monitor-prometheus
restart: unless-stopped
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=15d' # 核心优化!数据保留 15 天,防止撑爆磁盘
- '--web.enable-lifecycle' # 允许热重载配置
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- ./prometheus/data:/prometheus
ports:
- '9090:9090'
networks:
- monitor_net
# 2. 宿主机硬件探针 (Node Exporter)
node-exporter:
image: prom/node-exporter:latest
container_name: monitor-node-exporter
restart: unless-stopped
pid: host # 必须使用宿主机 PID 命名空间获取真实进程
volumes:
- '/:/host:ro,rslave'
command:
- '--path.rootfs=/host'
networks:
- monitor_net
# 3. Docker 容器粒度指标探针 (cAdvisor)
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: monitor-cadvisor
restart: unless-stopped
privileged: true
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
- /dev/disk/:/dev/disk:ro
networks:
- monitor_net
# 4. 可视化交互大屏 (Grafana)
grafana:
image: grafana/grafana:latest
container_name: monitor-grafana
restart: unless-stopped
ports:
- '3000:3000'
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=your_secure_password_123
- GF_USERS_ALLOW_SIGN_UP=false
volumes:
- ./grafana/data:/var/lib/grafana
depends_on:
- prometheus
networks:
- monitor_net
networks:
monitor_net:
name: monitor_net执行启动命令:
bash
docker compose up -d🎨 第三步:Grafana 数据源绑定与两大神仙仪表盘导入
容器启动完毕后,在浏览器访问:http://你的服务器IP:3000,输入你在配置中设置的用户名与密码登录 Grafana。
1. 绑定 Prometheus 数据源
- 点击左侧齿轮 “Connections” -> “Data sources” -> 点击 “Add data source”。
- 选择 Prometheus。
- Prometheus server URL 填写:
http://prometheus:9090(直接使用容器名互通)。 - 滑到最底部,点击 “Save & test”。若显示绿色的
Successfully queried the Prometheus API.则代表数据流彻底打通!
2. 导入黄金标准大屏仪表盘
Grafana 官方社区有成千上万个开发者贡献的高颜值 Dashboard,我们无需手动拖拽图表,直接通过 ID 一键导入:
🔹 仪表盘 A:Node Exporter Full(全主机硬件监控天花板)
- 点击右上角 “+” -> 选择 “Import dashboard”。
- 在“Find and import dashboards for common applications”输入框中输入官方 ID:
1860,点击 Load。 - 在底部 Prometheus 下拉菜单中选择刚才绑定的数据源,点击 Import。
- 大屏效果:CPU 核心温度、内存使用率热力图、网卡收发速率(以真实网速曲线呈现)、磁盘可用空间及 IO 等待时间(iowait)一览无余!
🔹 仪表盘 B:Docker and OS System Metrics(单容器深度诊断)
- 再次点击“Import dashboard”,输入官方 ID:
893(或14282),点击 Load。 - 关联 Prometheus 数据源并导入。
- 大屏效果:你可以从下拉菜单中选中任何一个特定的容器(如
emby或fastgpt),精确查看该容器单体消耗了多少 MB 内存、跑了多少 CPU 核心、读写了多少临时文件。哪个服务在偷跑算力,一眼便知!
💬 总结
通过 Prometheus 与 Grafana 的协同部署,我们不仅摆脱了传统“两眼一抹黑”的盲人式运维,更为家庭数据中心增添了一抹极具科技感的视觉大屏。
- 反向代理加固:外网安全访问监控大屏?查看 Nginx Proxy Manager 配置域名与 SSL 教程。
- 存活报警联动:配合多协议主动告警?参考 Uptime Kuma 自托管状态面板实战。
