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 面板按主机或命名空间分组展示水位。
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 过滤时,确保正则表达式与数据源返回的标签格式一致。
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),支持同时选择多个主机进行对比分析。