3. Grafana 基础:架构、数据源与仪表盘概念

在混沌工程实践中,Grafana 是承载故障注入效果可视化、容量水位监控与 SLO 状态展示的核心平台。本章将系统梳理 Grafana 的整体架构、数据源配置方式以及面板与仪表盘的核心概念,为后续的故障注入实验与容量水位口径实战打下坚实的可视化基础。

3.1 Grafana 整体架构

Grafana 采用前后端分离的插件化架构,核心组件包括前端 UI、后端 API 服务、数据源插件层、告警引擎以及面板/仪表盘渲染引擎。其架构设计使得 Grafana 能够对接多种时序数据库,并通过灵活的查询转换与可视化组件呈现数据。

Grafana 核心架构图 用户浏览器 / HTTP 客户端 Grafana 前端 UI (React) Grafana 后端 API (Go) 数据源插件层 (Prometheus / InfluxDB / Elasticsearch / Loki / ...) Prometheus InfluxDB 其他数据源 告警引擎 / 规则评估
架构要点: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 仪表盘组织原则

在混沌工程容量水位监控中,仪表盘应按照以下层次组织:

  1. 全局概览层:展示系统整体健康状态、SLO 达成率、关键容量水位指标。
  2. 服务分层:按微服务或业务模块划分,展示各服务的延迟、错误率、吞吐量。
  3. 故障注入层:专门展示正在进行的故障注入实验状态、影响范围、指标变化。
  4. 容量水位层:展示 CPU、内存、磁盘、网络等资源使用率与剩余容量。
混沌工程仪表盘分层结构 全局概览层: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 分钟),以便快速反映故障注入后的指标变化。同时建议为关键面板设置告警阈值,实现故障自动感知。

3.4 本章小结