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
在 State 列中,所有服务应显示
Up
。在 https://:8081 访问示例应用。
Grafana News
示例应用程序 Grafana News 允许您发布链接并为您喜欢的链接投票。
添加链接
在 Title 中,输入 Example。
在 URL 中,输入 https://example.com。
点击 Submit 添加链接。
该链接会出现在 Grafana News 标题下的列表中。
要为链接投票,点击链接名称旁边的三角形图标。
打开 Grafana
Grafana 是一个用于监控和可观测性的开源平台,可让您可视化和探索系统状态。
- 打开一个新的浏览器标签页。
- 访问 https://:3000。
注意
此演示不需要登录页面或凭据。但是,如果您选择在本地安装 Grafana,您需要登录并提供凭据。在这种情况下,默认用户名和密码为
admin
。
您首先看到的是 Home 仪表盘,它可以帮助您入门。
在左上角,您可以看到菜单图标。点击它会打开 sidebar (侧边栏),它是导航 Grafana 的主菜单。
探索您的指标
Grafana Explore 是一个用于故障排除和数据探索的工作流程。在此步骤中,您将使用 Explore 创建临时查询,以了解示例应用程序暴露的指标。具体来说,您将探索示例应用程序接收到的请求。
临时查询是为探索数据而进行的交互式查询。临时查询之后通常会跟着另一个更具体的查询。
点击菜单图标,然后在侧边栏中点击 Explore。左上方有一个可用数据源列表的下拉菜单。Prometheus 数据源应该已被选中。如果不是,请选择 Prometheus。
通过检查查询面板右上角的 Builder/Code 开关,确认您处于代码模式。
在查询编辑器中,显示 Enter a PromQL query…(输入 PromQL 查询…)的地方,输入
tns_request_duration_seconds_count
,然后按 Shift + Enter。图表就会出现。在右上角,点击 Run Query(运行查询)按钮上的下拉箭头,然后选择 5s。Grafana 会运行您的查询并每 5 秒更新一次图表。
您刚刚执行了第一个 PromQL 查询!PromQL 是一种强大的查询语言,可让您选择和聚合存储在 Prometheus 中的时间序列数据。
tns_request_duration_seconds_count
是一个 counter(计数器),这是一种值只会增加的指标类型。与其可视化实际值,不如使用计数器来计算 rate of change(变化率),即值增加的速度。向您的查询中添加
rate
函数,以可视化每秒请求的速率。在查询编辑器中输入以下内容,然后按 Shift + Enter。rate(tns_request_duration_seconds_count[5m])
图表正下方有一个区域,其中列出了每个时间序列及其旁边的彩色图标。该区域称为 legend(图例)。
PromQL 允许您使用
sum
聚合运算符,按标签对时间序列进行分组。向您的查询中添加
sum
聚合运算符,以按路由对时间序列进行分组sum(rate(tns_request_duration_seconds_count[5m])) by(route)
返回 示例应用 并添加新链接、投票或仅刷新浏览器来生成一些流量。
回到 Grafana,在右上角,点击 time picker(时间选择器),然后选择 Last 5 minutes(最近 5 分钟)。通过放大最近几分钟的数据,更容易看到何时收到新数据。
根据您的用例,您可能希望按其他标签进行分组。尝试按其他标签(例如 status_code
)进行分组,只需将查询中的 by(route)
部分更改为 by(status_code)
。
添加日志数据源
Grafana 支持日志数据源,例如 Loki。就像处理指标一样,您首先需要将数据源添加到 Grafana。
- 点击菜单图标,然后在侧边栏中点击 Connections(连接)和 Data sources(数据源)。
- 点击 + Add new data source(+ 添加新数据源)。
- 在数据源列表中,点击 Loki。
- 在 URL 框中,输入
http://loki:3100
- 滚动到页面底部,点击 Save & Test(保存并测试)以保存您的更改。
您应该看到消息“数据源连接成功”。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 的指标关联起来,以更好地理解错误的上下文。
构建仪表盘
一个 dashboard(仪表盘)为您提供数据的一目了然视图,并允许您通过不同的可视化方式跟踪指标。
仪表盘由 panels(面板)组成,每个面板代表了您希望仪表盘讲述的故事的一部分。
每个面板包含一个 query(查询)和一个 visualization(可视化)。查询定义了您想显示 什么 数据,而可视化定义了数据 如何 显示。
点击菜单图标,然后在侧边栏中点击 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 还允许您标注时间间隔,使用 region annotations(区域标注)。
添加区域标注
- 按住 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 会显示标注列表,其中包含您的新标注。
点击您的仪表盘名称返回您的仪表盘。
在您的仪表盘顶部,现在有一个开关可以显示新创建的标注查询的结果。如果尚未启用,请按下它。
点击 Save dashboard(保存仪表盘)(磁盘)图标以保存更改。
要测试更改,请返回 示例应用,发布一个没有 URL 的新链接,以在您的浏览器中生成一个显示
empty url
的错误。
您的查询返回的日志行现在作为标注显示在图表中。

能够在同一个图表中组合来自多个数据源的数据,可以让您关联来自 Prometheus 和 Loki 的信息。
标注与告警规则也非常配合。在下一个也是最后一个部分,我们将为我们的应用 grafana.news
设置告警规则,然后触发它。这为我们的新告警平台提供了快速介绍。
创建 Grafana 管理的告警规则
告警规则允许您在系统出现问题后立即识别问题。通过快速识别系统中意外的更改,您可以最大程度地减少对服务的干扰。
Grafana 的新告警平台在 Grafana 8 中首次亮相。一年后,在 Grafana 9 中,它成为默认的告警方式。在此步骤中,我们将创建一个 Grafana 管理的告警规则。然后触发我们的新告警规则,并向一个模拟端点发送测试消息。
最基本的告警规则由两部分组成
一个 Contact point(联系点) - 联系点定义了 Grafana 如何递送 告警实例。当 alert rule(告警规则)的条件满足时,Grafana 会通知为此告警规则配置的联系点或通道。
注意
一个 告警实例 是匹配告警规则定义的特定条件的事件,例如特定路由的请求速率突然增加。
一些流行的通道包括
一个 Alert rule(告警规则) - 告警规则定义了一个或多个 Grafana 定期评估的 conditions(条件)。当这些评估满足规则的条件时,告警规则就会被触发。
首先,我们设置一个 webhook 联系点。一旦我们有一个可用的端点,就可以编写告警规则并触发通知。
为 Grafana 管理的告警规则创建联系点
在此步骤中,我们设置一个新的联系点。此联系点使用 webhooks 通道。为了使其工作,我们还需要一个端点供我们的 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(第 1 部分),将规则命名为
fundamentals-test
。对于 Section 2(第 2 部分),切换 Advanced options(高级选项)按钮。
找到 query A(查询 A)框,选择您的 Prometheus 数据源。
输入我们之前在面板中使用的相同 Prometheus 查询
sum(rate(tns_request_duration_seconds_count[5m])) by(route)
保持表达式 B 和 C 不变。这些表达式(分别为 Reduce 和 Threshold)在创建新规则时默认包含。输入
0.2
作为阈值。您可以阅读更多关于查询和条件的信息此处。滚动到第 2 部分底部,点击 Preview(预览)按钮。您应该会看到一些数据返回。
在 Section 3(第 3 部分)中,在 Folder(文件夹)中,点击
New folder
(新建文件夹)并为文件夹输入一个名称来创建一个新文件夹。此文件夹包含我们的告警规则。例如:fundamentals
。然后,点击create
(创建)。在 Evaluation group(评估组)中,重复上述步骤创建一个新的组。也将其命名为
fundamentals
。选择一个 Evaluation interval(评估间隔)(多久评估一次告警规则)。例如,每
10s
(10 秒)。设置 pending period(待处理周期)。这是条件必须满足的时间,直到告警实例进入 Firing(触发)状态并发送通知。输入
0s
。为了本教程的目的,评估间隔故意设置得很短。这使测试更容易。此设置使 Grafana 在告警实例达到指定时间后才发送通知。在 Section 4(第 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(第 2 部分)中的 Threshold(阈值)值。
在您的仪表盘上显示 Grafana 管理的告警规则
在大多数情况下,将 Grafana 告警实例作为标注显示在您的仪表盘上也是有价值的。请观看下面的视频教程,了解如何在您的仪表盘上显示告警。
我们来看看如何配置它。
在 Grafana 的侧边栏中,将鼠标悬停在 Alerting(告警)(铃铛)图标上,然后点击 Alert rules(告警规则)。
展开
fundamentals > fundamentals
文件夹以查看我们创建的告警规则。点击 Edit(编辑)图标并滚动到 Section 5(第 5 部分)。
点击 Link dashboard and panel(链接仪表盘和面板)按钮,选择您希望将告警实例添加为标注的仪表盘和面板。
点击 Confirm(确认)和 Save rule and exit(保存规则并退出)以保存所有更改。
在 Grafana 的侧边栏中,点击 Dashboards(仪表盘)并选择您创建的仪表盘,导航到该仪表盘。
要测试更改,请按照列出的步骤触发 Grafana 管理的告警规则。
您现在应该在面板名称旁边看到一个红色的破心形图标,表示告警规则已触发。代表告警实例的标注(显示为一条垂直红线)也已显示。
在仪表盘上显示 Grafana 管理的告警规则
提示
在 Grafana Alerting 入门 - 第 2 部分 中,您可以通过探索告警实例和通知路由来提升您的技能。
总结
在本教程中,您学习了 Grafana 的基本功能。为此,我们在您的本地机器上运行了几个 Docker 容器。当您准备好清理此本地教程环境时,运行以下命令
docker-compose down -v
了解更多
查看下面的链接,继续您的 Grafana LGTM Stack 学习之旅。