Grafana 基础知识

Grafana Labs Team
作者:Grafana Labs 团队

上次更新时间:2024 年 11 月 21 日

初级

引言

在本教程中,您将学习如何使用 Grafana 为您的应用程序设置监控解决方案,并

  • 探索指标和日志
  • 构建仪表盘
  • 标注仪表盘
  • 设置告警规则

另外,您还可以观看我们的 Grafana 初学者系列,我们在其中讨论了帮助您开始使用 Grafana 的基础概念。

先决条件

提示

另外,您可以在我们的交互式学习环境中尝试此示例:Grafana 基础

这是一个已完整配置的环境,所有依赖项都已安装完毕。

Interactive

Grafana Killercoda 仓库 中提供反馈、报告错误和提出问题。

设置示例应用

本教程使用一个示例应用程序来演示 Grafana 的一些功能。要完成本教程中的练习,您需要将文件下载到您的本地机器上。

在此步骤中,您将设置示例应用程序以及支持服务,例如 Loki

**注意:**Prometheus 是一种流行的时序数据库 (TSDB),已在本教程中配置为数据源。

  1. 克隆 github.com/grafana/tutorial-environment 仓库。

    bash
    git clone https://github.com/grafana/tutorial-environment.git
  2. 切换到您克隆此仓库的目录

    bash
    cd tutorial-environment
  3. 确保 Docker 正在运行

    bash
    docker ps

    没有错误表示它正在运行。如果出现错误,请启动 Docker 然后再次运行命令。

  4. 启动示例应用

    bash
    docker-compose up -d

    首次运行 docker-compose up -d 时,Docker 会下载本教程所需的所有资源。这可能需要几分钟,具体取决于您的网络连接。

    **注意:**如果您您的系统上已运行 Grafana、Loki 或 Prometheus,您可能会看到错误,因为 Docker 镜像正在尝试使用您的本地安装已占用的端口。停止这些服务,然后再次运行该命令。

  5. 确保所有服务正在运行

    bash
    docker-compose ps

    State 列中,所有服务应显示 Up

  6. https://:8081 访问示例应用。

Grafana News

示例应用程序 Grafana News 允许您发布链接并为您喜欢的链接投票。

添加链接

  1. Title 中,输入 Example

  2. URL 中,输入 https://example.com

  3. 点击 Submit 添加链接。

    该链接会出现在 Grafana News 标题下的列表中。

要为链接投票,点击链接名称旁边的三角形图标。

打开 Grafana

Grafana 是一个用于监控和可观测性的开源平台,可让您可视化和探索系统状态。

  1. 打开一个新的浏览器标签页。
  2. 访问 https://:3000

注意

此演示不需要登录页面或凭据。但是,如果您选择在本地安装 Grafana,您需要登录并提供凭据。在这种情况下,默认用户名和密码为 admin

您首先看到的是 Home 仪表盘,它可以帮助您入门。

在左上角,您可以看到菜单图标。点击它会打开 sidebar (侧边栏),它是导航 Grafana 的主菜单。

探索您的指标

Grafana Explore 是一个用于故障排除和数据探索的工作流程。在此步骤中,您将使用 Explore 创建临时查询,以了解示例应用程序暴露的指标。具体来说,您将探索示例应用程序接收到的请求。

临时查询是为探索数据而进行的交互式查询。临时查询之后通常会跟着另一个更具体的查询。

  1. 点击菜单图标,然后在侧边栏中点击 Explore。左上方有一个可用数据源列表的下拉菜单。Prometheus 数据源应该已被选中。如果不是,请选择 Prometheus。

  2. 通过检查查询面板右上角的 Builder/Code 开关,确认您处于代码模式。

  3. 在查询编辑器中,显示 Enter a PromQL query…(输入 PromQL 查询…)的地方,输入 tns_request_duration_seconds_count,然后按 Shift + Enter。图表就会出现。

  4. 在右上角,点击 Run Query(运行查询)按钮上的下拉箭头,然后选择 5s。Grafana 会运行您的查询并每 5 秒更新一次图表。

    您刚刚执行了第一个 PromQL 查询!PromQL 是一种强大的查询语言,可让您选择和聚合存储在 Prometheus 中的时间序列数据。

    tns_request_duration_seconds_count 是一个 counter(计数器),这是一种值只会增加的指标类型。与其可视化实际值,不如使用计数器来计算 rate of change(变化率),即值增加的速度。

  5. 向您的查询中添加 rate 函数,以可视化每秒请求的速率。在查询编辑器中输入以下内容,然后按 Shift + Enter。

    rate(tns_request_duration_seconds_count[5m])

    图表正下方有一个区域,其中列出了每个时间序列及其旁边的彩色图标。该区域称为 legend(图例)。

    PromQL 允许您使用 sum 聚合运算符,按标签对时间序列进行分组。

  6. 向您的查询中添加 sum 聚合运算符,以按路由对时间序列进行分组

    sum(rate(tns_request_duration_seconds_count[5m])) by(route)
  7. 返回 示例应用 并添加新链接、投票或仅刷新浏览器来生成一些流量。

  8. 回到 Grafana,在右上角,点击 time picker(时间选择器),然后选择 Last 5 minutes(最近 5 分钟)。通过放大最近几分钟的数据,更容易看到何时收到新数据。

根据您的用例,您可能希望按其他标签进行分组。尝试按其他标签(例如 status_code)进行分组,只需将查询中的 by(route) 部分更改为 by(status_code)

添加日志数据源

Grafana 支持日志数据源,例如 Loki。就像处理指标一样,您首先需要将数据源添加到 Grafana。

  1. 点击菜单图标,然后在侧边栏中点击 Connections(连接)和 Data sources(数据源)。
  2. 点击 + Add new data source(+ 添加新数据源)。
  3. 在数据源列表中,点击 Loki
  4. 在 URL 框中,输入 http://loki:3100
  5. 滚动到页面底部,点击 Save & Test(保存并测试)以保存您的更改。

您应该看到消息“数据源连接成功”。Loki 现在在 Grafana 中可用作数据源。

探索您的日志

Grafana Explore 不仅允许您对指标进行临时查询,还允许您探索日志。

  1. 点击菜单图标,然后在侧边栏中点击 Explore

  2. 在顶部的 数据源 列表中,选择 Loki 数据源。

  3. 通过检查查询面板右上角的 Builder/Code 开关,确认您处于代码模式。

  4. 在查询编辑器中输入以下内容,然后按 Shift + Enter

    {filename="/var/log/tns-app.log"}
  5. Grafana 显示示例应用程序日志文件中的所有日志。图表中每个柱状条的高度表示该时间点生成的日志数量。

  6. 点击并拖动图表中的柱状条,按时间过滤日志。

Loki 不仅允许您根据标签过滤日志,还可以根据特定出现的内容进行过滤。

我们来生成一个错误,并使用 Explore 进行分析。

  1. 示例应用 中,发布一个没有 URL 的新链接,以在您的浏览器中生成一个显示 empty url 的错误。

  2. 回到 Grafana,输入以下查询,根据子字符串过滤日志行

    {filename="/var/log/tns-app.log"} |= "error"
  3. 点击显示 level=error msg="empty url" 的日志行,查看关于此错误的更多信息。

    **注意:**如果您处于 Live 模式,点击日志无法显示更多关于错误的信息。请停止并退出实时流,然后点击那里的日志行。

日志有助于理解哪里出了问题。在本教程的后续部分,您将了解如何将日志与 Prometheus 的指标关联起来,以更好地理解错误的上下文。

构建仪表盘

一个 dashboard(仪表盘)为您提供数据的一目了然视图,并允许您通过不同的可视化方式跟踪指标。

仪表盘由 panels(面板)组成,每个面板代表了您希望仪表盘讲述的故事的一部分。

每个面板包含一个 query(查询)和一个 visualization(可视化)。查询定义了您想显示 什么 数据,而可视化定义了数据 如何 显示。

  1. 点击菜单图标,然后在侧边栏中点击 Dashboards(仪表盘)。

  2. Dashboards 页面,点击右上角的 New(新建),并在下拉菜单中选择 New Dashboard(新建仪表盘)。

  3. 点击 + Add visualization(+ 添加可视化)。

  4. 在打开的模态框中,选择您刚刚添加的 Prometheus 数据源。

  5. 在图表下方的 Query(查询)选项卡中,输入之前的查询,然后按 Shift + Enter

    sum(rate(tns_request_duration_seconds_count[5m])) by(route)
  6. 在右侧的面板编辑器中,在 Panel options(面板选项)下,将面板标题更改为“Traffic”(流量)。

  7. 点击右上角的 Apply(应用)以保存面板并返回仪表盘视图。

  8. 点击仪表盘顶部的 Save dashboard(保存仪表盘)(磁盘)图标以保存您的仪表盘。

  9. Dashboard name(仪表盘名称)字段中输入名称,然后点击 Save(保存)。

    您现在应该已将一个面板添加到您的仪表盘中。

    A panel in a Grafana dashboard
    Grafana 仪表盘中的一个面板

标注事件

当出现问题时,理解发生故障时的上下文通常会很有帮助。上次部署的时间、系统更改或数据库迁移可以提供有关可能导致中断的原因的洞察。标注允许您直接在图表上表示此类事件。

在本教程的下一部分,我们将模拟一些常见的用例,这些用例会让人添加标注。

  1. 要手动添加标注,点击图表中的任意位置,然后点击 Add annotation(添加标注)。注意:您可能需要先保存仪表盘。

  2. Description(描述)中,输入 Migrated user database(迁移了用户数据库)。

  3. 点击 Save(保存)。

    Grafana 将您的标注添加到图表。将鼠标悬停在标注的底部以阅读文本。

Grafana 还允许您标注时间间隔,使用 region annotations(区域标注)。

添加区域标注

  1. 按住 Ctrl 键(macOS 上为 Cmd),然后点击并在图表上拖动以选择一个区域。
  2. Description(描述)中,输入 Performed load tests(执行了负载测试)。
  3. Tags(标签)中,输入 testing
  4. 点击 Save(保存)。

使用标注关联日志与指标

手动标注仪表盘对于那些单一事件来说很好。对于定期发生的事件,例如部署新版本,Grafana 支持从您的一个数据源查询标注。我们来使用之前添加的 Loki 数据源创建一个标注。

  1. 在仪表盘顶部,点击 Dashboard settings(仪表盘设置)(齿轮)图标。

  2. 转到 Annotations(标注),点击 Add annotation query(添加标注查询)。

  3. Name(名称)中,输入 Errors(错误)。

  4. Data source(数据源)中,选择 Loki

  5. Query(查询)中,输入以下查询

    {filename="/var/log/tns-app.log"} |= "error"
  6. 点击 Apply(应用)。Grafana 会显示标注列表,其中包含您的新标注。

  7. 点击您的仪表盘名称返回您的仪表盘。

  8. 在您的仪表盘顶部,现在有一个开关可以显示新创建的标注查询的结果。如果尚未启用,请按下它。

  9. 点击 Save dashboard(保存仪表盘)(磁盘)图标以保存更改。

  10. 要测试更改,请返回 示例应用,发布一个没有 URL 的新链接,以在您的浏览器中生成一个显示 empty url 的错误。

您的查询返回的日志行现在作为标注显示在图表中。

A panel in a Grafana dashboard with log queries from Loki displayed as annotations
将 Loki 的日志查询显示为标注

能够在同一个图表中组合来自多个数据源的数据,可以让您关联来自 Prometheus 和 Loki 的信息。

标注与告警规则也非常配合。在下一个也是最后一个部分,我们将为我们的应用 grafana.news 设置告警规则,然后触发它。这为我们的新告警平台提供了快速介绍。

创建 Grafana 管理的告警规则

告警规则允许您在系统出现问题后立即识别问题。通过快速识别系统中意外的更改,您可以最大程度地减少对服务的干扰。

Grafana 的新告警平台在 Grafana 8 中首次亮相。一年后,在 Grafana 9 中,它成为默认的告警方式。在此步骤中,我们将创建一个 Grafana 管理的告警规则。然后触发我们的新告警规则,并向一个模拟端点发送测试消息。

最基本的告警规则由两部分组成

  1. 一个 Contact point(联系点) - 联系点定义了 Grafana 如何递送 告警实例。当 alert rule(告警规则)的条件满足时,Grafana 会通知为此告警规则配置的联系点或通道。

    注意

    一个 告警实例 是匹配告警规则定义的特定条件的事件,例如特定路由的请求速率突然增加。

    一些流行的通道包括

  2. 一个 Alert rule(告警规则) - 告警规则定义了一个或多个 Grafana 定期评估的 conditions(条件)。当这些评估满足规则的条件时,告警规则就会被触发。

首先,我们设置一个 webhook 联系点。一旦我们有一个可用的端点,就可以编写告警规则并触发通知。

为 Grafana 管理的告警规则创建联系点

在此步骤中,我们设置一个新的联系点。此联系点使用 webhooks 通道。为了使其工作,我们还需要一个端点供我们的 webhook 通道接收告警通知。我们可以使用 Webhook.site 来快速设置该测试端点。这样我们就可以确保我们的告警管理器确实在发送通知。

  1. 访问 Webhook.site
  2. 复制您的唯一 URL。

您的 webhook 端点现在正在等待第一个请求。

接下来,我们在 Grafana 的告警 UI 中配置一个联系点,将通知发送到我们的 webhook 端点。

  1. 返回 Grafana。在 Grafana 的侧边栏中,将鼠标悬停在 Alerting(告警)(铃铛)图标上,然后点击 Manage Contact points(管理联系点)。

  2. 点击 + Add contact point(+ 添加联系点)。

  3. Name(名称)中,写入 Webhook

  4. Integration(集成)中,选择 Webhook

  5. URL 中,粘贴您的 webhook 端点地址。

  6. 点击 Test(测试),然后点击 Send test notification(发送测试通知),向您的 webhook 端点发送测试告警通知。

  7. 回到您之前创建的 webhook 端点。左侧现在有一个 POST / 条目。点击它查看 Grafana 发送的信息。

  8. 返回 Grafana,点击 Save contact point(保存联系点)。

我们现在已经创建了一个模拟 webhook 端点,并在 Grafana 中创建了一个新的告警联系点。现在我们可以创建一个告警规则并将其链接到这个新通道。

向 Grafana 添加告警规则

既然 Grafana 知道如何通知我们,是时候设置一个告警规则了

  1. 在 Grafana 的侧边栏中,将鼠标悬停在 Alerting(告警)(铃铛)图标上,然后点击 Alert rules(告警规则)。

    在本教程中,我们使用 Grafana 管理的告警规则创建的高级选项。高级选项允许我们定义查询、表达式(用于处理数据)以及触发告警必须满足的条件(默认条件是阈值)。

  2. 点击 + New alert rule(+ 新建告警规则)。

  3. 对于 Section 1(第 1 部分),将规则命名为 fundamentals-test

  4. 对于 Section 2(第 2 部分),切换 Advanced options(高级选项)按钮。

  5. 找到 query A(查询 A)框,选择您的 Prometheus 数据源。

  6. 输入我们之前在面板中使用的相同 Prometheus 查询

    sum(rate(tns_request_duration_seconds_count[5m])) by(route)
  7. 保持表达式 BC 不变。这些表达式(分别为 Reduce 和 Threshold)在创建新规则时默认包含。输入 0.2 作为阈值。您可以阅读更多关于查询和条件的信息此处

  8. 滚动到第 2 部分底部,点击 Preview(预览)按钮。您应该会看到一些数据返回。

  9. Section 3(第 3 部分)中,在 Folder(文件夹)中,点击 New folder(新建文件夹)并为文件夹输入一个名称来创建一个新文件夹。此文件夹包含我们的告警规则。例如:fundamentals。然后,点击 create(创建)。

  10. 在 Evaluation group(评估组)中,重复上述步骤创建一个新的组。也将其命名为 fundamentals

  11. 选择一个 Evaluation interval(评估间隔)(多久评估一次告警规则)。例如,每 10s(10 秒)。

  12. 设置 pending period(待处理周期)。这是条件必须满足的时间,直到告警实例进入 Firing(触发)状态并发送通知。输入 0s。为了本教程的目的,评估间隔故意设置得很短。这使测试更容易。此设置使 Grafana 在告警实例达到指定时间后才发送通知。

  13. Section 4(第 4 部分)中,选择 Webhook 作为 Contact point(联系点)。

  14. 点击页面顶部的 Save rule and exit(保存规则并退出)。

触发 Grafana 管理的告警规则

我们现在已经配置了告警规则和联系点。现在我们来尝试通过在示例应用上生成一些流量来触发一个 Grafana 管理的告警规则。

  1. 访问 localhost:8081
  2. 添加新的标题和 URL,反复点击投票按钮,或刷新页面以生成流量峰值。

一旦查询 sum(rate(tns_request_duration_seconds_count[5m])) by(route) 返回的值大于 0.2,Grafana 就会触发我们的告警规则。访问我们之前创建的 webhook 端点,查找发送的包含详细信息和元数据的 Grafana 告警通知。

注意

告警规则可能会被 /metrics 端点触发,该端点在 Grafana 从应用程序拉取指标时会频繁访问。如果发生这种情况,您可以出于测试目的增加 Section 2(第 2 部分)中的 Threshold(阈值)值。

在您的仪表盘上显示 Grafana 管理的告警规则

在大多数情况下,将 Grafana 告警实例作为标注显示在您的仪表盘上也是有价值的。请观看下面的视频教程,了解如何在您的仪表盘上显示告警。

我们来看看如何配置它。

  1. 在 Grafana 的侧边栏中,将鼠标悬停在 Alerting(告警)(铃铛)图标上,然后点击 Alert rules(告警规则)。

  2. 展开 fundamentals > fundamentals 文件夹以查看我们创建的告警规则。

  3. 点击 Edit(编辑)图标并滚动到 Section 5(第 5 部分)。

  4. 点击 Link dashboard and panel(链接仪表盘和面板)按钮,选择您希望将告警实例添加为标注的仪表盘和面板。

  5. 点击 Confirm(确认)和 Save rule and exit(保存规则并退出)以保存所有更改。

  6. 在 Grafana 的侧边栏中,点击 Dashboards(仪表盘)并选择您创建的仪表盘,导航到该仪表盘。

  7. 要测试更改,请按照列出的步骤触发 Grafana 管理的告警规则

    您现在应该在面板名称旁边看到一个红色的破心形图标,表示告警规则已触发。代表告警实例的标注(显示为一条垂直红线)也已显示。

    A panel in a Grafana dashboard with alerting and annotations configured
    在仪表盘上显示 Grafana 管理的告警规则

提示

Grafana Alerting 入门 - 第 2 部分 中,您可以通过探索告警实例和通知路由来提升您的技能。

总结

在本教程中,您学习了 Grafana 的基本功能。为此,我们在您的本地机器上运行了几个 Docker 容器。当您准备好清理此本地教程环境时,运行以下命令

docker-compose down -v

了解更多

查看下面的链接,继续您的 Grafana LGTM Stack 学习之旅。