Skip to content

Commit a1c6eb3

Browse files
committed
feat: rum alert
1 parent 377d817 commit a1c6eb3

3 files changed

Lines changed: 312 additions & 5 deletions

File tree

docs.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,8 @@
343343
{
344344
"group": "最佳实践",
345345
"pages": [
346-
"zh/rum/best-practices/distributed-tracing"
346+
"zh/rum/best-practices/distributed-tracing",
347+
"zh/rum/best-practices/alert-noise-reduction"
347348
]
348349
},
349350
{
Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
---
2+
title: "RUM 告警太多?从这里开始配置"
3+
sidebarTitle: "RUM 告警降噪"
4+
description: "通过数据过滤、告警分级与 Flashduty 协同,让 RUM 告警聚焦关键问题,减少无效干扰。"
5+
keywords: ["RUM", "最佳实践", "告警", "降噪", "前端监控"]
6+
---
7+
8+
Flashduty RUM 提供了从数据过滤、告警分级到 Flashduty 告警处理的完整链路。合理配置这一链路,可以有效降低告警噪音,让团队专注于真正重要的问题。
9+
10+
本文将介绍 RUM 告警配置的核心原则和典型场景方案,帮助您快速减少无效告警干扰。
11+
12+
## 告警处理链路
13+
14+
RUM 告警从 Error 产生到通知到人,经过以下四层处理:
15+
16+
| 层级 | 配置位置 | 核心作用 |
17+
|------|----------|----------|
18+
| ① 数据过滤 | RUM 应用 → 告警设置 | 在源头排除不需要的 Error,减少无效 Issue |
19+
| ② 告警分级 | RUM 应用 → 告警设置 | 根据 Error 属性设定 Issue 优先级 |
20+
| ③ 告警处理 | Flashduty 集成 → 告警处理 | 基于 Issue 维度做优先级调整、丢弃/抑制 |
21+
| ④ 告警分派 | Flashduty 协作空间 | 路由到团队、通知值班人员 |
22+
23+
配置时建议**从上到下依次设置**:先过滤噪音,再分级告警,最后在 Flashduty 侧做精细化处理。
24+
25+
## 第一步:过滤噪音数据
26+
27+
在配置告警分级之前,先清理数据源。常见的噪音来源包括:
28+
29+
<AccordionGroup>
30+
<Accordion title="第三方脚本错误">
31+
浏览器扩展或第三方广告/分析脚本产生的错误与您的业务无关,建议排除:
32+
33+
- 错误堆栈 包含 `chrome-extension://`
34+
- 错误堆栈 包含 `moz-extension://`
35+
- 错误堆栈 包含 `cdn.third-party.com`
36+
</Accordion>
37+
<Accordion title="已知无害错误">
38+
某些错误频繁出现但不影响用户体验:
39+
40+
- 错误消息 包含 `ResizeObserver loop`
41+
- 错误消息 包含 `Script error`
42+
</Accordion>
43+
<Accordion title="非核心环境错误">
44+
如果您只关注生产环境的告警,可以过滤其他环境的错误:
45+
46+
- 环境 不包含 `production`
47+
</Accordion>
48+
</AccordionGroup>
49+
50+
<Tip>
51+
被过滤的 Error 不会参与 Issue 聚合和告警,但数据仍然保留,您可以在查看器中通过筛选条件查看这些被过滤的错误。
52+
</Tip>
53+
54+
## 第二步:配置告警分级
55+
56+
过滤噪音后,通过告警分级规则区分不同错误的重要程度。
57+
58+
### 分级策略建议
59+
60+
| 优先级 | 适用场景 | 期望响应时间 |
61+
|--------|----------|--------------|
62+
| **P0(Critical)** | 核心业务中断、VIP 用户受影响、生产环境崩溃 | 立即响应 |
63+
| **P1(Warning)** | 重要功能异常、核心页面错误 | 当日处理 |
64+
| **P2(Info)** | 非核心功能错误、低影响问题 | 按计划处理 |
65+
66+
### 推荐规则配置
67+
68+
以下是按业务优先级从高到低排列的推荐规则:
69+
70+
<Steps>
71+
<Step title="生产环境崩溃 → P0">
72+
崩溃意味着应用完全不可用,需要最高优先级响应。
73+
74+
- 条件:环境 包含 `production`,且 是否崩溃 包含 `true`
75+
- 告警级别:P0
76+
</Step>
77+
<Step title="VIP 用户错误 → P0">
78+
VIP 用户的体验直接关系到商业价值。
79+
80+
- 条件:用户 ID 包含 `vip`(或通过自定义字段 `context.user.level` 包含 `vip` 来匹配)
81+
- 告警级别:P0
82+
</Step>
83+
<Step title="核心页面错误 → P1">
84+
支付、登录、结算等核心业务页面的错误需要优先处理。
85+
86+
- 条件:页面 URL 包含 `/payment`
87+
- 告警级别:P1
88+
89+
可以为每个核心页面创建单独的规则,或在同一规则中使用多个匹配值。
90+
</Step>
91+
<Step title="其他错误 → P2(默认)">
92+
未匹配任何规则的错误自动归为 P2,按常规流程处理。无需额外配置。
93+
</Step>
94+
</Steps>
95+
96+
<Tip>
97+
规则数量建议控制在 3-6 条,覆盖最关键的场景即可。过多的规则会增加维护成本,且容易导致优先级混乱。
98+
</Tip>
99+
100+
## 第三步:在 Flashduty 中精细化处理
101+
102+
RUM 侧的告警分级基于单个 Error 的属性,如需基于 Issue 的整体影响做进一步处理,可以在 Flashduty 的[告警处理 Pipeline](/zh/on-call/integration/alert-integration/alert-pipelines) 中配置。
103+
104+
| 处理场景 | 配置方式 |
105+
|----------|----------|
106+
| 抑制重复告警 | 同一 `alert_key` 在 1 小时内只告警一次 |
107+
| 自定义告警标题 | 模板示例:`[RUM] [{{Labels.env}}] {{Labels.error_type}} - {{Labels.view_url}}` |
108+
| 低影响错误降级 |`labels.affected_users` < 5 时,将严重程度更新为 Info |
109+
110+
## 典型场景方案
111+
112+
<Tabs>
113+
<Tab title="电商应用">
114+
电商应用的核心是交易流程,告警配置应围绕支付和下单环节展开。
115+
116+
| 层级 | 配置 |
117+
|------|------|
118+
| 数据过滤 | 排除:第三方广告脚本错误、`ResizeObserver loop` |
119+
| 告警分级 | P0:支付页面错误、崩溃;P1:商品详情页/购物车错误 |
120+
| 告警处理 | 抑制窗口:30 分钟;标题模板包含页面路径 |
121+
| 告警分派 | P0 → 短信+电话通知,P1 → IM 通知 |
122+
</Tab>
123+
<Tab title="SaaS 应用">
124+
SaaS 应用需要关注不同租户的体验差异。
125+
126+
| 层级 | 配置 |
127+
|------|------|
128+
| 数据过滤 | 排除:浏览器扩展错误、非生产环境 |
129+
| 告警分级 | P0:企业版租户错误(通过 `context.tenant.plan` 匹配);P1:核心功能页面错误 |
130+
| 告警处理 | 标题模板包含租户信息;低影响告警降级 |
131+
| 告警分派 | 按团队分配到不同协作空间 |
132+
</Tab>
133+
<Tab title="内容型网站">
134+
内容型网站对可用性要求相对宽松,重点关注加载和渲染问题。
135+
136+
| 层级 | 配置 |
137+
|------|------|
138+
| 数据过滤 | 排除:第三方脚本错误、`Script error` |
139+
| 告警分级 | P0:崩溃;P1:首页/搜索页错误 |
140+
| 告警处理 | 抑制窗口:1 小时;影响用户数 < 10 的告警降级 |
141+
| 告警分派 | P0 → IM 通知,P1/P2 → 邮件通知 |
142+
</Tab>
143+
</Tabs>
144+
145+
## 常见问题
146+
147+
<AccordionGroup>
148+
<Accordion title="数据过滤和 Flashduty 告警丢弃有什么区别?">
149+
| 对比 | RUM 数据过滤 | Flashduty 告警丢弃 |
150+
|------|-------------|-------------------|
151+
| 作用时机 | Error 聚合为 Issue 之前 | Issue 投递为告警之后 |
152+
| 数据留存 | Error 数据保留,可在查看器中查看 | Issue 数据保留 |
153+
| 影响范围 | 被过滤的 Error 不参与 Issue 聚合和告警 | Issue 已存在,只是不产生告警通知 |
154+
| 适用场景 | 长期排除的噪音数据 | 灵活的告警控制 |
155+
</Accordion>
156+
<Accordion title="告警分级规则和 Flashduty Pipeline 如何配合?">
157+
两者互补,适用于不同维度的判断:
158+
159+
- **RUM 告警分级**:基于单个 Error 的属性(用户、页面、环境等),适合在源头快速判定
160+
- **Flashduty Pipeline**:基于 Issue 的整体信息(影响用户数、错误数量等),适合做更全面的评估
161+
162+
建议在 RUM 侧设定基础优先级,在 Flashduty 侧做补充调整。
163+
</Accordion>
164+
<Accordion title="默认告警行为会改变吗?">
165+
不会。如果不配置任何过滤规则和告警分级,所有 Error 仍然会聚合为 Issue 并以默认严重程度投递到 Flashduty。现有行为完全保持不变。
166+
</Accordion>
167+
</AccordionGroup>
168+
169+
## 延伸阅读
170+
171+
<CardGroup cols={2}>
172+
<Card title="Issue 告警" icon="bell" href="/zh/rum/error-tracking/issue-alerts">
173+
告警触发条件、自定义分级和数据过滤的完整配置说明
174+
</Card>
175+
<Card title="告警处理 Pipeline" icon="filter" href="/zh/on-call/integration/alert-integration/alert-pipelines">
176+
在集成层对告警进行清洗、转换和过滤
177+
</Card>
178+
<Card title="告警降噪" icon="volume-slash" href="/zh/on-call/channel/noise-reduction">
179+
在协作空间层面聚合和抑制告警
180+
</Card>
181+
<Card title="告警分派" icon="route" href="/zh/on-call/channel/escalation-rule">
182+
配置分派策略,将告警路由到正确的值班人员
183+
</Card>
184+
</CardGroup>

zh/rum/error-tracking/issue-alerts.mdx

Lines changed: 126 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
---
22
title: "Issue 告警"
3-
description: "了解 Flashduty RUM Issue 如何触发告警"
3+
description: "了解 Flashduty RUM Issue 如何触发告警,以及如何配置告警分级和数据过滤"
44
keywords: ["RUM", "异常追踪", "用户监控", "前端监控"]
55
---
66

7-
Flashduty RUM 自动将 SDK 上报的所有错误事件聚合为 Issue,这有助于您优先处理并找到最具影响力的问题,从而更容易减少服务停机时间和降低用户沮丧感
7+
Flashduty RUM 自动将 SDK 上报的错误事件聚合为 Issue,帮助您优先处理最具影响力的问题,减少服务停机时间和用户沮丧感
88

9-
您可以在控制台每日巡检已经聚合得到的 Issue,也可以为 Issue 配置告警通知,以便在出现问题的那一刻及时感知。
9+
您可以在控制台每日巡检 Issue,也可以配置告警通知,在问题发生时第一时间感知。Flashduty RUM 的告警能力包括:
10+
11+
- **告警通知**:将 Issue 以告警事件投递到 Flashduty 协作空间,通过分派策略通知值班人员
12+
- **告警分级**:根据错误属性(如用户、页面、环境等)自定义告警优先级
13+
- **数据过滤**:在 Error 聚合为 Issue 之前过滤噪音数据,减少无效告警
1014

1115
## 开启告警
1216

@@ -37,6 +41,7 @@ Flashduty RUM 自动将 SDK 上报的所有错误事件聚合为 Issue,这有
3741
| **新的 Issue** | 错误事件导致新的 Issue 出现,会触发告警事件 |
3842
| **Issue 更新** | 持续有错误事件合入一个未关闭(待处理、处理中)的 Issue,且距离上一个触发告警事件超过 24 小时,将会重新触发告警事件 |
3943
| **Issue 重开** | 新的错误合入已关闭的 Issue,导致 Issue 被重新打开,即问题复现 |
44+
| **Issue 优先级升级** | 当高优先级的错误事件进入低优先级的 Issue 时,Issue 优先级会自动升级并触发新的告警事件。例如,一个 P2 级别的 Issue 收到匹配 P0 规则的错误,会升级为 P0 并触发告警 |
4045

4146
<Note>
4247
- Issue 触发的是一个告警事件,此告警事件将投递到协作空间
@@ -46,7 +51,9 @@ Flashduty RUM 自动将 SDK 上报的所有错误事件聚合为 Issue,这有
4651

4752
## 告警严重程度
4853

49-
Issue 触发的告警事件的严重程度由系统自动判断生成:
54+
### 默认分级规则
55+
56+
如果未配置自定义告警分级规则,Issue 触发的告警严重程度由系统自动判定:
5057

5158
<Tabs>
5259
<Tab title="基础判断">
@@ -73,3 +80,118 @@ Issue 触发的告警事件的严重程度由系统自动判断生成:
7380
| **问题持续时间** | 超过 24 小时(+20分)、超过 12 小时(+10分) |
7481
</Tab>
7582
</Tabs>
83+
84+
### 自定义告警分级
85+
86+
您可以在「告警设置」中配置自定义告警分级规则,根据错误的属性特征设定告警优先级(P0 / P1 / P2),实现更精细的告警控制。
87+
88+
自定义分级规则在 Error 上报时评估,得到「预置优先级」。当 Error 聚合到 Issue 时:
89+
90+
- **新建 Issue**:Issue 的优先级由首个 Error 的预置优先级决定
91+
- **匹配已有 Issue**:如果 Error 的预置优先级更高,Issue 优先级自动升级(只升不降)
92+
- **未匹配任何规则**:使用默认优先级 P2
93+
94+
每条分级规则包含以下要素:
95+
96+
| 要素 | 说明 |
97+
|------|------|
98+
| **规则名称** | 便于识别和管理的名称 |
99+
| **匹配条件** | 基于 Error 属性的筛选条件,同一规则内多个条件为 AND 关系 |
100+
| **告警级别** | 匹配后设定的优先级:P0(Critical)/ P1(Warning)/ P2(Info) |
101+
102+
规则按优先级顺序匹配,首个匹配即生效。
103+
104+
#### 支持的匹配字段
105+
106+
| 字段 | 说明 | 示例 |
107+
|------|------|------|
108+
| 用户 ID(`error.usr_id`| 上报错误的用户标识 | `vip_001` |
109+
| 用户邮箱(`error.usr_email`| 用户邮箱地址 | `*@vip.com` |
110+
| 错误类型(`error.error_type`| 错误的类型分类 | `TypeError``SyntaxError` |
111+
| 错误消息(`error.error_message`| 错误的描述文本 | 包含 `Cannot read property` |
112+
| 错误堆栈(`error.error_stack`| 堆栈信息 | 包含 `undefined` |
113+
| 页面 URL(`error.view_url`| 错误发生的页面地址 | 包含 `/payment` |
114+
| 环境(`error.env`| 错误发生的环境 | `production``staging` |
115+
| 版本(`error.version`| 应用版本号 | `1.0.0` |
116+
| 服务(`error.service`| 错误所属的服务 | `payment` |
117+
| 浏览器(`error.browser_name`| 浏览器名称 | `Chrome` |
118+
| 是否崩溃(`error.is_crash`| 是否为崩溃错误 | `true` |
119+
| 指纹(`error.fingerprint`| 指纹信息 | `06375381216fe431` |
120+
| 自定义字段(`context`| 通过 context 上报的自定义属性,支持三层嵌套 | `context.user.level` |
121+
122+
匹配方式支持「包含」和「不包含」两种操作。
123+
124+
#### 配置示例
125+
126+
<AccordionGroup>
127+
<Accordion title="VIP 用户错误立即告警">
128+
为 VIP 用户的错误设置最高优先级,确保第一时间响应:
129+
130+
- 匹配条件:用户 ID 包含 `vip`
131+
- 告警级别:P0(Critical)
132+
</Accordion>
133+
<Accordion title="支付页面错误优先处理">
134+
支付页面是核心业务流程,相关错误需要优先处理:
135+
136+
- 匹配条件:页面 URL 包含 `/payment`
137+
- 告警级别:P1(Warning)
138+
</Accordion>
139+
<Accordion title="生产环境崩溃立即告警">
140+
生产环境的崩溃需要立即响应:
141+
142+
- 匹配条件:环境 包含 `production`,且 是否崩溃 包含 `true`
143+
- 告警级别:P0(Critical)
144+
</Accordion>
145+
</AccordionGroup>
146+
147+
<Tip>
148+
- Issue 的优先级只升不降,确保重要问题不会被后续低优先级的错误降级
149+
- 如需根据 Issue 的影响范围(如影响用户数、错误数量等)调整优先级,请在 Flashduty 集成的[告警处理 Pipeline](/zh/on-call/integration/alert-integration/alert-pipelines) 中配置
150+
</Tip>
151+
152+
## 数据过滤
153+
154+
数据过滤允许您在 Error 聚合为 Issue **之前**过滤掉不需要关注的噪音数据。被过滤的 Error 不会参与 Issue 聚合,也不会产生告警。
155+
156+
您可以在「告警设置」中添加过滤规则。每条规则可设置多个匹配条件,同一规则内的条件为 AND 关系。支持的匹配字段与[自定义告警分级](#自定义告警分级)一致。
157+
158+
| 场景 | 示例规则 |
159+
|------|----------|
160+
| 排除第三方脚本错误 | 错误堆栈 包含 `cdn.third-party.com` |
161+
| 排除已知无害错误 | 错误消息 包含 `ResizeObserver loop` |
162+
| 排除调试页面错误 | 页面 URL 包含 `/debug` |
163+
164+
<Tip>
165+
- 被过滤的 Error 不会参与 Issue 聚合和告警,但数据仍然保留,可在查看器中通过筛选条件查看
166+
- 如果只是想暂时屏蔽某类告警但保留 Issue 数据,建议使用 Flashduty 告警处理 Pipeline 中的「告警丢弃」功能
167+
</Tip>
168+
169+
## 与 Flashduty 协同
170+
171+
RUM 告警与 Flashduty 深度协同,形成完整的告警处理链路:
172+
173+
| 层级 | 配置位置 | 核心能力 | 适用场景 |
174+
|------|----------|----------|----------|
175+
| 数据过滤 | RUM 告警设置 | 过滤噪音 Error | 永久忽略第三方脚本错误、调试页面错误等 |
176+
| 告警分级 | RUM 告警设置 | 根据 Error 属性设定优先级 | VIP 用户告警、核心页面告警等 |
177+
| 告警处理 | Flashduty 集成配置 | 标题定制、优先级调整、丢弃/抑制 | 根据影响用户数调整级别、抑制重复告警等 |
178+
| 告警分派 | Flashduty 协作空间 | 路由、值班排班、通知渠道 | 分派到不同团队、配置通知方式等 |
179+
180+
您可以在 Flashduty 的[告警处理 Pipeline](/zh/on-call/integration/alert-integration/alert-pipelines) 中进一步处理 RUM 告警,例如根据影响用户数调整告警级别、按时间窗口抑制重复告警、自定义告警标题格式等。
181+
182+
## 延伸阅读
183+
184+
<CardGroup cols={2}>
185+
<Card title="RUM 告警降噪" icon="sliders" href="/zh/rum/best-practices/alert-noise-reduction">
186+
典型场景配置方案,快速减少无效告警干扰
187+
</Card>
188+
<Card title="告警处理 Pipeline" icon="filter" href="/zh/on-call/integration/alert-integration/alert-pipelines">
189+
在集成层对告警进行清洗、转换和过滤
190+
</Card>
191+
<Card title="告警降噪" icon="volume-slash" href="/zh/on-call/channel/noise-reduction">
192+
在协作空间层面聚合和抑制告警
193+
</Card>
194+
<Card title="告警分派" icon="route" href="/zh/on-call/channel/escalation-rule">
195+
配置分派策略,将告警路由到正确的值班人员
196+
</Card>
197+
</CardGroup>

0 commit comments

Comments
 (0)