3. Grafana 基础回顾:数据源配置、面板类型、变量与模板化

在开始 GameDay 演练与容量水位监控之前,必须夯实 Grafana 的核心操作基础。本章将系统回顾数据源配置、面板类型选择以及变量与模板化机制,确保后续仪表盘构建高效、可复用。

3.1 数据源配置

数据源是 Grafana 与后端存储之间的桥梁。Grafana 支持多种数据源,包括 Prometheus、InfluxDB、Elasticsearch、CloudWatch 等。配置数据源时,需指定类型、URL、认证方式及查询语言。

数据源类型 典型用途 查询语言 连接方式
Prometheus 容器/微服务指标、Kubernetes 监控 PromQL HTTP API
InfluxDB 时序数据存储、IoT 监控 InfluxQL / Flux HTTP API
Elasticsearch 日志分析、全文搜索 Lucene / ES DSL HTTP API
CloudWatch AWS 基础设施监控 CloudWatch Metrics AWS SDK / IAM
配置要点: 在 GameDay 演练中,建议为每个数据源设置独立的 名称 和 标签,便于在变量中引用。同时,启用 浏览器访问模式 可避免跨域问题,但生产环境应使用 代理访问模式 以保护凭证。

3.2 面板类型与选择策略

Grafana 提供多种面板类型,每种面板适用于不同的数据展示场景。在容量水位监控中,合理选择面板类型能显著提升可读性。

  • Time series(时序图):最常用面板,适合展示 CPU、内存、磁盘等连续指标随时间的变化趋势。支持多线叠加、区域填充、阈值线。
  • Stat(统计值):展示单个关键指标的当前值,如当前 CPU 使用率、内存剩余量。支持颜色阈值和图标。
  • Gauge(仪表盘):以仪表盘形式展示指标在阈值范围内的位置,适合展示容量水位百分比。
  • Table(表格):展示多维数据,如多个主机的指标列表,支持排序、过滤和条件格式。
  • Bar gauge(条形仪表):水平或垂直条形图,适合对比多个实体的容量水位。
  • Heatmap(热力图):展示数据分布密度,适合分析请求延迟或错误率的时间分布。
容量水位推荐组合:
  • 全局概览:Stat 面板展示当前水位百分比,配合 Gauge 面板展示阈值区间。
  • 趋势分析:Time series 面板展示过去 24 小时的水位变化,叠加 80% 和 90% 阈值线。
  • 多实体对比:Bar gauge 面板按主机或命名空间分组展示水位。
面板类型选择决策流程 选择面板类型 需要展示单个关键值? Stat Gauge 需要展示时间趋势? Time series Table 需要展示数据分布? Heatmap Bar gauge 根据监控目标选择面板类型:单值→Stat/Gauge,趋势→Time series,对比→Table/Bar gauge,分布→Heatmap

3.3 变量与模板化

变量是 Grafana 实现动态仪表盘的核心机制。通过变量,可以将硬编码的查询参数替换为可交互的下拉选择、文本框或自定义查询结果,从而实现一个仪表盘适配多个环境、多个服务。

3.3.1 变量类型

变量类型 说明 典型用例
Query 通过数据源查询动态生成选项列表 从 Prometheus 查询所有可用主机名
Custom 手动定义固定的选项列表 环境选择:prod、staging、dev
Interval 自动生成时间间隔选项 聚合粒度:1m、5m、1h
Data source 动态切换数据源 在不同 Prometheus 实例间切换
Text box 自由输入文本 输入自定义标签或过滤条件
Constant 固定值,不可交互 定义全局命名空间前缀

3.3.2 变量在查询中的使用

变量通过 $variable_name 或 ${variable_name} 语法在查询中引用。支持多值变量时,可使用 {{variable_name}} 格式进行正则匹配。

# PromQL 示例:使用变量 $host 和 $namespace
sum(
  rate(
    container_cpu_usage_seconds_total{
      host=~"$host",
      namespace=~"$namespace"
    }[5m]
  )
) by (pod)

# 多值变量自动展开为正则表达式
# 若 $host 选择 "web-01|web-02",则查询变为:
# host=~"web-01|web-02"

3.3.3 变量联动与依赖

变量可以形成依赖链:一个变量的选项列表可以基于另一个变量的当前值进行过滤。例如,选择 $region 后,$host 变量只显示该区域内的主机。

变量联动注意事项:
  • 避免过深的依赖链(超过 3 层),否则会导致仪表盘加载缓慢。
  • 为依赖变量设置 刷新时机:选择“On Dashboard Load”或“On Time Range Change”以控制更新频率。
  • 使用 Regex 过滤时,确保正则表达式与数据源返回的标签格式一致。
变量依赖链示例:GameDay 容量水位仪表盘 $environment Custom: prod/staging/dev $region Query: 根据环境过滤 $host Query: 根据区域过滤 $metric Custom: cpu/mem/disk 最终查询:$metric{host=~"$host"} 变量依赖链:$environment → $region → $host,$metric 独立选择,最终组合为完整查询

3.4 模板化最佳实践

  • 命名规范:变量名使用小写字母和下划线,如 $cluster_name、$namespace。
  • 默认值:为每个变量设置合理的默认值,避免仪表盘加载时显示空数据。
  • 隐藏变量:对于不需要用户交互的变量(如内部计算变量),设置为“Hidden”以减少界面干扰。
  • 全局变量:利用 Grafana 内置变量 $__from、$__to、$__interval 实现时间范围和聚合粒度的动态适配。
  • 变量重用:在多个仪表盘间共享变量定义,可通过导入/导出 JSON 模型实现。
GameDay 演练中的变量设计建议:
  • 创建 $capacity_threshold 变量(Custom 类型),预设 80%、90%、95% 三个水位阈值,方便演练中快速切换告警触发条件。
  • 使用 $simulation_mode 变量(Custom 类型),取值“normal”和“stress”,在查询中动态调整指标聚合方式。
  • 将 $host 变量设置为多值(Multi-value),支持同时选择多个主机进行对比分析。