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 的监控服务器足够用很长时间。

相关推荐
SelectDB1 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
zzzzzz3103 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode3 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220703 天前
如何搭建本地yum源(上)
运维
大树886 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠6 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质6 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz6 天前
Maven依赖冲突
java·服务器·maven
Inhand陈工6 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智6 天前
ARP代理--工作原理
运维·网络·arp·arp代理