Grafana 监控仪表盘:服务器和应用的可视化监控

Grafana 监控仪表盘:服务器和应用的可视化监控

Grafana 是最流行的开源监控可视化工具,把 Prometheus、InfluxDB、MySQL 等数据源的数据做成漂亮的实时仪表盘。配合 Prometheus + Node Exporter,几分钟就能搭出一套服务器资源监控系统,CPU、内存、磁盘、网络一目了然。这篇文章讲如何用 Docker 部署 Grafana + Prometheus 监控服务器。

监控架构

复制代码
服务器 ← Node Exporter(采集系统指标)
          ↓
       Prometheus(存储时序数据)
          ↓
       Grafana(可视化展示)

服务器配置

监控栈本身资源消耗不大:

  • 2 核 CPU,2GB 内存(监控 1-5 台服务器)
  • 4 核 4GB 内存(监控 10+ 台服务器)

我把监控系统部署在 雨云服务器 rainyun+com 的 2 核 4G 机型上,监控自己的几台服务器完全够用。注册填优惠码 2026off 领 5 折优惠券,非常实惠。

Docker Compose 部署

bash 复制代码
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

mkdir -p ~/monitoring/{prometheus,grafana,alertmanager}
cd ~/monitoring

创建 docker-compose.yml

yaml 复制代码
version: "3.8"

services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--storage.tsdb.retention.time=30d'    # 保留 30 天数据
      - '--web.enable-lifecycle'
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus_data:/prometheus
    ports:
      - "127.0.0.1:9090:9090"
    restart: unless-stopped

  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    command:
      - '--path.rootfs=/host'
    volumes:
      - /:/host:ro,rslave
    network_mode: host
    pid: host
    restart: unless-stopped

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    environment:
      GF_SECURITY_ADMIN_USER: admin
      GF_SECURITY_ADMIN_PASSWORD: 设置管理员密码
      GF_SERVER_ROOT_URL: "https://grafana.你的域名.com"
      GF_SMTP_ENABLED: "false"
      GF_AUTH_ANONYMOUS_ENABLED: "false"
    volumes:
      - grafana_data:/var/lib/grafana
    ports:
      - "127.0.0.1:3000:3000"
    depends_on:
      - prometheus
    restart: unless-stopped

  caddy:
    image: caddy:alpine
    container_name: caddy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config
    restart: unless-stopped

volumes:
  prometheus_data:
  grafana_data:
  caddy_data:
  caddy_config:

创建 Prometheus 配置:

bash 复制代码
cat > prometheus/prometheus.yml << 'EOF'
global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  # 监控本机
  - job_name: 'node-local'
    static_configs:
      - targets: ['localhost:9100']
        labels:
          instance: '监控服务器'

  # 监控其他服务器(需要在目标服务器上也安装 Node Exporter)
  # - job_name: 'node-web01'
  #   static_configs:
  #     - targets: ['web01-IP:9100']
  #       labels:
  #         instance: 'Web服务器01'

  # 监控 Prometheus 本身
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
EOF

创建 Caddyfile:

复制代码
grafana.你的域名.com {
    reverse_proxy grafana:3000
}

启动:

bash 复制代码
docker compose up -d

在被监控服务器上安装 Node Exporter

对于需要监控的其他服务器(不是 Docker 方式):

bash 复制代码
# 下载 Node Exporter
wget https://github.com/prometheus/node_exporter/releases/latest/download/node_exporter-*linux-amd64.tar.gz
tar -xzf node_exporter-*linux-amd64.tar.gz
sudo mv node_exporter-*/node_exporter /usr/local/bin/

# 创建 systemd 服务
sudo tee /etc/systemd/system/node-exporter.service << 'EOF'
[Unit]
Description=Node Exporter
After=network.target

[Service]
Type=simple
User=nobody
ExecStart=/usr/local/bin/node_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now node-exporter

# 防火墙:只允许监控服务器访问 9100 端口
sudo ufw allow from 监控服务器IP to any port 9100

配置 Grafana 仪表盘

  1. 访问 https://grafana.你的域名.com,用配置的管理员账号登录
  2. 添加数据源:Connections → Add data source → Prometheus
    • URL:http://prometheus:9090
  3. 导入官方仪表盘(最快的方法)

导入 Node Exporter 仪表盘

  1. Dashboards → Import
  2. 输入 ID:1860(Node Exporter Full,最经典的系统监控面板)
  3. 选择 Prometheus 数据源
  4. 点击 Import

几秒钟就能看到完整的系统监控仪表盘,包括:CPU 使用率、内存使用、网络流量、磁盘 I/O、系统负载等。

其他推荐的仪表盘 ID

复制代码
1860   - Node Exporter Full(服务器基础监控)
3662   - Prometheus 2.0 Overview(Prometheus 自身监控)
7362   - MySQL Overview
9628   - PostgreSQL Database
11074  - Node Exporter for Prometheus Dashboard based on 11074

配置告警

在 Grafana 里设置告警(当指标异常时发通知):

  1. Alerting → Contact points → Add contact point

  2. 选择通知方式(支持 Email、Slack、Telegram、钉钉、企业微信等)

  3. 在仪表盘里点击某个图表 → Edit → Alert

  4. 设置触发条件,例如:

    CPU 使用率超过 90% 持续 5 分钟

    条件:avg() of avg(1 - rate(node_cpu_seconds_total{mode="idle"}[5m])) > 0.9
    持续:5分钟

监控 Docker 容器

添加 cAdvisor 监控 Docker 容器资源:

yaml 复制代码
# 在 docker-compose.yml 里添加
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    container_name: cadvisor
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    ports:
      - "127.0.0.1:8080:8080"
    restart: unless-stopped

prometheus.yml 里添加:

yaml 复制代码
  - job_name: 'cadvisor'
    static_configs:
      - targets: ['cadvisor:8080']

然后在 Grafana 导入 cAdvisor 仪表盘(ID:14282)。

数据持久化和清理

bash 复制代码
# 查看 Prometheus 存储使用情况
docker exec prometheus df -h /prometheus

# 修改数据保留策略(在 docker-compose.yml 里)
# --storage.tsdb.retention.time=15d  # 只保留 15 天
# --storage.tsdb.retention.size=10GB  # 最大占用 10GB

Grafana + Prometheus + Node Exporter 是目前最流行的开源监控技术栈,大到 Google、小到个人服务器都在用。在雨云服务器上部署这套系统,所有服务器的状态一屏掌握,CPU 飙升、内存不足都能及时报警。注册填优惠码 2026off 领 5 折优惠券,2 核 4G 的监控服务器足够用很长时间。

相关推荐
wangl_921 小时前
Modbus RTU 与 Modbus TCP 深入指南-串口服务器:RTU转TCP
服务器·网络·网络协议·tcp/ip·tcp·modbus·rtu
银河外卖员1 小时前
VMware Workstation Pro 安装详细图文操作教程
运维·服务器
技术程序猿华锋1 小时前
Hermes Agent 深度实战:安装部署、Docker 配置、API 接入与生产环境最佳实践教程
运维·人工智能·docker·容器·agi
H Journey1 小时前
网络编程:Linux下高性能TCP网络服务器(代码完整版)多线程版本
linux·服务器·网络
七七powerful1 小时前
AI+运维提效,ssl-cert-monitoring(SSL证书监控系统)2.0开发完毕
运维·网络协议·ssl
星辰_mya1 小时前
Docker “超级大厨”
运维·docker·容器·面试·架构
微风凉凉起1 小时前
复现漏洞 CVE-2026-31431
服务器
码云骑士1 小时前
jwt入门介绍
linux·运维·数据库
!沧海@一粟!2 小时前
NAT映射回流解决内网通过公网映射访问内部服务器
运维·网络