一、SkyWalking告警规则¶
告警规则有两种类型,单独规则(Individual Rules)和复合规则(Composite Rules)。
复合规则是单独规则的组合。
二、单独规则(Individual Rules)¶
单独规则主要有以下几点:
单独规则主要有以下几点:
特点:单独规则是独立的监控告警规则,根据特定的指标或条件设置。它可以检测和监 控单个指标的变化,并触发相应的告警。
场景示例:假设一个在线商城应用有一个单告警规则:如果订单处理(接口)的平均时 间超过5秒,则触发告警。
示例:
- 规则名称:service_resp_time
- 条件:服务 {name} 的平均响应时间在最近1分钟内有2次超过5秒,则触发告警。
service_resp_time_rule:
metrics-name: service_resp_time
op: ">"
threshold: 5000
period: 1
count: 2
silence-period: 10
message: 服务 {name} 的平均响应时间在最近1分钟内有2次超过5秒
- 这个规则可以帮助团队及时发现订单处理性能问题,并及时采取措施以提高用户体验。
三、复合规则(Composite Rules)¶
复合规则是由 多个单独规则组合 而成的复杂规则,可以通过逻辑运算符(如AND、 OR)将多个规则组合起来。
重点理解:
- 都是服务级别的告警规则:service_percent_rule && service_resp_time_percentile_rule 。✔
- 编写不同实体级别的告警规则,服务级别的一个告警规则和端点级别的一个规则:service_percent_rule && endpoint_percent_rule 。✖
示例场景:
- 支付失败率超过5%且平均响应时间超过2秒,则触发告警。
复合规则主要有以下几点:
- 规则名称:在告警信息中显示的唯一名称,必须以 _rule结尾。
- expression:指定如何组成规则,支持 &&, ||, ()操作符。
- &&:表示逻辑与(AND)操作符。当两个条件都满足时,条件表达式返回true;否则返回 false。
- ||:表示逻辑或(OR)操作符。当至少一个条件满足时,条件表达式返回true;否则返回 false。
- ():用于分组条件,通过括号来指定优先级和逻辑关系。括号内的条件会首先进行计算,然后根据其结果在整个条件表达式中进行逻辑判断。
- message:该规则触发时,发送的通知消息。
举个例子:
rules:
service_resp_time_rule:
metrics-name: payment_failure_rate
op: ">"
threshold: 1000
period: 1
count: 2
silence-period: 1
message: 服务 {name} 的支付失败率在最近1分钟内有2次超过1秒
service_sla_rule:
metrics-name: average_response_time
op: ">"
threshold: 2000
period: 1
count: 2
silence-period: 10
message: 服务 {name} 的响应时间最近1分钟内有2次大于2s
composite-rules:
# 规则名称:在告警信息中显示的唯一名称,必须以_rule结尾
comp_rule:
# 指定如何组成规则,支持&&, ||, ()操作符
expression: payment_failure_rate && average_response_time
message: 服务 {name} 支付失败率在最近1分钟内有2次超过1秒且响应时间最近1分钟内有2次大于2s
四、企业真实场景(复合规则)¶
当涉及到更复杂的复合告警场景时,结合多个指标或条件来设置复合告警规则,以便更全面地监控系统性能和业务状态。
-
响应时间和异常率:
-
规则:应用程序的平均响应时间超过600毫秒且异常率超过5%,则触发告警。
-
场景描述:用于监测应用程序的性能和稳定性。通过同时监测应用程序的平均 响应时间和异常率,可以快速发现潜在的性能问题和错误情况。
-
依赖服务请求次数和成功率:
-
规则:应用程序对某个依赖服务的请求次数超过10000次且成功率低于95%,则 触发告警。
-
场景描述:对于依赖其他服务的微服务架构,此规则可用于监测对某个关键依 赖服务的请求情况。通过同时监测请求次数和成功率,可以及时发现对该依赖 服务的请求过于频繁或出现异常情况。
-
JVM 堆内存使用率和线程数:
-
规则:JVM 堆内存使用率超过80%且线程数超过1000,同时持续时间超过5分 钟,则触发告警。
-
场景描述:此规则适用于监测 JVM 的健康状态。通过同时监测堆内存使用率和 线程数,可以检测出潜在的内存泄漏或线程资源耗尽问题,并发出告警以避免 系统性能下降或崩溃。
-
HTTP 5xx 错误和请求延迟:
-
规则:应用程序的 HTTP 5xx 错误次数超过15个且请求延迟超过300毫秒,则触 发告警。
-
场景描述:此规则适用于监测应用程序的 HTTP 请求情况。通过同时监测错误 次数和请求延迟,可以快速发现服务器端出现过多的错误响应和性能瓶颈。
-
服务间调用次数和响应时间:
-
规则:某个微服务对其他服务的调用次数超过1000次且平均响应时间超过200 毫秒,则触发告警。
- 场景描述:对于微服务架构的应用程序,此规则可用于监测服务之间的调用情 况和性能。通过同时监测调用次数和响应时间,可以快速发现调用频繁和潜在的性能瓶颈。
五、总结¶
- 单独规则适用于设置简单、独立的监控指标,并触发相应的告警。
- 复合规则适用于更复杂的告警策略,可以根据多个条件的组合来确定是否触发告警。
- 这两种规则类型都可以根据业务需求和监控目标进行灵活配置,帮助研发同学实时监控系统性能并及时处理潜在问题。