☰
别再只盯着Grafana了!用Prometheus + Node Exporter + Docker Compose,5分钟搞定Linux服务器监控看板
2026/10/13 3:25:11 网站建设 项目流程

5分钟极速搭建Linux服务器监控看板:Prometheus+Node Exporter+Docker Compose实战指南

当服务器突然卡顿,你是否还在反复敲打top和free -m命令?监控系统不该是复杂昂贵的代名词。今天我们将用Docker Compose一键部署完整的监控栈,从零到可视化只需5分钟。这个方案特别适合中小团队快速搭建轻量级监控,无需理解Prometheus所有细节就能获得专业级看板。

1. 为什么选择这个技术组合?

传统监控方案往往面临两个极端:要么功能简陋(如基础脚本监控),要么配置复杂(如商业监控软件)。而Prometheus+Node Exporter+Grafana的组合提供了完美平衡:

  • Prometheus:时序数据库和告警引擎,采用拉取模式采集数据
  • Node Exporter:采集主机指标的标准工具,支持CPU/内存/磁盘等基础指标
  • Grafana:数据可视化平台,拥有丰富的仪表盘模板库

通过Docker Compose编排,我们可以避免手动安装配置的繁琐。下面是对比传统方式的优势:

特性传统方式Docker Compose方案
部署时间30分钟以上5分钟
依赖管理需手动解决自动解决
升级维护每个组件单独操作单命令完成
资源占用较高容器隔离,资源可控

2. 五分钟快速部署

确保系统已安装Docker和Docker Compose。新建docker-compose.yml文件,内容如下:

version: '3' services: prometheus: image: prom/prometheus ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml command: - '--config.file=/etc/prometheus/prometheus.yml' node-exporter: image: prom/node-exporter ports: - "9100:9100" restart: unless-stopped grafana: image: grafana/grafana ports: - "3000:3000" volumes: - grafana-storage:/var/lib/grafana depends_on: - prometheus volumes: grafana-storage:

同目录下创建prometheus.yml配置文件:

global: scrape_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'node-exporter' static_configs: - targets: ['node-exporter:9100']

启动所有服务:

docker-compose up -d

三个关键端口:

  • Prometheus: 9090
  • Node Exporter: 9100
  • Grafana: 3000

3. 配置Grafana仪表盘

访问http://服务器IP:3000,初始账号密码均为admin。按以下步骤快速配置:

  1. 添加数据源:

    • 左侧菜单选择"Configuration" > "Data Sources"
    • 选择Prometheus
    • URL填写http://prometheus:9090
    • 点击"Save & Test"
  2. 导入预置仪表盘:

    • 左侧菜单选择"+" > "Import"
    • 输入仪表盘ID1860(Node Exporter全指标仪表盘)
    • 选择刚添加的Prometheus数据源
    • 点击"Import"

现在你应该能看到完整的服务器监控看板,包含以下关键指标:

  • CPU使用率:包括用户态、内核态、IO等待等细分
  • 内存使用:显示已用、缓存、交换分区等情况
  • 磁盘IO:读写速率、IOPS、空间使用率
  • 网络流量:进出带宽、TCP连接数

4. 核心指标解读与告警设置

理解关键指标能帮助你快速定位问题。以下是几个需要特别关注的指标及其正常范围:

CPU指标:

100 - (avg by(instance)(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
  • 警告阈值:> 70%持续5分钟
  • 严重阈值:> 90%持续2分钟

内存指标:

(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100
  • 警告阈值:> 80%
  • 注意:Linux会充分利用缓存,需结合MemAvailable判断

磁盘空间:

node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"} * 100 < 20
  • 绝对阈值:剩余空间 < 20%

在Grafana中设置告警:

  1. 打开仪表盘,点击图表标题 > "Edit"
  2. 切换到"Alert"标签页
  3. 设置条件(如WHEN avg() OF query(A, 5m, now) IS ABOVE 80)
  4. 配置通知渠道(需提前设置邮件/Slack等)

5. 高级配置技巧

多节点监控: 只需在其他服务器上运行Node Exporter,并在Prometheus配置中添加新target:

- job_name: 'other-nodes' static_configs: - targets: ['其他服务器IP:9100']

然后执行热更新:

docker-compose exec prometheus kill -HUP 1

自定义指标采集: Node Exporter默认采集600+指标,如需添加自定义指标:

  1. 创建自定义收集器脚本(如/opt/scripts/custom_metrics.sh):
#!/bin/bash echo "# HELP custom_temperature Server temperature" echo "# TYPE custom_temperature gauge" echo "custom_temperature $(cat /sys/class/thermal/thermal_zone0/temp)"
  1. 修改docker-compose.yml,挂载脚本并设置环境变量:
node-exporter: image: prom/node-exporter volumes: - /opt/scripts:/scripts command: - '--collector.textfile.directory=/scripts' - '--collector.textfile'

持久化数据存储: 默认数据保存在容器内,重启会丢失。添加Prometheus数据卷:

prometheus: volumes: - prometheus-data:/prometheus volumes: prometheus-data:

6. 性能优化与资源控制

这套监控栈在2核4G服务器上的典型资源占用:

服务CPU占用内存占用存储占用(每日)
Prometheus5-10%500MB200MB
Node Exporter1-3%50MB-
Grafana3-5%300MB50MB

优化建议:

  • Prometheus:调整抓取间隔(scrape_interval),默认15s可改为30s
  • Grafana:关闭未使用的数据源,减少面板刷新频率
  • 整体:为容器设置资源限制:
services: prometheus: deploy: resources: limits: cpus: '1' memory: 1G

这套方案我在10+生产环境中部署过,最久稳定运行超过2年。实际使用中发现几个经验:

  1. Prometheus的本地存储足够支撑3-6个月数据,无需急于上远程存储
  2. 为Node Exporter添加--no-collector.softnet参数可减少不必要指标
  3. Grafana的local认证模式更适合小团队,免去LDAP配置麻烦

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询