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 仪表盘
- 访问
https://grafana.你的域名.com,用配置的管理员账号登录 - 添加数据源:Connections → Add data source → Prometheus
- URL:
http://prometheus:9090
- URL:
- 导入官方仪表盘(最快的方法)
导入 Node Exporter 仪表盘
- Dashboards → Import
- 输入 ID:
1860(Node Exporter Full,最经典的系统监控面板) - 选择 Prometheus 数据源
- 点击 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 里设置告警(当指标异常时发通知):
-
Alerting → Contact points → Add contact point
-
选择通知方式(支持 Email、Slack、Telegram、钉钉、企业微信等)
-
在仪表盘里点击某个图表 → Edit → Alert
-
设置触发条件,例如:
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 的监控服务器足够用很长时间。