Grafana 是开源的、功能丰富的指标可视化和分析平台
Grafana 是一个开源的、功能丰富的指标可视化和分析平台。它允许你查询、可视化、告警和理解你的指标数据,无论它们存储在哪里。Grafana 可以连接多种不同的数据源,并将它们的数据整合到美观、灵活的仪表盘中。Grafana 是一个极其强大和灵活的可视化工具。本教程覆盖了从基础概念到核心的进阶功能。连接更多数据源: 尝试连接不同的数据库、日志系统、追踪系统。探索不同 Panel 类型: 尝试使用
Grafana 深度解析教程
目录
- Grafana 简介
- 安装与基本配置
- 核心概念详解
- 实战:连接数据源与创建第一个 Dashboard
- 进阶功能:变量 (Variables)
- 进阶功能:告警 (Alerting)
- 进阶功能:转换 (Transformations)
- 进阶功能:插件 (Plugins)
- 仪表盘设计与最佳实践
- 总结与后续学习
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 数据源 (示例)
- 登录 Grafana。
- 点击左侧菜单栏的齿轮图标 (Configuration) -> Data Sources。
- 点击 “Add data source”。
- 在列表中选择 “Prometheus”。
- 配置:
- Name: 给数据源起个名字,例如
MyPrometheus
。 - URL: 输入 Prometheus 服务的访问地址,例如
http://localhost:9090
或http://<prometheus_ip>:9090
。 - 其他选项(如认证)根据你的 Prometheus 配置填写。
- Name: 给数据源起个名字,例如
- 点击 “Save & test”。如果看到 “Data source is working” 的提示,说明连接成功。
4.2 创建 Dashboard
- 点击左侧菜单栏的加号图标 (+) -> Dashboard。
- 你将看到一个空的 Dashboard,准备添加 Panel。
4.3 添加第一个 Panel (时间序列图)
- 在新的 Dashboard 上,点击 “Add new panel”。
- 默认会创建一个 Time series 类型的 Panel。
4.4 编写第一个查询 (PromQL 示例)
- 在 Panel 编辑器的底部,确保 “Data source” 选择了你刚刚添加的
MyPrometheus
。 - 在查询编辑器 (通常标记为 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
: 将结果转换为百分比。
- Grafana 会自动执行查询并在上方的图表中显示结果。你可以通过右上角的时间选择器调整查看的时间范围。
4.5 Panel 配置与美化
在 Panel 编辑器的右侧,你可以找到很多配置选项:
- Panel options:
- Title: 给 Panel 起个名字,例如
CPU User Usage (%)
。 - Description: 添加描述信息。
- Title: 给 Panel 起个名字,例如
- 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 类型变量 (示例)
假设你想创建一个变量来选择不同的监控实例 (服务器)。
- 进入你的 Dashboard。
- 点击 Dashboard 顶部的齿轮图标 (Dashboard settings)。
- 选择左侧的 “Variables” 菜单。
- 点击 “Add variable”。
- 配置:
- 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
选项。
- Name: 变量名,用于在查询中引用,例如
- 点击 “Update” 保存变量。你会在 Dashboard 顶部看到一个名为
Instance
的下拉菜单。
5.4 在 Panel 查询中使用变量
现在,你可以修改 Panel 的查询来使用这个 $instance
变量。
- 编辑之前的 CPU 使用率 Panel。
- 修改查询,将硬编码的实例(如果有的话)替换为
$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 的正则匹配操作符,适用于多选变量。=
: 精确匹配,适用于单选变量。
- 点击 “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
- 点击左侧菜单栏的告警图标 (Alerting) -> Contact points。
- 点击 “New contact point”。
- 配置:
- Name: 联系点名称。
- Type: 选择通知类型 (e.g., Email, Slack, Webhook)。
- 根据所选类型填写必要的配置信息(如 Email 地址、Slack Webhook URL、API Token 等)。
- 点击 “Test” 发送测试通知。
- 点击 “Save contact point”。
6.3 创建 Alert Rule (告警规则)
- 点击左侧菜单栏的告警图标 (Alerting) -> Alert rules。
- 点击 “New alert rule”。
- 配置:
- 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
(防止抖动)。
- Evaluate every: 评估频率,例如
- Configure notifications:
- Folder: 规则所属的文件夹。
- Evaluation group: 将相关的规则分组评估。
- Add annotation/label: 添加标签和注解,用于路由、识别和提供上下文信息。例如,添加
severity=critical
标签。 - Summary/Description: 自定义告警通知的内容,可以使用模板变量。
- Rule name: 告警规则名称,例如
- 点击 “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) 中同时显示这两个结果。
- 在一个 Table Panel 中,添加两个查询 A 和 B。
- 切换到 Panel 编辑器底部的 “Transform” 标签页。
- 点击 “Add transformation”。
- 选择 “Merge”。
- Grafana 会自动将两个时间序列(或表)合并成一个,通常会包含
Time
,Value #A
,Value #B
等字段。 - 你可以继续添加 “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 查找与安装插件
- 点击左侧菜单栏的齿轮图标 (Configuration) -> Plugins。
- 在这里你可以浏览已安装的插件,也可以搜索 Grafana 官方插件市场中的插件。
- 找到你需要的插件,点击进入详情页,然后点击 “Install”。
- 安装方式可能因 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 更新迭代很快,经常会带来新的功能和改进。
希望这个深度解析教程对你有所帮助!
更多推荐
所有评论(0)