584_Grafana监控面板
一句话概述:Grafana 是开源的数据可视化平台,能连接 Prometheus、MySQL、Elasticsearch 等 150+ 数据源,用拖拽方式构建实时监控大屏和告警系统。
核心知识点表
| 概念 | 白话解释 |
|---|
| Dashboard | 仪表盘,由多个面板组成的监控页面 |
| Panel | 面板,一个图表或数据展示组件 |
| Data Source | 数据源,Grafana 从哪里获取数据(如 Prometheus) |
| Query | 查询,用数据源的语言(如 PromQL)获取数据 |
| Alert | 告警,数据超过阈值时发通知 |
| Variable | 变量,让仪表盘支持下拉筛选(如选择服务器) |
| LGTM Stack | Loki + Grafana + Tempo + Mimir,完整可观测性方案 |
安装配置
Docker 安装
# 最简安装(适合测试)
docker run -d \
--name grafana \ # 容器名
-p 3000:3000 \ # Web 界面端口
grafana/grafana-oss:latest # 开源版镜像
Docker Compose 安装(推荐)
# docker-compose.yml
services:
grafana:
image: grafana/grafana-oss:latest # 最新版(当前 v13)
container_name: grafana # 容器名
restart: unless-stopped # 自动重启
ports:
- "3000:3000" # Web 端口
volumes:
- grafana_data:/var/lib/grafana # 持久化数据
environment:
- GF_SECURITY_ADMIN_USER=admin # 管理员用户名
- GF_SECURITY_ADMIN_PASSWORD=your-password # 管理员密码
- GF_USERS_ALLOW_SIGN_UP=false # 禁止注册
volumes:
grafana_data:
docker compose up -d # 启动
# 浏览器打开 http://localhost:3000
# 使用上面设置的用户名密码登录
基本使用
添加数据源
# 在 Grafana 面板操作:
# 1. 左侧菜单 → Connections → Data Sources → Add data source
# 2. 选择数据源类型(最常用的是 Prometheus)
# Prometheus 配置示例:
# - URL:http://prometheus:9090(Docker 网络中用容器名)
# - Access:Server(默认)
# - Save & Test → 显示 "Data source is working"
# 其他常用数据源:
# - MySQL/PostgreSQL → 填写连接信息
# - Elasticsearch → 填写 URL 和索引
# - Loki → 填写 Loki 地址(日志查询)
# - InfluxDB → 填写连接信息和数据库名
创建仪表盘
# 1. 左侧菜单 → Dashboards → New → New Dashboard
# 2. Add visualization(添加面板)
# 3. 选择数据源(如 Prometheus)
# 4. 编写查询:
# 例如 CPU 使用率:
# 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# 5. 选择可视化类型(右侧面板):
# - Time series(折线图,最常用)
# - Gauge(仪表盘)
# - Stat(数字统计)
# - Bar chart(柱状图)
# - Table(表格)
# - Heatmap(热力图)
# 6. 设置标题和单位
# 7. Apply → Save dashboard
导入社区仪表盘
# 不用自己做!社区有大量现成的仪表盘:
# 1. 访问 https://grafana.com/grafana/dashboards/
# 2. 搜索你需要的(如 "node exporter")
# 3. 复制仪表盘 ID(如 1860)
# 4. 在 Grafana 中:Dashboards → Import → 粘贴 ID
# 5. 选择数据源 → Import
# 常用仪表盘 ID:
# 1860 → Node Exporter Full(服务器监控)
# 3662 → Prometheus 2.0 Overview
# 7362 → MySQL Overview
# 12006 → Kubernetes Cluster
# 11074 → Node Exporter(简版)
配置告警
# 1. 在面板编辑 → Alert 标签页
# 2. Create alert rule from this panel
# 3. 设置条件:
# - 例如:avg() of query A IS ABOVE 90
# - 持续时间:5m(持续5分钟才触发)
# 4. 设置通知渠道:
# Alerting → Contact points → Add contact point
# 支持:Email / Slack / Discord / Webhook / PagerDuty / Telegram
# 告警规则示例(PromQL):
# CPU > 90% 持续 5 分钟:
# avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) < 0.1
# 磁盘使用 > 85%:
# (node_filesystem_avail_bytes / node_filesystem_size_bytes) < 0.15
高级用法
变量(模板变量)
# 让仪表盘支持下拉筛选:
# Dashboard Settings → Variables → Add variable
# 示例1:服务器选择器
# Name: instance
# Type: Query
# Data source: Prometheus
# Query: label_values(node_uname_info, instance)
# 效果:仪表盘顶部出现下拉框,选择不同服务器
# 示例2:时间间隔
# Name: interval
# Type: Interval
# Values: 1m, 5m, 15m, 1h
# 在查询中使用变量:
# rate(node_cpu_seconds_total{instance="$instance"}[$interval])
仪表盘即代码(Provisioning)
# 通过配置文件自动添加数据源和仪表盘
# grafana/provisioning/datasources/prometheus.yml
apiVersion: 1
datasources:
- name: Prometheus # 数据源名称
type: prometheus # 类型
url: http://prometheus:9090 # 地址
access: proxy # 通过 Grafana 代理访问
isDefault: true # 设为默认数据源
# grafana/provisioning/dashboards/dashboards.yml
apiVersion: 1
providers:
- name: 'default'
orgId: 1
folder: ''
type: file
options:
path: /var/lib/grafana/dashboards # 仪表盘 JSON 文件目录
Prometheus + Grafana 完整监控栈
# docker-compose.yml(完整监控栈)
services:
prometheus:
image: prom/prometheus:latest # Prometheus 采集指标
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
node-exporter:
image: prom/node-exporter:latest # 采集服务器指标
ports:
- "9100:9100"
pid: host # 获取宿主机进程信息
grafana:
image: grafana/grafana-oss:latest # Grafana 展示
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
grafana_data:
嵌入和分享
# 分享仪表盘:
# 1. 仪表盘右上角 → Share
# 2. Link:生成分享链接
# 3. Snapshot:创建快照(不需要登录就能看)
# 4. Embed:生成 iframe 嵌入代码
# 启用匿名访问(嵌入用):
# 环境变量:
# GF_AUTH_ANONYMOUS_ENABLED=true
# GF_AUTH_ANONYMOUS_ORG_ROLE=Viewer
常见报错
| 报错信息 | 原因 | 解决方案 |
|---|
Data source is not working | 数据源连接失败 | 检查 URL 和网络连通性 |
No data | 查询没有返回数据 | 检查 PromQL 语法和时间范围 |
Dashboard not found | 仪表盘被删除或权限不足 | 检查权限或从备份恢复 |
Too many data points | 查询返回数据量过大 | 增大查询间隔或添加过滤条件 |
Permission denied | 用户权限不足 | 联系管理员分配权限 |
Plugin not installed | 缺少面板插件 | grafana-cli plugins install PLUGIN_NAME |
速查表
# === Docker 安装 ===
docker run -d -p 3000:3000 --name grafana grafana/grafana-oss:latest
# === 默认信息 ===
# 端口:3000
# 默认账号:admin / admin(首次登录强制改密码)
# === 常用 PromQL 查询 ===
rate(metric[5m]) # 每秒变化率
avg by(instance)(metric) # 按实例求平均
sum(metric) by (job) # 按 job 求和
histogram_quantile(0.99, rate(h[5m])) # P99 延迟
increase(metric[1h]) # 1小时增量
# === 环境变量配置 ===
GF_SECURITY_ADMIN_USER=admin # 管理员用户名
GF_SECURITY_ADMIN_PASSWORD=pass # 管理员密码
GF_USERS_ALLOW_SIGN_UP=false # 禁止注册
GF_AUTH_ANONYMOUS_ENABLED=true # 匿名访问
GF_INSTALL_PLUGINS=grafana-clock-panel # 安装插件
# === 社区仪表盘热门 ID ===
# 1860 → Node Exporter Full
# 3662 → Prometheus Overview
# 7362 → MySQL Overview
# 12006 → K8s Cluster
同类对比
| 特性 | Grafana | Kibana | Datadog | Zabbix |
|---|
| 开源 | AGPLv3 | Elastic License | 闭源 | GPLv2 |
| 价格 | 免费 | 部分免费 | 按量付费 | 免费 |
| 数据源 | 150+ 插件 | Elasticsearch | 内置 | 内置 |
| 日志 | 通过 Loki | 原生 | 内置 | 基础 |
| 告警 | 内置 | 内置 | 内置 | 强大 |
| 学习曲线 | 中等 | 中等 | 低 | 高 |
| 适合场景 | 通用监控 | 日志分析 | 全栈监控 | 传统运维 |
选型建议:指标可视化和监控大屏首选 Grafana(生态最丰富、数据源最多);配合 Prometheus 是标准组合。日志分析场景 Kibana + ELK 更成熟。