Grafana 告警入门 - 第 3 部分
Grafana 告警入门 - 第 3 部分
本 Grafana 告警入门教程第 3 部分是 Grafana 告警入门教程第 2 部分 的延续。
Grafana 告警中的分组功能通过将相关的告警实例合并到单个简洁通知中,从而减少通知噪音。这对于值班工程师很有用,确保他们专注于解决事件,而不是筛选大量的通知。
分组是通过通知策略中的标签进行配置的。这些标签引用了告警实例生成的标签或用户配置的标签。
通知策略还允许您定义每个告警实例组发送通知的频率。
在本教程中,您将
- 了解告警规则分组的工作原理。
- 创建一个处理分组的通知策略。
- 为实际场景定义告警规则。
- 接收和查看分组告警通知。
开始之前
您可以通过多种方式学习本教程。
Grafana Cloud
- 作为 Grafana Cloud 用户,您无需安装任何东西。创建您的免费帐户。
继续阅读 告警规则分组工作原理。
交互式学习环境
- 或者,您可以在我们的交互式学习环境中尝试此示例:Grafana 告警入门 - 第 3 部分。这是一个已安装所有依赖项的完整配置环境。
Grafana OSS
如果您选择在本地运行 Grafana Stack,请确保已安装以下应用程序
Docker Compose (包含在适用于 macOS 和 Windows 的 Docker Desktop 中)
设置 Grafana Stack (OSS 用户)
为了演示如何使用 Grafana Stack 观察数据,请下载并运行以下文件。
克隆 教程环境仓库。
git clone https://github.com/grafana/tutorial-environment.git
切换到您克隆仓库的目录
cd tutorial-environment
运行 Grafana Stack
docker compose up -d
第一次运行
docker compose up -d
时,Docker 会下载教程所需的所有资源。这可能需要几分钟时间,具体取决于您的互联网连接。注意
如果您的系统上已经运行了 Grafana、Loki 或 Prometheus,您可能会看到错误,因为 Docker 镜像尝试使用的端口已被您的本地安装占用。如果发生这种情况,请停止这些服务,然后再次运行命令。
告警规则分组工作原理
告警通知分组使用以下方式配置:标签 和 时间设置
- 标签 将告警规则与通知策略关联并定义分组。
- 时间设置 控制何时以及多久发送一次通知。

标签类型
保留标签(默认)
- 由 Grafana 自动生成,例如,
alertname
、grafana_folder
。 - 示例:
alertname="High CPU usage"
。
用户配置的标签:
- 手动添加到告警规则。
- 示例:
severity
、priority
。
查询标签:
- 由数据源查询返回。
- 示例:
region
、service
、environment
。
时间设置
分组等待:发送第一个通知前的等待时间。分组间隔:同一组通知之间的时间间隔。重复间隔:为未更改的分组重新发送通知前的等待时间。
共享相同 标签值 的告警会被分到同一组,时间设置决定了通知频率。
更多详细信息,请参阅
告警分组的实际案例
场景:监控分布式应用
您正在监控跨多个区域的指标,例如 CPU 使用率、内存利用率和网络延迟。其中一些告警规则包含诸如 region: us-west
和 region: us-east
等标签。如果这些区域中有多个告警规则触发,可能导致通知泛滥。
如何管理分组
对告警规则通知进行分组
- 定义标签:使用
region
、metric
或instance
等标签对告警进行分类。 - 配置通知策略:
- 按 查询标签 "region" 进行告警分组。
- 示例
region: us-west
的告警通知发送给西海岸团队。region: us-east
的告警通知发送给东海岸团队。
- 指定 时间设置 以控制通知频率。
- 示例
- 分组间隔:设置决定了同一告警组的更新通知发送频率。默认情况下,此间隔设置为 5 分钟,但您可以根据需要自定义为更短或更长。
- 示例
设置告警规则分组
通知策略
按照上述示例,通知策略 被创建用于将带有 region 标签的告警实例路由到特定的联系点。目标是每个区域接收一个合并的通知。为了演示分组的工作原理,东海岸团队的告警通知不分组。在时间方面,为该区域定义了特定的计划。此设置会覆盖父级设置,以微调特定标签(即区域)的行为。
登录 Grafana
- Grafana Cloud 用户:通过 Grafana Cloud 登录。
- OSS 用户:访问 https://:3000。
导航至 通知策略
- 前往 告警与 IRM > 告警 > 通知策略。
添加子策略
在默认策略中,点击 + 新建子策略。
标签:
region
运算符:
=
值:
us-west
此标签匹配 region 标签为 us-west 的告警规则。
选择一个 联系点
- 选择 Webhook。
如果您还没有联系点,请添加一个 联系点。
启用继续匹配
- 开启 继续匹配后续同级节点,以便即使匹配到一个或多个标签(即 region 标签)后,评估仍继续进行。
覆盖分组设置
切换 覆盖分组。
分组依据:添加
region
作为标签。移除任何现有标签。分组依据 将共享相同分组标签的告警合并到一个通知中。例如,所有带有
region=us-west
的告警都将合并到同一个通知中,从而更易于管理并减少告警疲劳。
设置自定义时间
切换 覆盖常规时间设置。
分组间隔:
2m
。这将确保同一告警组的后续通知以 2 分钟的间隔发送。虽然默认是 5 分钟,但此处我们选择 2 分钟是为了演示目的提供更快的反馈。时间设置 控制通知发送频率,有助于平衡及时告警和最小化噪音。
保存并重复
- 对
region = us-east
重复上述步骤,但不要覆盖分组和时间设置。使用不同的 Webhook 端点作为联系点。
这些嵌套策略应将 region 标签为 us-west 或 us-east 的告警实例路由出去。只有 us-west 区域团队应接收分组告警通知。
注意
在 Grafana 中,通知策略中的每个标签必须具有唯一的键。如果您尝试添加相同的标签键(例如,region)和不同的值(例如,us-west 和 us-east),则只有最后输入的会保存,之前的会被丢弃。这是因为标签存储为关联数组(map),其中每个键必须唯一。对于相同的标签键,请使用 regex 匹配器(例如,region=~“us-west|us-east”)。
- 对
创建告警规则
在本节中,我们将根据应用监控示例配置一条告警规则。
- 导航至 告警与 IRM > 告警 > 告警规则。
- 点击 新建告警规则。
输入告警规则名称
使其简短且具有描述性,因为它会出现在您的告警通知中。例如:High CPU usage - Multi-region
。
定义查询和告警条件
在本节中,我们使用 Grafana 管理的告警规则创建的默认选项。默认选项允许我们定义查询、表达式(用于操作数据 – UI 中的 WHEN 字段)以及触发告警必须满足的条件(在默认模式下是阈值)。
Grafana 包含一个 测试数据源,用于创建模拟时间序列数据。此数据源已包含在本教程的演示环境中。如果您在 Grafana Cloud 或您自己的本地 Grafana 实例中工作,您可以通过 连接 菜单添加数据源。
从下拉菜单中选择 TestData 数据源。
从 场景 选择 CSV 内容。
复制以下 CSV 数据
选择 TestData 作为数据源。
将 场景 设置为 CSV 内容。
使用以下 CSV 数据
region,cpu-usage,service,instance us-west,35,web-server-1,server-01 us-west,81,web-server-1,server-02 us-east,79,web-server-2,server-03 us-east,52,web-server-2,server-04 us-west,45,db-server-1,server-05 us-east,77,db-server-2,server-06 us-west,82,db-server-1,server-07 us-east,93,db-server-2,server-08
返回的数据模拟了数据源返回多个时间序列,每个时间序列都会创建一个对应的告警实例。
在 告警条件 部分
- 保持
Last
作为 reducer 函数(WHEN)的值,并将75
作为阈值。这是告警规则应触发的阈值。
- 保持
点击 预览告警规则条件 以运行查询。
它应该返回 5 个处于 Firing(触发中)状态的系列,其中两个来自 us-west 区域,三个来自 us-east 区域。
添加文件夹和标签
- 在 文件夹 中,点击 + 新建文件夹 并输入名称。例如:
Multi-region alerts
。此文件夹包含我们的告警规则。
设置评估行为
每条告警规则都会分配到一个评估组。您可以将告警规则分配到现有评估组,或创建一个新的评估组。
- 在 评估组和间隔 中,重复上述步骤创建一个新的评估组。将其命名为
Multi-region group
。 - 选择一个 评估间隔(告警评估频率)。选择
1m
。 - 将 待处理周期 设置为
0s
(零秒),以便条件满足时告警规则立即触发(这可以最大限度地减少演示等待时间)。
配置通知
选择当告警规则触发时谁应接收通知。
创建第二个告警规则
重复上述步骤创建第二条告警规则,用于高内存使用率告警。
通过点击 更多 > 复制 复制告警规则。
命名为
High Memory usage - Multi-region
。使用以下 CSV 数据模拟数据源返回内存使用率。
region,memory-usage,service,instance us-west,42,cache-server-1,server-09 us-west,88,cache-server-1,server-10 us-east,74,api-server-1,server-11 us-east,90,api-server-1,server-12 us-west,53,analytics-server-1,server-13 us-east,81,analytics-server-2,server-14 us-west,77,analytics-server-1,server-15 us-east,94,analytics-server-2,server-16
点击保存规则并退出。
接收分组告警通知
现在告警规则已配置完成,当告警触发时,您应该在联系点接收到告警通知。
当配置的告警规则检测到跨多个区域的 CPU 或内存使用率高于 75% 时,它将每分钟评估一次指标。如果条件持续存在,通知将被分组,并在首次告警发送前等待 30 秒。同一告警组的后续通知将每隔 2 分钟发送一次(仅限 US-west 告警实例),从而增加分组告警通知的频率。US-east 实例的后续通知应按默认的 5 分钟间隔发送。如果条件持续存在较长时间,则 4 小时的重复间隔确保只有在问题持续存在时才会重新发送告警。
因此,我们的通知策略应路由三条通知:一条分组通知,包含来自 us-west 区域的 CPU 和内存告警实例;以及两条单独的通知,包含来自 us-east 区域的告警实例。
分组通知示例
{
"receiver": "US-West-Alerts",
"status": "firing",
"alerts": [
{
"status": "firing",
"labels": {
"alertname": "High CPU usage - Multi-region",
"grafana_folder": "Multi-region alerts",
"instance": "server-05",
...
{
"status": "firing",
"labels": {
"alertname": "High Memory usage - Multi-region",
"grafana_folder": "Multi-region alerts",
"instance": "server-10",
},
...}
us-west 联系点的 CPU 和内存告警实例合并到单个通知的详细信息。
{
"receiver": "US-East-Alerts",
"status": "firing",
"alerts": [
{
"status": "firing",
"labels": {
"alertname": "High CPU usage - Multi-region",
"grafana_folder": "Multi-region alerts",
"instance": "server-03",
"region": "us-east",
"service": "web-server-2"
...}}}
us-east 联系点的 CPU 告警实例合并到单独通知的详细信息。
{
"receiver": "US-East-Alerts",
"status": "firing",
"alerts": [
{
"status": "firing",
"labels": {
"alertname": "High memory usage - Multi-region",
"grafana_folder": "Multi-region memory alerts",
"instance": "server-12",
"region": "us-east"
...}}}
us-east 联系点的内存告警实例合并到单独通知的详细信息。
结论
通过配置 通知策略 以及使用 标签(例如 region),您可以根据特定标准对告警通知进行分组,并将它们路由到相应的团队。微调 时间设置——包括分组等待、分组间隔和重复间隔——可以进一步减少噪音,并确保通知具有可操作性,而不会让值班工程师应接不暇。
在 Grafana 告警第 4 部分 中了解更多
提示
在 Grafana 告警入门 - 第 4 部分 中,您将学习如何使用模板创建自定义和简洁的通知。