跳转至

584_Grafana监控面板

一句话概述:Grafana 是开源的数据可视化平台,能连接 Prometheus、MySQL、Elasticsearch 等 150+ 数据源,用拖拽方式构建实时监控大屏和告警系统。

核心知识点表

概念白话解释
Dashboard仪表盘,由多个面板组成的监控页面
Panel面板,一个图表或数据展示组件
Data Source数据源,Grafana 从哪里获取数据(如 Prometheus)
Query查询,用数据源的语言(如 PromQL)获取数据
Alert告警,数据超过阈值时发通知
Variable变量,让仪表盘支持下拉筛选(如选择服务器)
LGTM StackLoki + 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

同类对比

特性GrafanaKibanaDatadogZabbix
开源AGPLv3Elastic License闭源GPLv2
价格免费部分免费按量付费免费
数据源150+ 插件Elasticsearch内置内置
日志通过 Loki原生内置基础
告警内置内置内置强大
学习曲线中等中等
适合场景通用监控日志分析全栈监控传统运维

选型建议:指标可视化和监控大屏首选 Grafana(生态最丰富、数据源最多);配合 Prometheus 是标准组合。日志分析场景 Kibana + ELK 更成熟。