3. Grafana 基础:架构、数据源与仪表盘概念
在混沌工程实践中,Grafana 是承载故障注入效果可视化、容量水位监控与 SLO 状态展示的核心平台。本章将系统梳理 Grafana 的整体架构、数据源配置方式以及面板与仪表盘的核心概念,为后续的故障注入实验与容量水位口径实战打下坚实的可视化基础。
3.1 Grafana 整体架构
Grafana 采用前后端分离的插件化架构,核心组件包括前端 UI、后端 API 服务、数据源插件层、告警引擎以及面板/仪表盘渲染引擎。其架构设计使得 Grafana 能够对接多种时序数据库,并通过灵活的查询转换与可视化组件呈现数据。
架构要点:Grafana 本身不存储时序数据,所有数据通过数据源插件实时查询。告警引擎在后台周期性评估规则,触发告警通知。前端 UI 通过 REST API 与后端通信,后端再通过插件接口与数据源交互。
3.2 数据源配置
数据源是 Grafana 连接外部时序数据库的桥梁。在混沌工程场景中,最常用的数据源是 Prometheus 和 InfluxDB。以下分别介绍两者的配置要点。
3.2.1 Prometheus 数据源配置
Prometheus 是混沌工程监控的首选数据源,支持强大的 PromQL 查询语言,适合实时故障指标采集与容量水位分析。
| 配置项 | 说明 | 示例值 |
|---|---|---|
| Name | 数据源名称,用于仪表盘引用 | Prometheus-Prod |
| URL | Prometheus 服务 HTTP 地址 | http://prometheus:9090 |
| Access | 访问模式:Server(推荐)或 Browser | Server |
| Scrape interval | 数据抓取间隔,影响面板刷新粒度 | 15s |
| Timeout | 查询超时时间 | 60s |
# 通过 Grafana API 添加 Prometheus 数据源示例
curl -X POST http://admin:admin@localhost:3000/api/datasources \
-H "Content-Type: application/json" \
-d '{
"name":"Prometheus-Prod",
"type":"prometheus",
"url":"http://prometheus:9090",
"access":"proxy",
"isDefault":true
}'
3.2.2 InfluxDB 数据源配置
InfluxDB 适用于高频写入的时序数据场景,在混沌工程中常用于记录故障注入事件的详细指标。Grafana 通过 Flux 或 InfluxQL 查询语言与之交互。
| 配置项 | 说明 | 示例值 |
|---|---|---|
| Name | 数据源名称 | InfluxDB-Chaos |
| URL | InfluxDB HTTP 地址 | http://influxdb:8086 |
| Database | 数据库名称(InfluxQL 模式) | chaos_metrics |
| HTTP Method | 查询请求方式 | GET |
| Min time interval | 最小时间粒度,防止过度采样 | 10s |
实践建议:在混沌工程环境中,建议将 Prometheus 作为实时监控主数据源,InfluxDB 作为故障注入事件日志与长周期趋势分析的数据源。两者可以同时配置在同一个 Grafana 实例中,并在同一仪表盘内混合使用。
3.3 面板与仪表盘概念
面板(Panel)是 Grafana 中最基本的可视化单元,仪表盘(Dashboard)则是由多个面板组成的可交互监控页面。理解两者的关系与配置方式是构建混沌工程可视化系统的前提。
3.3.1 面板类型与适用场景
| 面板类型 | 适用场景 | 混沌工程示例 |
|---|---|---|
| Time series | 时序曲线展示,趋势分析 | CPU 使用率、请求延迟 P99 曲线 |
| Stat | 单一数值展示,强调当前状态 | 当前错误率、剩余容量百分比 |
| Gauge | 仪表盘式进度展示 | 内存使用水位、连接池饱和度 |
| Table | 结构化数据列表 | 故障注入事件列表、SLO 达标情况 |
| Heatmap | 分布密度展示 | 请求延迟分布、错误分布热力图 |
| Bar chart | 分类对比展示 | 各服务实例容量对比 |
3.3.2 仪表盘组织原则
在混沌工程容量水位监控中,仪表盘应按照以下层次组织:
- 全局概览层:展示系统整体健康状态、SLO 达成率、关键容量水位指标。
- 服务分层:按微服务或业务模块划分,展示各服务的延迟、错误率、吞吐量。
- 故障注入层:专门展示正在进行的故障注入实验状态、影响范围、指标变化。
- 容量水位层:展示 CPU、内存、磁盘、网络等资源使用率与剩余容量。
3.3.3 面板查询与变量
面板通过查询语句从数据源获取数据。Grafana 支持在查询中使用模板变量(Template Variables),实现动态切换监控维度。
# PromQL 查询示例:获取指定服务的 P99 延迟
histogram_quantile(0.99,
sum(rate(http_request_duration_seconds_bucket{service="$service"}[5m])) by (le)
)
# 模板变量定义(Dashboard Settings -> Variables)
Name: service
Type: Query
Query: label_values(up, service)
注意:在混沌工程故障注入期间,面板的查询时间范围应适当缩短(如最近 5-15 分钟),以便快速反映故障注入后的指标变化。同时建议为关键面板设置告警阈值,实现故障自动感知。