2026 Grafana 监控可视化面板:Docker 部署打造一站式监控仪表盘
你有没有这样的经历:明明部署了 Prometheus 采集了一堆指标数据,却只能对着 Prometheus 的表格界面发呆——一行行数字看得眼都花了,CPU 使用率到底是在涨还是跌完全看不出来。监控系统没有可视化仪表盘,就像开车没有仪表盘,数据都有但就是没法一眼看懂。
Grafana 就是来解决这个问题的。它是一个用 Go 和 TypeScript 编写的开源可视化平台,支持 Prometheus、Loki、InfluxDB、Elasticsearch 等几十种数据源。把冷冰冰的指标数字变成折线图、柱状图、热力图,还能设置阈值线和告警。
上一篇文章我们部署了 Prometheus 采集服务器指标,现在配上 Grafana,就能得到一套真正的可视化监控系统。
一、Grafana 核心概念
| 概念 | 说明 |
|---|---|
| Data Source | 数据源,可以是 Prometheus、Loki、MySQL 等 |
| Dashboard | 仪表盘,包含多个 Panel |
| Panel | 面板,一个图表或表格 |
| Row | 行,用于组织面板分组 |
| Alert | 告警规则,可发送通知 |
| Organization | 组织,实现多租户隔离 |
Grafana 本身不存储监控数据,它只是一个「画板」,从各种数据源读取数据并渲染成图表。
二、Docker Compose 部署
把 Grafana 加入上一篇文章的 Prometheus 监控栈中:
version: '3.8'
services: prometheus: image: prom/prometheus:latest container_name: prometheus restart: unless-stopped ports: - \"9090:9090\" volumes: - ./prometheus:/etc/prometheus - prometheus_data:/prometheus
node-exporter: image: prom/node-exporter:latest container_name: node-exporter restart: unless-stopped ports: - \"9100:9100\" volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - '--path.procfs=/host/proc' - '--path.sysfs=/host/sys'
grafana: image: grafana/grafana:latest container_name: grafana restart: unless-stopped ports: - \"3000:3000\" volumes: - grafana_data:/var/lib/grafana - ./grafana/dashboards:/etc/grafana/provisioning/dashboards - ./grafana/datasources:/etc/grafana/provisioning/datasources environment: - GF_SECURITY_ADMIN_PASSWORD=admin123 - GF_INSTALL_PLUGINS= depends_on: - prometheus
volumes: prometheus_data: grafana_data:启动
# 创建配置目录mkdir -p grafana/dashboards grafana/datasources
# 启动所有服务docker compose up -d访问 http://你的IP:3000,默认登录账号密码是 admin / admin123(或者第一次访问时自己设置)。
三、配置数据源
3.1 添加 Prometheus 数据源
登录 Grafana 后:
- 点击左侧齿轮 ⚙️ → Data Sources
- 点击 Add data source
- 选择 Prometheus
- URL 填
http://prometheus:9090(Docker 内网通信直接使用服务名) - 点击 Save & Test,看到绿色提示就成功了
3.2 自动配置(推荐)
创建 grafana/datasources/datasources.yml:
apiVersion: 1
datasources: - name: Prometheus type: prometheus access: proxy url: http://prometheus:9090 isDefault: true editable: false这样 Grafana 启动时就会自动添加 Prometheus 数据源,免去手动配置。
四、导入仪表盘模板
Grafana 社区有成千上万的现成仪表盘模板,完全不需要自己从零画图表。
Node Exporter Full 模板(推荐)
最经典的服务器监控仪表盘:
- 点击左侧 + → Import
- 在 Import via grafana.com 输入模板 ID
1860 - 选择数据源为 Prometheus
- 点击 Import
导入后你就能看到完整的服务器监控仪表盘,包含:
| 区域 | 展示内容 |
|---|---|
| CPU | 使用率、负载、各核心状态 |
| 内存 | 总量、已用、可用、Swap |
| 磁盘 | 空间使用率、IO 读写速率 |
| 网络 | 收发流量、连接数、错误包 |
| 系统 | 运行时间、进程数、文件句柄 |
其他推荐模板:
| 模板 ID | 名称 | 用途 |
|---|---|---|
| 1860 | Node Exporter Full | 服务器全面监控 |
| 11074 | Prometheus 2.0 Stats | Prometheus 自身状态 |
| 893 | Docker Monitoring | Docker 容器监控 |
| 14205 | Blackbox Exporter | 网站可用性监控 |
| 15759 | Loki Logs | 日志可视化 |
自动配置仪表盘
创建 grafana/dashboards/dashboards.yml:
apiVersion: 1
providers: - name: 'default' orgId: 1 folder: '' type: file disableDeletion: false editable: true options: path: /etc/grafana/provisioning/dashboards然后把下载的 JSON 模板放到 grafana/dashboards/ 目录,Grafana 启动时自动加载。
五、Grafana vs 其他可视化方案
| 对比项 | Grafana | Chronograf | Kibana | 自建前端 |
|---|---|---|---|---|
| 语言 | Go + TS ✅ | Go (InfluxDB 生态) | Node.js (ELK 生态) | 任意 |
| 数据源数量 | 50+ | 仅 InfluxDB | 仅 Elasticsearch | 取决于实现 |
| 告警能力 | 强(内置) | 一般 | 强(需 X-Pack) | 需自建 |
| 仪表盘模板 | 海量社区模板 | 较少 | 中等 | 无 |
| 用户管理 | RBAC + Teams | 简单 | RBAC | 需自建 |
| 学习成本 | 低 | 低 | 中等 | 高 |
| Docker 镜像大小 | ~200MB | ~50MB | ~1GB | 取决于实现 |
| 最适合 | 任意时序数据 | InfluxDB 用户 | ELK 日志分析 | 特殊需求 |
结论: 绝大多数场景下 Grafana 都是最好的选择。它的数据源生态和社区模板数量遥遥领先。
六、常见问题 FAQ
Q1:默认密码太简单,怎么改?
首次登录后会强制修改密码。或者通过环境变量预设:
environment: - GF_SECURITY_ADMIN_PASSWORD=你的强密码Q2:Grafana 和 Prometheus 在同一个 Docker 网络里怎么通信?
用服务名代替 IP 地址。在上面的 docker-compose.yml 中,两个服务在同一个网络下,数据源 URL 填 http://prometheus:9090 就行。
Q3:如何配置 HTTPS 访问?
推荐用反向代理:
# Nginx 配置server { listen 443 ssl; server_name grafana.你的域名.com;
location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }}Q4:Grafana 会占多少内存?
空载约 50-80MB,加载几个仪表盘后约 100-200MB。在 1 核 2G VPS 上跟 Prometheus 一起跑完全没问题。
Q5:如何将图表嵌入到其他页面?
在 Panel 的 Share 菜单中:
- 选择 Embed 标签
- 复制 iframe 代码
- 贴到你的页面中
注意需要设置 GF_SERVER_ALLOW_EMBEDDING=true 环境变量。
Q6:数据保留多久?怎么清理?
Grafana 不存数据,数据保留取决于数据源。Prometheus 的数据保留在上一篇文章中通过 --storage.tsdb.retention.time 控制,默认 15 天。
现在你有了指标采集(Prometheus)和可视化面板(Grafana)。下一篇文章我们会部署 Loki,把日志也纳入监控体系。指标 + 日志 + 可视化 = 真正的全方位可观测性。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!