Grafana 基础知识
简介
在本教程中,您将学习如何使用 Grafana 为您的应用程序设置监控解决方案,并
- 探索指标和日志
- 构建面板
- 注释面板
- 设置告警规则
或者,您也可以观看我们的 Grafana 入门系列视频,其中讨论了基础概念,帮助您开始使用 Grafana。
前提条件
- Docker
- Docker Compose(包含在 Docker for Desktop for macOS 和 Windows 中)
- Git
提示
或者,您可以在我们的交互式学习环境中尝试此示例:Grafana 基础知识。
这是一个已完全配置好的环境,所有依赖项都已安装。
在Grafana Killercoda 仓库中提供反馈、报告错误和提出问题。
设置示例应用
本教程使用一个示例应用程序来演示 Grafana 的一些功能。要完成本教程中的练习,您需要将文件下载到本地机器。
在此步骤中,您将设置示例应用程序以及支持服务,例如Loki。
注意:Prometheus(一个流行的时序数据库 (TSDB))已在本教程中配置为数据源。
克隆github.com/grafana/tutorial-environment 仓库。
git clone https://github.com/grafana/tutorial-environment.git
切换到您克隆此仓库的目录
cd tutorial-environment
确保 Docker 正在运行
docker ps
没有错误表示它正在运行。如果出现错误,请启动 Docker,然后再次运行命令。
启动示例应用程序
docker-compose up -d
首次运行
docker-compose up -d
时,Docker 将下载本教程所需的所有资源。这可能需要几分钟,具体取决于您的互联网连接速度。注意:如果您的系统上已运行 Grafana、Loki 或 Prometheus,则可能会看到错误,因为 Docker 镜像尝试使用您本地安装已占用的端口。停止这些服务,然后再次运行命令。
确保所有服务都已启动并运行
docker-compose ps
在 State 列中,所有服务都应显示
Up
。在https://:8081 浏览示例应用程序。
Grafana 新闻
示例应用程序 Grafana 新闻,允许您发布链接并为您喜欢的链接投票。
添加链接
在 Title 中输入 Example。
在 URL 中输入 https://example.com。
点击 Submit 添加链接。
链接将出现在 Grafana 新闻标题下的列表中。
要投票支持链接,请点击链接名称旁边的三角形图标。
打开 Grafana
Grafana 是一个用于监控和可观测性的开源平台,允许您可视化和探索系统状态。
- 打开新标签页。
- 浏览至https://:3000。
注意
此演示不需要登录页面或凭据。但是,如果您选择在本地安装 Grafana,则需要登录并提供凭据。在这种情况下,默认用户名和密码是
admin
。
您首先看到的是 Home 仪表盘,它能帮助您快速入门。
在左上角,您可以看到菜单图标。点击它可以打开侧边栏,这是导航 Grafana 的主菜单。
探索您的指标
Grafana Explore 是一种用于故障排除和数据探索的工作流程。在此步骤中,您将使用 Explore 创建临时查询来理解示例应用程序暴露的指标。具体来说,您将探索示例应用程序接收到的请求。
临时查询是交互式创建的查询,目的是探索数据。一个临时查询通常后跟另一个更具体的查询。
点击菜单图标,然后在侧边栏中点击 Explore。左上方有一个可用数据源列表的下拉菜单。Prometheus 数据源应该已经被选中。如果没有,请选择 Prometheus。
通过检查查询面板右上角的 Builder/Code 切换按钮,确认您处于代码模式。
在查询编辑器中,写着 Enter a PromQL query… 的地方,输入
tns_request_duration_seconds_count
,然后按 Shift + Enter。将出现一个图表。在右上角,点击 Run Query 按钮上的下拉箭头,然后选择 5s。Grafana 将运行您的查询并每 5 秒更新一次图表。
您刚刚创建了您的第一个 PromQL 查询!PromQL 是一种强大的查询语言,允许您选择和聚合存储在 Prometheus 中的时序数据。
tns_request_duration_seconds_count
是一个计数器,一种值只会增加的指标类型。您可以使用计数器来计算变化率(即值增加的速度),而不是可视化实际值。将
rate
函数添加到您的查询中,以可视化每秒请求率。在查询编辑器中输入以下内容,然后按 Shift + Enter。rate(tns_request_duration_seconds_count[5m])
图表正下方有一个区域,其中每个时序都列出并旁边有一个彩色图标。这个区域称为图例。
PromQL 允许您使用
sum
聚合操作符按标签对时序进行分组。将
sum
聚合操作符添加到您的查询中,以按路由对时序进行分组sum(rate(tns_request_duration_seconds_count[5m])) by(route)
返回示例应用程序并生成一些流量,例如添加新链接、投票或只是刷新浏览器。
回到 Grafana,在右上角,点击时间选择器,并选择 Last 5 minutes。通过放大查看最近几分钟的数据,更容易看到何时接收到新数据。
根据您的用例,您可能希望按其他标签分组。尝试按其他标签分组,例如 status_code
,只需将查询中的 by(route)
部分更改为 by(status_code)
。
添加日志数据源
Grafana 支持日志数据源,如Loki。就像指标一样,您首先需要将数据源添加到 Grafana。
- 点击菜单图标,然后在侧边栏中点击 Connections,再点击 Data sources。
- 点击 + Add new data source。
- 在数据源列表中,点击 Loki。
- 在 URL 框中输入
http://loki:3100
- 滚动到页面底部,点击 Save & Test 以保存您的更改。
您应该会看到消息“Data source successfully connected.”。Loki 现在在 Grafana 中可用作数据源。
探索您的日志
Grafana Explore 不仅允许您对指标进行临时查询,还允许您探索日志。
点击菜单图标,然后在侧边栏中点击 Explore。
在顶部的数据源列表中,选择 Loki 数据源。
通过检查查询面板右上角的 Builder/Code 切换按钮,确认您处于代码模式。
在查询编辑器中输入以下内容,然后按 Shift + Enter
{filename="/var/log/tns-app.log"}
Grafana 显示示例应用程序日志文件中的所有日志。图表中每条柱子的高度表示在该时间点生成的日志数量。
在图表的柱子之间点击并拖动,以基于时间过滤日志。
Loki 不仅允许您基于标签过滤日志,还可以基于特定事件过滤。
让我们生成一个错误,并使用 Explore 分析它。
在示例应用程序中,发布一个没有 URL 的新链接,以便在您的浏览器中生成一个显示
empty url
的错误。返回 Grafana 并输入以下查询,以基于子字符串过滤日志行
{filename="/var/log/tns-app.log"} |= "error"
点击显示
level=error msg="empty url"
的日志行,以查看有关错误的更多信息。注意:如果您处于 Live 模式,点击日志不会显示有关错误的更多信息。相反,请停止并退出实时流,然后在那里点击日志行。
日志有助于了解哪里出了问题。在本教程的后面,您将看到如何将日志与 Prometheus 中的指标关联起来,以便更好地理解错误的上下文。
构建面板
仪表盘可让您一目了然地查看数据,并通过不同的可视化方式跟踪指标。
仪表盘由面板组成,每个面板代表您希望仪表盘讲述的故事的一部分。
每个面板都包含一个查询和一个可视化。查询定义了您想要显示什么数据,而可视化定义了如何显示数据。
点击菜单图标,然后在侧边栏中点击 Dashboards。
在 Dashboards 页面,点击右上角的 New,并在下拉菜单中选择 New Dashboard。
点击 + Add visualization。
在打开的模态框中,选择您刚刚添加的 Prometheus 数据源。
在图表下方的 Query 标签页中,输入之前的查询,然后按 Shift + Enter
sum(rate(tns_request_duration_seconds_count[5m])) by(route)
在右侧的面板编辑器中,在 Panel options 下,将面板标题更改为“Traffic”。
点击右上角的 Apply 保存面板并返回到仪表盘视图。
点击仪表盘顶部的 Save dashboard(磁盘)图标保存您的仪表盘。
在 Dashboard name 字段中输入名称,然后点击 Save。
您现在应该已向您的仪表盘添加了一个面板。
Grafana 仪表盘中的一个面板
注释事件
当出现问题时,了解发生故障的上下文通常会有所帮助。上次部署时间、系统更改或数据库迁移可以提供可能导致中断的原因的洞察。注释允许您直接在图表上表示此类事件。
在本教程的下一部分中,我们将模拟一些常见的用例,人们会为其添加注释。
要手动添加注释,请点击图表中的任意位置,然后点击 Add annotation。注意:您可能需要先保存仪表盘。
在 Description 中输入 Migrated user database。
点击 Save。
Grafana 将您的注释添加到图表中。将鼠标悬停在注释的底部以阅读文本。
Grafana 还允许您使用区域注释来注释时间间隔。
添加区域注释
- 按住 Ctrl(macOS 上是 Cmd),然后点击并在图表上拖动以选择一个区域。
- 在 Description 中输入 Performed load tests。
- 在 Tags 中输入 testing。
- 点击 Save。
使用注释关联日志与指标
手动为仪表盘添加注释适用于那些单独的事件。对于定期发生的事件,例如部署新版本,Grafana 支持从您的数据源之一查询注释。让我们使用之前添加的 Loki 数据源创建一个注释。
在仪表盘顶部,点击 Dashboard settings(齿轮)图标。
转到 Annotations 并点击 + Add annotation query。
在 Name 中输入 Errors。
在 Data source 中,选择 Loki。
在 Query 中输入以下查询
{filename="/var/log/tns-app.log"} |= "error"
点击 Apply。Grafana 将显示 Annotations 列表,其中包含您的新注释。
点击您的仪表盘名称返回到您的仪表盘。
现在您的仪表盘顶部有一个切换按钮,用于显示新创建的注释查询的结果。如果尚未启用,请按下它。
点击 Save dashboard(磁盘)图标保存更改。
要测试更改,返回示例应用程序,发布一个没有 URL 的新链接,以便在您的浏览器中生成一个显示
empty url
的错误。
您的查询返回的日志行现在在图表中显示为注释。

能够在同一图表中结合来自多个数据源的数据,使您可以关联来自 Prometheus 和 Loki 的信息。
注释与告警规则配合得非常好。在接下来的最后一个部分中,我们将为我们的应用程序 grafana.news
设置告警规则,然后触发它。这提供了一个快速入门到我们的新告警平台。
创建 Grafana 管理的告警规则
告警规则允许您在问题发生后立即识别系统中的问题。通过快速识别系统中的意外变化,您可以最大限度地减少对服务的干扰。
Grafana 的新告警平台随 Grafana 8 首次亮相。一年后,随 Grafana 9 成为了默认的告警方法。在此步骤中,我们创建一个 Grafana 管理的告警规则。然后我们将触发我们的新告警规则,并向一个虚拟端点发送测试消息。
最基本的告警规则由两部分组成
联系点 - 联系点定义了 Grafana 如何传递告警实例。当告警规则的条件满足时,Grafana 会通知为该告警规则配置的联系点或通道。
注意
一个告警实例是与告警规则定义的条件匹配的特定事件,例如当特定路由的请求率突然增加时。
一些流行的通道包括
告警规则 - 告警规则定义了一个或多个 Grafana 定期评估的条件。当这些评估满足规则的条件时,告警规则被触发。
首先,我们来设置一个 webhook 联系点。一旦我们有了可用的端点,我们就可以编写一个告警规则并触发通知。
为 Grafana 管理的告警规则创建联系点
在此步骤中,我们设置一个新的联系点。此联系点使用 webhook 通道。为了使其工作,我们还需要一个端点供 webhook 通道接收告警通知。我们可以使用Webhook.site 快速设置该测试端点。这样我们就可以确保我们的告警管理器确实正在将通知发送到某个地方。
- 浏览至Webhook.site。
- 复制您的唯一 URL。
您的 webhook 端点现在正在等待第一个请求。
接下来,我们配置 Grafana 告警 UI 中的联系点,以便将通知发送到我们的 webhook 端点。
返回 Grafana。在 Grafana 的侧边栏中,将鼠标悬停在 Alerting(铃铛)图标上,然后点击 Manage Contact points。
点击 + Add contact point。
在 Name 中,写入 Webhook。
在 Integration 中,选择 Webhook。
在 URL 中,粘贴您的 webhook 端点。
点击 Test,然后点击 Send test notification,向您的 webhook 端点发送测试告警通知。
返回到您之前创建的 webhook 端点。在左侧,现在有一个
POST /
条目。点击它查看 Grafana 发送的信息。返回 Grafana 并点击 Save contact point。
我们现在已经创建了一个虚拟 webhook 端点,并在 Grafana 中创建了一个新的告警联系点。现在我们可以创建一个告警规则并将其链接到这个新通道。
向 Grafana 添加告警规则
现在 Grafana 知道如何通知我们了,是时候设置告警规则了
在 Grafana 的侧边栏中,将鼠标悬停在 Alerting(铃铛)图标上,然后点击 Alert rules。
在本教程中,我们使用 Grafana 管理的告警规则创建的高级选项。高级选项允许我们定义查询、表达式(用于处理数据),以及触发告警必须满足的条件(默认条件是阈值)。
点击 + New alert rule。
对于 Section 1,将规则命名为
fundamentals-test
。对于 Section 2,切换 Advanced options 按钮。
找到 query A 框,并选择您的 Prometheus 数据源。
输入与我们在之前的面板中使用的相同的 Prometheus 查询
sum(rate(tns_request_duration_seconds_count[5m])) by(route)
保持表达式 B 和 C 不变。这些表达式(分别是 Reduce 和 Threshold)在创建新规则时默认包含。输入
0.2
作为阈值。您可以在此处阅读更多关于查询和条件的信息。滚动到 Section #2 底部,点击 Preview 按钮。您应该会看到一些数据返回。
在 Section 3 中,在 Folder 中,点击
New folder
并输入文件夹名称来创建一个新文件夹。此文件夹包含我们的告警规则。例如:fundamentals
。然后,点击create
。在 Evaluation group 中,重复上述步骤创建一个新的。也将其命名为
fundamentals
。选择评估间隔(告警规则评估的频率)。例如,每
10s
(10 秒)。设置挂起周期。这是条件必须满足的时间,直到告警实例进入 Firing 状态并发送通知。输入
0s
。为了本教程的目的,评估间隔故意设置得很短,以便于测试。此设置会使 Grafana 等待告警实例处于触发状态达到指定时间后,再发送通知。在 Section 4 中,选择 Webhook 作为 Contact point。
点击页面顶部的 Save rule and exit。
触发 Grafana 管理的告警规则
我们现在已经配置了一个告警规则和一个联系点。现在让我们看看是否可以通过在示例应用程序上生成一些流量来触发 Grafana 管理的告警规则。
- 浏览至localhost:8081。
- 添加新的标题和 URL,反复点击投票按钮,或者刷新页面以生成流量高峰。
一旦查询 sum(rate(tns_request_duration_seconds_count[5m])) by(route)
返回的值大于 0.2
,Grafana 就会触发我们的告警规则。浏览到我们之前创建的 webhook 端点,找到发送的带有详细信息和元数据的 Grafana 告警通知。
注意
告警规则可能会被
/metrics
端点触发,Grafana 在从应用程序拉取指标时会频繁访问该端点。如果发生这种情况,您可以增加 Section 2 中的 Threshold 值以用于测试目的。
在您的面板上显示 Grafana 管理的告警规则
在大多数情况下,将 Grafana 告警实例显示为仪表盘的注释也非常有用。请查看下面的视频教程,了解如何在仪表盘上显示告警。
让我们看看如何配置它。
在 Grafana 的侧边栏中,将鼠标悬停在 Alerting(铃铛)图标上,然后点击 Alert rules。
展开
fundamentals > fundamentals
文件夹以查看我们创建的告警规则。点击 Edit 图标并滚动到 Section 5。
点击 Link dashboard and panel 按钮,并选择您希望将告警实例添加为注释的仪表盘和面板。
点击 Confirm 和 Save rule and exit 保存所有更改。
在 Grafana 的侧边栏中,点击 Dashboards 并选择您创建的仪表盘,导航到该仪表盘。
要测试更改,请按照列出的步骤触发 Grafana 管理的告警规则。
您现在应该会在面板名称旁边看到一个红色断心图标,表示告警规则已触发。告警实例的注释(显示为红色垂直线)也已显示。
在仪表盘上显示 Grafana 管理的告警规则
提示
在《Grafana 告警入门 - 第 2 部分》中,您可以深入了解告警实例和通知路由,提升您的技能。
总结
在本教程中,您了解了 Grafana 的基础功能。为此,我们在您的本地机器上运行了几个 Docker 容器。当您准备清理此本地教程环境时,请运行以下命令
docker-compose down -v
了解更多
查看以下链接,继续您的 Grafana LGTM 技术栈学习之旅。