Grafana 深度解析教程

目录

  1. Grafana 简介
  2. 安装与基本配置
  3. 核心概念详解
  4. 实战:连接数据源与创建第一个 Dashboard
  5. 进阶功能:变量 (Variables)
  6. 进阶功能:告警 (Alerting)
  7. 进阶功能:转换 (Transformations)
  8. 进阶功能:插件 (Plugins)
  9. 仪表盘设计与最佳实践
  10. 总结与后续学习

1. Grafana 简介

1.1 什么是 Grafana?

Grafana 是一个开源的、功能丰富的指标可视化和分析平台。它允许你查询、可视化、告警和理解你的指标数据,无论它们存储在哪里。Grafana 可以连接多种不同的数据源,并将它们的数据整合到美观、灵活的仪表盘中。

1.2 核心优势
  • 开放性: 开源免费,拥有活跃的社区支持。
  • 多数据源支持: 支持 Prometheus, InfluxDB, Elasticsearch, MySQL, PostgreSQL, Loki, Tempo, Jaeger 等数十种数据源。
  • 强大的可视化: 提供多种面板类型(时间序列图、仪表盘、表格、热力图等),高度可定制。
  • 动态仪表盘: 支持变量,可以创建可交互、可复用的仪表盘模板。
  • 统一告警: 内建强大的统一告警系统 (NGalert)。
  • 可扩展性: 通过插件机制可以轻松扩展数据源、面板和应用程序功能。
  • 权限控制: 支持组织 (Organization) 和团队 (Team) 级别的权限管理。
1.3 常见应用场景
  • 系统监控: CPU、内存、磁盘、网络等基础设施指标的可视化。
  • 应用性能监控 (APM): 请求延迟、错误率、吞吐量等应用指标的可视化。
  • 日志聚合与分析: 结合 Loki 进行日志查询和可视化。
  • 分布式追踪: 结合 Tempo 或 Jaeger 可视化请求链路。
  • 业务指标监控: 订单量、用户活跃度、销售额等业务数据的可视化。
  • 物联网 (IoT): 传感器数据的实时监控与分析。

2. 安装与基本配置

2.1 安装方式 (以 Docker 为例)

使用 Docker 是最快捷方便的启动 Grafana 的方式。

# 拉取最新的 Grafana 镜像
docker pull grafana/grafana

# 运行 Grafana 容器
docker run -d --name=grafana -p 3000:3000 grafana/grafana

这个命令会在后台运行一个名为 grafana 的容器,并将容器的 3000 端口映射到主机的 3000 端口。

其他安装方式包括:直接下载二进制文件、使用包管理器 (apt, yum) 等,详见 Grafana 官方文档。

2.2 初始访问与登录

安装并运行成功后,在浏览器中访问 http://<你的服务器IP>:3000
默认的管理员用户名和密码是 admin / admin。首次登录后会提示修改密码。

2.3 基本界面概览
  • 左侧菜单栏: 导航的主要区域,包含 Dashboard、Explore、Alerting、Configuration、Administration 等入口。
  • 顶部栏: 包含 Dashboard 标题、时间范围选择器、刷新按钮、分享、保存等操作。
  • 主工作区: 显示 Dashboard 的内容(Panels)。

3. 核心概念详解

3.1 Data Source (数据源)

Grafana 本身不存储监控数据,它通过配置数据源来连接到存储指标、日志或追踪数据的后端系统。每个数据源都有特定的查询编辑器和功能。

  • 示例: Prometheus, InfluxDB, Elasticsearch, MySQL, PostgreSQL, Loki, Tempo, CloudWatch 等。
  • 配置: 通常需要提供连接地址、认证信息(用户名/密码、API Key、证书等)。
3.2 Dashboard (仪表盘)

Dashboard 是 Grafana 可视化的核心,是一个或多个 Panel 的集合。它提供对监控数据的高层次概览。

  • 特点: 可以组织、排列 Panels,设置全局时间范围,定义变量,配置告警规则。
  • 管理: 可以创建、导入、导出、设置权限、添加标签。
3.3 Panel (面板)

Panel 是 Dashboard 上的基本可视化单元。每个 Panel 通常展示一个或多个查询 (Query) 的结果。

  • 类型: Time series (时间序列图), Stat (统计值), Gauge (仪表盘), Bar gauge (条形仪表盘), Table (表格), Text (文本), Heatmap (热力图), Logs (日志), Node Graph (节点图) 等。
  • 配置: 每个 Panel 都有丰富的配置选项,包括数据源选择、查询编写、可视化设置(颜色、单位、图例、阈值等)、坐标轴设置等。
3.4 Query (查询)

Query 定义了从选定的数据源中获取什么数据。查询语言的语法取决于具体的数据源。

  • 示例 (PromQL): rate(node_cpu_seconds_total{mode="system"}[5m]) 查询系统 CPU 使用率。
  • 示例 (InfluxQL): SELECT mean("usage_idle") FROM "cpu" WHERE $timeFilter GROUP BY time($__interval) 查询 CPU 空闲率。
  • 查询编辑器: Grafana 为不同的数据源提供了相应的查询编辑器,通常带有自动补全和语法高亮功能。
3.5 Visualization (可视化)

将查询返回的数据以图形或文本的方式展示出来。Grafana 提供了多种可视化类型(即 Panel 类型),并允许进行详细的定制。

3.6 Row (行)

Row 用于在 Dashboard 中组织和管理 Panels。可以折叠或展开 Row,方便浏览大型 Dashboard。

3.7 Organization & User Management (组织与用户管理)
  • Organization (组织): Grafana 支持多租户,每个组织拥有独立的 Data Sources, Dashboards, Users。适用于隔离不同团队或环境。
  • User (用户): Grafana 有 Viewer, Editor, Admin 等角色,控制用户对资源的访问权限。可以配置多种认证方式(LDAP, OAuth 等)。

4. 实战:连接数据源与创建第一个 Dashboard

假设你已经有一个运行中的 Prometheus 服务 (例如:通过 node-exporter 监控本机指标)。

4.1 添加 Prometheus 数据源 (示例)
  1. 登录 Grafana。
  2. 点击左侧菜单栏的齿轮图标 (Configuration) -> Data Sources。
  3. 点击 “Add data source”。
  4. 在列表中选择 “Prometheus”。
  5. 配置:
    • Name: 给数据源起个名字,例如 MyPrometheus
    • URL: 输入 Prometheus 服务的访问地址,例如 http://localhost:9090http://<prometheus_ip>:9090
    • 其他选项(如认证)根据你的 Prometheus 配置填写。
  6. 点击 “Save & test”。如果看到 “Data source is working” 的提示,说明连接成功。
4.2 创建 Dashboard
  1. 点击左侧菜单栏的加号图标 (+) -> Dashboard。
  2. 你将看到一个空的 Dashboard,准备添加 Panel。
4.3 添加第一个 Panel (时间序列图)
  1. 在新的 Dashboard 上,点击 “Add new panel”。
  2. 默认会创建一个 Time series 类型的 Panel。
4.4 编写第一个查询 (PromQL 示例)
  1. 在 Panel 编辑器的底部,确保 “Data source” 选择了你刚刚添加的 MyPrometheus
  2. 在查询编辑器 (通常标记为 A) 中输入 PromQL 查询。例如,查询 CPU 用户态使用率:
    rate(node_cpu_seconds_total{mode="user"}[5m]) * 100
    
    • node_cpu_seconds_total: Prometheus node-exporter 提供的 CPU 时间计数器。
    • {mode="user"}: 筛选用户态模式。
    • rate(...[5m]): 计算最近 5 分钟的平均增长率。
    • * 100: 将结果转换为百分比。
  3. Grafana 会自动执行查询并在上方的图表中显示结果。你可以通过右上角的时间选择器调整查看的时间范围。
4.5 Panel 配置与美化

在 Panel 编辑器的右侧,你可以找到很多配置选项:

  • Panel options:
    • Title: 给 Panel 起个名字,例如 CPU User Usage (%)
    • Description: 添加描述信息。
  • Visualization:
    • Graph styles: Line (线), Bars (柱状), Points (点)。
    • Line interpolation: Linear, Smooth, Step before/after。
    • Axis: 配置 Y 轴的单位 (Unit -> Percent (0.0-1.0) 或 Percent (0-100))、最小值/最大值、标签等。
    • Legend: 配置图例显示格式、位置、是否显示等。
    • Thresholds: 设置阈值,当数据超过阈值时改变颜色(例如,CPU 使用率 > 80% 标红)。
  • Standard options:
    • Unit: 为数据选择合适的单位(非常重要!)。
    • Color scheme: 选择颜色方案。
    • No value: 如何处理空数据点。

完成配置后,点击右上角的 “Apply” 保存 Panel 设置。然后点击 Dashboard 右上角的保存图标 (软盘),给 Dashboard 命名并保存。

5. 进阶功能:变量 (Variables)

5.1 变量的作用

变量允许创建交互式的、可复用的 Dashboard。用户可以通过下拉菜单等方式选择变量值,动态改变 Panel 中的查询,从而查看不同维度的数据(如不同的服务器、不同的应用实例等),而无需为每个维度创建单独的 Dashboard 或 Panel。

5.2 变量类型 (Query, Custom, Textbox 等)
  • Query: 变量的值通过查询数据源动态获取(最常用)。
  • Custom: 手动定义一组固定的可选值。
  • Textbox: 用户可以输入任意文本作为变量值。
  • Constant: 定义一个隐藏的常量值。
  • DataSource: 允许用户选择要查询的数据源。
  • Interval: 定义时间间隔(如 1m, 5m, 1h),常用于聚合查询。
  • Ad hoc filters: 允许用户添加临时的键值对过滤条件 (主要用于 InfluxDB, Elasticsearch 等)。
5.3 创建 Query 类型变量 (示例)

假设你想创建一个变量来选择不同的监控实例 (服务器)。

  1. 进入你的 Dashboard。
  2. 点击 Dashboard 顶部的齿轮图标 (Dashboard settings)。
  3. 选择左侧的 “Variables” 菜单。
  4. 点击 “Add variable”。
  5. 配置:
    • Name: 变量名,用于在查询中引用,例如 instance (只能包含字母、数字、下划线)。
    • Type: 选择 Query
    • Label: 显示在 Dashboard 顶部的标签,例如 Instance
    • Data source: 选择你的 Prometheus 数据源 (MyPrometheus)。
    • Query: 输入用于获取实例列表的查询。对于 Prometheus node-exporter,通常是:
      label_values(node_exporter_build_info, instance)
      
      这个查询会返回 node_exporter_build_info 指标的所有 instance 标签的值。
    • Regex (可选): 使用正则表达式过滤或提取查询结果。
    • Sort: 对结果进行排序。
    • Selection Options:
      • Multi-value: 允许多选。
      • Include All option: 添加一个 All 选项。
  6. 点击 “Update” 保存变量。你会在 Dashboard 顶部看到一个名为 Instance 的下拉菜单。
5.4 在 Panel 查询中使用变量

现在,你可以修改 Panel 的查询来使用这个 $instance 变量。

  1. 编辑之前的 CPU 使用率 Panel。
  2. 修改查询,将硬编码的实例(如果有的话)替换为 $instance。如果你的原始查询没有指定实例,现在可以加上:
    # 如果允许多选,且数据源支持 (如 Prometheus),可能需要这样写
    rate(node_cpu_seconds_total{instance=~"$instance", mode="user"}[5m]) * 100
    
    # 如果只允许单选,或只想匹配单个值
    rate(node_cpu_seconds_total{instance="$instance", mode="user"}[5m]) * 100
    
    • $instance: Grafana 会将其替换为当前选中的变量值。
    • =~: Prometheus 的正则匹配操作符,适用于多选变量。
    • =: 精确匹配,适用于单选变量。
  3. 点击 “Apply”。现在,当你改变 Dashboard 顶部的 Instance 下拉菜单时,Panel 中的图表会自动更新,显示对应实例的数据。
5.5 变量链式依赖与多选
  • 链式依赖: 一个变量的查询可以依赖于另一个变量的值。例如,你可以先创建一个 job 变量,然后 instance 变量的查询可以写成 label_values(node_exporter_build_info{job="$job"}, instance),这样 instance 下拉菜单只会显示选中 job 下的实例。
  • 多选与 All: 如果启用了多选或 All 选项,Grafana 会将变量值格式化(例如 (val1|val2|val3))。你需要确保你的查询能够处理这种格式(例如 Prometheus 的 =~ 操作符)。可以在 Variable 设置的 “Formatting” 选项中调整格式。

6. 进阶功能:告警 (Alerting)

Grafana 提供了强大的内置告警系统 (从 Grafana 8 开始称为 NGalert),允许你基于 Panel 的查询结果定义告警规则。

6.1 Grafana 告警机制 (NGalert)

NGalert 将告警规则的管理从 Dashboard Panel 中分离出来,集中管理。它包括:

  • Alert Rules (告警规则): 定义了查询、条件、评估间隔和触发告警的行为。
  • Contact Points (联系点,原 Notification Channels): 定义了告警通知发送的方式和目标(如 Email, Slack, Webhook, PagerDuty 等)。
  • Notification Policies (通知策略): 定义了告警如何路由到不同的 Contact Points,支持分组、静默、抑制等高级功能。
  • Silences (静默): 临时禁用特定告警规则或匹配条件的通知。
6.2 配置 Notification Channels (通知渠道) / Contact Points
  1. 点击左侧菜单栏的告警图标 (Alerting) -> Contact points。
  2. 点击 “New contact point”。
  3. 配置:
    • Name: 联系点名称。
    • Type: 选择通知类型 (e.g., Email, Slack, Webhook)。
    • 根据所选类型填写必要的配置信息(如 Email 地址、Slack Webhook URL、API Token 等)。
    • 点击 “Test” 发送测试通知。
    • 点击 “Save contact point”。
6.3 创建 Alert Rule (告警规则)
  1. 点击左侧菜单栏的告警图标 (Alerting) -> Alert rules。
  2. 点击 “New alert rule”。
  3. 配置:
    • Rule name: 告警规则名称,例如 High CPU Usage
    • Data source: 选择数据源 (MyPrometheus)。
    • Query (A): 输入用于告警评估的查询。例如,获取 CPU 平均使用率:
      # 计算所有非空闲模式 CPU 使用率的平均值
      avg(rate(node_cpu_seconds_total{mode!="idle"}[5m])) * 100
      
    • Expression (B): (可选)可以添加表达式对查询结果进行处理或组合多个查询。这里我们直接使用查询 A 的结果。
    • Condition: 定义触发告警的条件。
      • 选择输入: B (或者你定义的表达式)。
      • 条件类型: IS ABOVE
      • 阈值: 80
      • 这意味着当表达式 B 的值(即平均 CPU 使用率)超过 80 时,条件满足。
    • Configure evaluation:
      • Evaluate every: 评估频率,例如 1m (每分钟评估一次)。
      • For: 持续时间,条件需要持续满足多长时间才触发告警状态 (Pending -> Firing),例如 5m (防止抖动)。
    • Configure notifications:
      • Folder: 规则所属的文件夹。
      • Evaluation group: 将相关的规则分组评估。
      • Add annotation/label: 添加标签和注解,用于路由、识别和提供上下文信息。例如,添加 severity=critical 标签。
      • Summary/Description: 自定义告警通知的内容,可以使用模板变量。
  4. 点击 “Save rule”。
6.4 告警规则条件与评估
  • Grafana 会按照设定的 Evaluate every 周期性地执行查询。
  • 将查询结果与 Condition 进行比较。
  • 如果条件满足,告警进入 Pending 状态。
  • 如果条件持续满足达到 For 设定的时间,告警状态变为 Firing
  • 如果条件不再满足,告警状态变为 Normal
6.5 告警状态与生命周期
  • Normal: 条件未满足。
  • Pending: 条件已满足,但尚未达到 For 设定的持续时间。
  • Firing: 条件持续满足,告警已触发,将根据 Notification Policies 发送通知。
  • Silenced: 告警规则或实例被静默,即使触发也不会发送通知。
  • Error/NoData: 评估过程中出错或查询未返回数据。

你需要配置 Notification Policies (在 Alerting 页面) 来决定哪些 Firing 状态的告警(可以根据标签匹配)应该发送到哪个 Contact Point。默认策略通常是将所有告警发送到默认联系点。

7. 进阶功能:转换 (Transformations)

7.1 转换的作用

转换允许你在数据可视化之前对查询返回的数据进行处理和修改。这使得你可以在 Grafana 层面进行数据聚合、过滤、合并、计算等操作,而无需修改数据源的查询或依赖数据源本身支持这些操作。

7.2 常用转换类型 (Filter, Merge, Organize Fields 等)
  • Filter data by values: 根据字段值过滤数据行。
  • Filter data by query: 隐藏或显示特定的查询结果。
  • Merge: 将多个查询结果合并成一个表。
  • Join by field: 类似 SQL 的 JOIN 操作,根据相同字段的值连接多个结果。
  • Organize fields: 重命名、隐藏、排序字段(列)。
  • Add field from calculation: 基于其他字段的值计算新字段(如 Binary operation, Row index)。
  • Group by: 对数据进行分组并计算聚合值(如 Count, Sum, Mean)。
  • Sort by: 根据字段值对数据行排序。
  • Limit: 限制显示的行数。
7.3 转换示例:合并多个查询结果

假设你有两个查询:

  • 查询 A: 返回服务器 X 的 CPU 使用率。
  • 查询 B: 返回服务器 Y 的 CPU 使用率。

你想在一个表格 (Table Panel) 中同时显示这两个结果。

  1. 在一个 Table Panel 中,添加两个查询 A 和 B。
  2. 切换到 Panel 编辑器底部的 “Transform” 标签页。
  3. 点击 “Add transformation”。
  4. 选择 “Merge”。
  5. Grafana 会自动将两个时间序列(或表)合并成一个,通常会包含 Time, Value #A, Value #B 等字段。
  6. 你可以继续添加 “Organize fields” 转换来重命名字段,例如将 Value #A 改为 Server X CPU, Value #B 改为 Server Y CPU

8. 进阶功能:插件 (Plugins)

8.1 插件类型 (Data Source, Panel, App)
  • Data Source Plugins: 添加对新数据源的支持。
  • Panel Plugins: 提供新的可视化类型。
  • App Plugins: 通常包含一组 Data Source、Panels 和 Dashboards,提供针对特定应用(如 Kubernetes, Jenkins)的完整监控解决方案。
8.2 查找与安装插件
  1. 点击左侧菜单栏的齿轮图标 (Configuration) -> Plugins。
  2. 在这里你可以浏览已安装的插件,也可以搜索 Grafana 官方插件市场中的插件。
  3. 找到你需要的插件,点击进入详情页,然后点击 “Install”。
  4. 安装方式可能因 Grafana 版本和部署方式而异:
    • Grafana Cloud 或有写入权限的本地实例: 可以直接在 UI 中安装。
    • Docker: 可能需要在启动容器时通过环境变量 GF_INSTALL_PLUGINS 指定,或者进入容器使用 grafana-cli plugins install <plugin-id> 命令安装,然后重启容器。
    • 本地安装: 使用 grafana-cli plugins install <plugin-id> 命令安装,然后重启 Grafana 服务。
8.3 常用插件推荐
  • Panel:
    • Pie Chart: 经典的饼图。
    • Worldmap Panel: 在世界地图上展示地理位置相关的数据。
    • Statusmap: 以网格形式显示状态(类似于 GitHub 的贡献图)。
    • Boom Table: 功能更强大的表格面板。
    • Plotly: 支持创建更复杂的 2D/3D 图表。
  • Data Source: 根据你需要连接的特定数据库或服务选择。
  • App:
    • Kubernetes App: 提供 K8s 集群的监控仪表盘和集成。
    • Zabbix App: 集成 Zabbix 数据源和仪表盘。

9. 仪表盘设计与最佳实践

9.1 明确目标受众与监控目标
  • 为谁设计?(运维、开发、管理层?)
  • 他们关心什么核心指标?(系统概览、应用性能、业务 KPI?)
  • Dashboard 的主要目的是什么?(快速发现问题、容量规划、性能分析?)
9.2 合理布局与组织
  • 自顶向下:最重要的信息放在顶部(如关键服务的状态、核心 KPI)。
  • 逻辑分组: 使用 Rows 将相关的 Panels 组织在一起(例如,一个 Row 放 CPU 相关指标,另一个 Row 放内存相关指标)。
  • 利用折叠: 对于不太常用的 Panels 或详细信息,可以放在可折叠的 Row 或 Panel 中。
  • 保持简洁: 避免在一个 Dashboard 上堆砌过多信息,考虑拆分成多个专注的 Dashboard。
9.3 善用变量提高复用性
  • 尽可能使用变量来筛选数据(如环境、服务、实例、区域等),避免创建大量重复的 Dashboard。
  • 使用 All 或多选选项时,确保查询和 Panel 配置能正确处理。
  • 考虑使用链式变量来提供更精细的筛选。
9.4 保持查询简洁高效
  • 避免过于复杂的查询,可能会影响 Dashboard 加载速度和数据源性能。
  • 利用 Grafana 的 $__interval$__rate_interval 变量来根据时间范围动态调整聚合粒度,减少查询的数据点。
  • 只查询必要的标签和数据。
9.5 使用 Annotations (注解) 关联事件
  • 在 Dashboard Settings -> Annotations 中配置。
  • 可以手动添加注解,标记特定事件(如版本发布、配置变更)。
  • 也可以配置从数据源(如 Prometheus Alertmanager, Elasticsearch)自动拉取事件作为注解,将告警或特定日志事件叠加显示在图表上,方便关联分析。
9.6 命名规范与标签
  • 为 Dashboard, Panel, Variable 使用清晰、一致的命名。
  • 使用 Tags (在 Dashboard Settings 中) 对 Dashboard 进行分类,方便搜索和组织。例如,可以按环境 (production, staging)、服务 (web, database)、团队 (infra, backend) 等添加标签。

10. 总结与后续学习

Grafana 是一个极其强大和灵活的可视化工具。本教程覆盖了从基础概念到核心的进阶功能。要精通 Grafana,需要不断实践:

  • 连接更多数据源: 尝试连接不同的数据库、日志系统、追踪系统。
  • 探索不同 Panel 类型: 尝试使用表格、仪表盘、热力图等,了解它们的适用场景和配置。
  • 深入学习查询语言: 精通你常用数据源的查询语言(如 PromQL, InfluxQL, LogQL, SQL)是发挥 Grafana 能力的关键。
  • 掌握告警和通知策略: 构建可靠的告警系统。
  • 探索官方文档和社区: Grafana 官方文档非常完善,社区(论坛、博客)也有大量资源和解决方案。
  • 关注新版本: Grafana 更新迭代很快,经常会带来新的功能和改进。

希望这个深度解析教程对你有所帮助!

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐