Grafana 基础知识
简介
在本教程中,您将学习如何使用 Grafana 为您的应用程序设置监控解决方案,以及
- 探索指标和日志
- 构建仪表盘
- 注释仪表盘
- 设置警报规则
或者,您还可以观看我们的 Grafana 初学者系列,我们将在其中讨论基本概念,以帮助您开始使用 Grafana。
先决条件
- Docker
- Docker Compose(包含在适用于 macOS 和 Windows 的 Docker Desktop 中)
- 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
在“状态”列中,所有服务都应显示“启动”。
浏览到 https://127.0.0.1:8081 上的示例应用程序。
Grafana 新闻
示例应用程序 Grafana 新闻允许您发布链接并为喜欢的链接投票。
要添加链接
在“标题”中,输入“示例”。
在“URL”中,输入 https://example.com。
点击“提交”以添加链接。
该链接显示在 Grafana 新闻标题下的列表中。
要为链接投票,请点击链接名称旁边的三角形图标。
打开 Grafana
Grafana 是一个用于监控和可观测性的开源平台,它允许您可视化和探索系统状态。
- 打开一个新标签页。
- 浏览到 https://127.0.0.1:3000。
注意
此演示不需要登录页面或凭据。但是,如果您选择在本地安装 Grafana,则需要登录并提供凭据。在这种情况下,默认用户名和密码为admin
。
首先看到的是“主页”仪表盘,它可以帮助您入门。
在左上角,您可以看到菜单图标。点击它将打开“侧边栏”,它是 Grafana 用于导航的主要菜单。
探索您的指标
Grafana Explore 是一个用于故障排除和数据探索的工作流程。在此步骤中,您将使用 Explore 创建临时查询以了解示例应用程序公开的指标。具体来说,您将探索示例应用程序接收到的请求。
临时查询是指以交互方式进行的查询,目的是探索数据。临时查询通常会后跟另一个更具体的查询。
点击菜单图标,然后在侧边栏中点击“探索”。可用数据源列表的下拉菜单位于左上侧。Prometheus 数据源将已被选中。如果没有,请选择 Prometheus。
通过检查查询面板右上角的“构建器/代码”切换按钮,确认您处于代码模式。
在查询编辑器中,在显示“输入 PromQL 查询…”的位置,输入
tns_request_duration_seconds_count
,然后按 Shift + Enter。将显示一个图表。在右上角,点击“运行查询”按钮上的下拉箭头,然后选择“5 秒”。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,在右上角,点击时间选择器,然后选择最近 5 分钟。放大到最近几分钟,更容易看到何时收到新数据。
根据您的用例,您可能希望按其他标签进行分组。尝试按其他标签(例如 status_code
)进行分组,方法是将查询的 by(route)
部分更改为 by(status_code)
。
添加日志数据源
Grafana 支持日志数据源,如Loki。与指标一样,您首先需要将数据源添加到 Grafana 中。
- 点击菜单图标,然后在侧边栏中点击连接,然后点击数据源。
- 点击+ 添加新数据源。
- 在数据源列表中,点击Loki。
- 在 URL 框中,输入
http://loki:3100
- 滚动到页面底部,然后点击保存并测试以保存更改。
您应该会看到消息“数据源已成功连接”。Loki 现在可以在 Grafana 中用作数据源。
探索您的日志
Grafana Explore 不仅允许您对指标进行临时查询,还允许您浏览日志。
点击菜单图标,然后在侧边栏中点击探索。
在顶部的数据库源列表中,选择Loki数据源。
通过检查查询面板右上角的“构建器/代码”切换按钮,确认您处于代码模式。
在查询编辑器中输入以下内容,然后按 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"
的日志行以查看有关错误的更多信息。注意:如果您处于实时模式,点击日志将不会显示有关错误的更多信息。相反,停止并退出实时流,然后在此处点击日志行。
日志有助于了解出错的原因。在本教程的后面,您将了解如何将日志与来自 Prometheus 的指标相关联,以更好地了解错误的上下文。
构建仪表盘
仪表盘可以让您一目了然地查看数据,并允许您通过不同的可视化方式跟踪指标。
仪表盘由面板组成,每个面板代表您希望仪表盘讲述的故事的一部分。
每个面板都包含一个查询和一个可视化。查询定义了您想要显示哪些数据,而可视化则定义了数据的显示方式。
点击菜单图标,然后在侧边栏中点击仪表盘。
在仪表盘页面上,点击右上角的新建,然后在下拉菜单中选择新建仪表盘。
点击+ 添加可视化。
在打开的模态窗口中,选择您刚刚添加的 Prometheus 数据源。
在图形下方的查询选项卡中,输入之前使用的查询,然后按 Shift + Enter。
sum(rate(tns_request_duration_seconds_count[5m])) by(route)
在右侧的面板编辑器中,在面板选项下,将面板标题更改为“流量”。
点击右上角的应用以保存面板并返回仪表盘视图。
点击仪表盘顶部的保存仪表盘(磁盘)图标以保存仪表盘。
在仪表盘名称字段中输入名称,然后点击保存。
您现在应该已将一个面板添加到仪表盘中。
注释事件
当事情出错时,了解故障发生的环境通常会有所帮助。上次部署时间、系统更改或数据库迁移可以提供对可能导致中断原因的见解。注释允许您直接在图形上表示此类事件。
在本教程的下一部分中,我们将模拟某些常见用例,用户会为这些用例添加注释。
要手动添加注释,请点击图形中的任意位置,然后点击添加注释。注意:您可能需要先保存仪表盘。
在描述中,输入迁移用户数据库。
点击保存。
Grafana 将您的注释添加到图形中。将鼠标悬停在注释的底部以读取文本。
Grafana 还允许您使用区域注释注释时间间隔。
添加区域注释。
- 按住 Ctrl(或 macOS 上的 Cmd),然后点击并拖动图形以选择一个区域。
- 在描述中,输入执行负载测试。
- 在标签中,输入测试。
- 点击保存。
使用注释将日志与指标相关联
手动注释仪表盘对于那些单个事件来说是可以的。对于定期发生的事件(例如部署新版本),Grafana 支持从您的一个数据源查询注释。让我们使用前面添加的 Loki 数据源创建一个注释。
在仪表盘顶部,点击仪表盘设置(齿轮)图标。
转到注释,然后点击添加注释查询。
在名称中,输入错误。
在数据源中,选择Loki。
在查询中,输入以下查询。
{filename="/var/log/tns-app.log"} |= "error"
点击应用。Grafana 显示注释列表,其中包含您的新注释。
点击您的仪表盘名称以返回到您的仪表盘。
在仪表盘顶部,现在有一个切换按钮来显示新创建的注释查询的结果。如果它尚未启用,请按一下。
点击保存仪表盘(磁盘)图标以保存更改。
要测试更改,请返回到示例应用程序,发布一个没有 URL 的新链接,以在浏览器中生成显示
empty url
的错误。
查询返回的日志行现在在图形中显示为注释。
能够在一个图形中组合来自多个数据源的数据使您可以将来自 Prometheus 和 Loki 的信息相关联。
注释与警报规则一起使用效果也非常好。在下一部分也是最后一部分中,我们将为我们的应用程序 grafana.news
设置警报规则,然后触发它。这将快速介绍我们的新警报平台。
创建 Grafana 托管警报规则
警报规则允许您在系统出现问题后立即识别问题。通过快速识别系统中意外的变化,您可以最大程度地减少对服务的中断。
Grafana 的新警报平台在 Grafana 8 中首次亮相。一年后,随着 Grafana 9 的发布,它成为默认的警报方法。在此步骤中,我们将创建一个 Grafana 托管的警报规则。然后,我们将触发新的警报规则并将测试消息发送到虚拟端点。
最基本的警报规则包含两个部分。
联系点 - 联系点定义了 Grafana 如何传递警报实例。当满足警报规则的条件时,Grafana 会通知为该警报规则配置的联系点或通道。
注意
一个警报实例是一个特定事件,它与警报规则定义的条件匹配,例如当特定路由的请求速率突然增加时。一些流行的渠道包括:
警报规则 - 警报规则定义了一个或多个 Grafana 定期评估的条件。当这些评估满足规则的标准时,警报规则将被触发。
首先,让我们设置一个 Webhook 联系点。一旦我们有了可用的端点,我们将编写一个警报规则并触发通知。
为 Grafana 托管警报规则创建联系人
在此步骤中,我们将设置一个新的联系点。此联系点将使用Webhook通道。为了使此方法有效,我们还需要一个端点,以便我们的 Webhook 通道接收警报通知。我们将使用requestbin.com快速设置该测试端点。这样,我们可以确保我们的警报管理器确实将通知发送到某个地方。
- 浏览到requestbin.com。
- 在创建请求 Bin按钮下,点击链接以创建公共 Bin。
- 从 Request Bin 复制端点 URL。
您的 Request Bin 现在正在等待第一个请求。
接下来,让我们在 Grafana 的警报 UI 中配置一个联系点,以将通知发送到我们的 Request Bin。
返回到 Grafana。在 Grafana 的侧边栏中,将鼠标悬停在警报(铃铛)图标上,然后点击管理联系点。
点击+ 添加联系点。
在名称中,写入RequestBin。
在集成中,选择Webhook。
在URL中,粘贴到您的请求 Bin 的端点。
点击测试,然后点击发送测试通知以将测试警报通知发送到您的请求 Bin。
导航回您之前创建的 Request Bin。左侧现在有一个
POST /
条目。点击它以查看 Grafana 发送了哪些信息。返回到 Grafana 并点击保存联系点。
我们现在已经创建了一个虚拟 Webhook 端点并在 Grafana 中创建了一个新的警报联系点。现在,我们可以创建一个警报规则并将其链接到此新通道。
将警报规则添加到 Grafana
现在 Grafana 知道如何通知我们,是时候设置警报规则了。
在 Grafana 的侧边栏中,将鼠标悬停在警报(铃铛)图标上,然后点击警报规则。
点击+ 新警报规则。
对于第 1 部分,将规则命名为
fundamentals-test
。对于第 2 部分,找到查询 A框。选择您的 Prometheus 数据源。请注意,规则类型应自动切换到 Grafana 托管的警报规则。
通过选中 Builder/Code 切换按钮切换到代码模式。
输入我们在之前面板中使用的相同 Prometheus 查询。
sum(rate(tns_request_duration_seconds_count[5m])) by(route)
滚动到第 2 部分的底部,然后点击预览按钮。您应该会看到一些返回的数据。
保持表达式“B”和“C”不变。这些表达式(分别为 Reduce 和 Threshold)在创建新规则时默认包含。表达式“B”选择查询“A”的最后一个值,而阈值表达式“C”将检查表达式“B”的最后一个值是否高于特定值。此外,阈值表达式默认是警报规则条件。输入
0.2
作为阈值。您可以在此处了解更多关于查询和条件的信息。在**第 3 节**的文件夹中,通过点击
新建文件夹
并输入文件夹名称来创建一个新文件夹。此文件夹将包含我们的警报规则。例如:fundamentals
。然后,点击创建
。在评估组中,重复上述步骤创建一个新的评估组。我们也将其命名为
fundamentals
。选择评估间隔(警报规则将多久评估一次)。例如,每
10s
(10 秒)。设置待处理时间。这是条件必须满足的时间,直到警报实例进入触发状态并发送通知。输入
0s
。在本教程中,评估间隔有意设置得很短。这使得测试更容易。此设置使 Grafana 等待警报实例触发一段时间后,再发送通知。在**第 4 节**中,选择RequestBin作为联系点。
点击页面顶部的保存规则并退出。
触发 Grafana 托管警报规则
我们现在已经配置了一个警报规则和一个联系点。现在让我们看看是否可以通过在我们的示例应用程序上生成一些流量来触发 Grafana 管理的警报规则。
- 浏览到localhost:8081。
- 添加一个新的标题和 URL,重复点击投票按钮,或刷新页面以生成流量峰值。
一旦查询sum(rate(tns_request_duration_seconds_count[5m])) by(route)
返回的值大于0.2
,Grafana 将触发我们的警报规则。浏览到我们之前创建的 Request Bin,并找到发送的 Grafana 警报通知,其中包含详细信息和元数据。
注意
警报规则可能由/metrics
端点触发,该端点在 Grafana 从应用程序提取指标时被频繁访问。如果发生这种情况,您可以出于测试目的在**第 2 节**中增加阈值。
将 Grafana 托管警报规则显示到您的仪表盘
在大多数情况下,将 Grafana 警报实例显示为仪表板的注释也很有价值。查看下面的视频教程,了解如何将警报显示到仪表板。
让我们看看如何配置它。
在 Grafana 的侧边栏中,将鼠标悬停在警报(铃铛)图标上,然后点击警报规则。
展开
fundamentals > fundamentals
文件夹以查看我们创建的警报规则。点击编辑图标并向下滚动到第 5 节。
点击链接仪表板和面板按钮,并选择要将警报实例添加为注释的仪表板和面板。
点击确认和保存规则并退出以保存所有更改。
在 Grafana 的侧边栏中,通过点击仪表板并选择您创建的仪表板来导航到该仪表板。
要测试更改,请按照列出的步骤操作触发 Grafana 管理的警报规则。
您现在应该会在面板名称旁边看到一个红色的断裂的心形图标,表示警报规则已被触发。警报实例的注释(表示为一条垂直的红线)也会显示出来。
提示
查看我们的高级警报教程,以获取更多见解和提示。
总结
在本教程中,您了解了 Grafana 的基本功能。为此,我们在您的本地机器上运行了几个 Docker 容器。当您准备好清理此本地教程环境时,请运行以下命令
docker-compose down -v
了解更多
查看以下链接,继续您与 Grafana 的 LGTM 堆栈的学习之旅。