一、SkyWalking告警规则

Alarm | Apache 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

四、企业真实场景(复合规则)

当涉及到更复杂的复合告警场景时,结合多个指标或条件来设置复合告警规则,以便更全面地监控系统性能和业务状态。

  1. 响应时间和异常率:

  2. 规则:应用程序的平均响应时间超过600毫秒且异常率超过5%,则触发告警。

  3. 场景描述:用于监测应用程序的性能和稳定性。通过同时监测应用程序的平均 响应时间和异常率,可以快速发现潜在的性能问题和错误情况。

  4. 依赖服务请求次数和成功率:

  5. 规则:应用程序对某个依赖服务的请求次数超过10000次且成功率低于95%,则 触发告警。

  6. 场景描述:对于依赖其他服务的微服务架构,此规则可用于监测对某个关键依 赖服务的请求情况。通过同时监测请求次数和成功率,可以及时发现对该依赖 服务的请求过于频繁或出现异常情况。

  7. JVM 堆内存使用率和线程数:

  8. 规则:JVM 堆内存使用率超过80%且线程数超过1000,同时持续时间超过5分 钟,则触发告警。

  9. 场景描述:此规则适用于监测 JVM 的健康状态。通过同时监测堆内存使用率和 线程数,可以检测出潜在的内存泄漏或线程资源耗尽问题,并发出告警以避免 系统性能下降或崩溃。

  10. HTTP 5xx 错误和请求延迟:

  11. 规则:应用程序的 HTTP 5xx 错误次数超过15个且请求延迟超过300毫秒,则触 发告警。

  12. 场景描述:此规则适用于监测应用程序的 HTTP 请求情况。通过同时监测错误 次数和请求延迟,可以快速发现服务器端出现过多的错误响应和性能瓶颈。

  13. 服务间调用次数和响应时间:

  14. 规则:某个微服务对其他服务的调用次数超过1000次且平均响应时间超过200 毫秒,则触发告警。

  15. 场景描述:对于微服务架构的应用程序,此规则可用于监测服务之间的调用情 况和性能。通过同时监测调用次数和响应时间,可以快速发现调用频繁和潜在的性能瓶颈。

五、总结

  • 单独规则适用于设置简单、独立的监控指标,并触发相应的告警。
  • 复合规则适用于更复杂的告警策略,可以根据多个条件的组合来确定是否触发告警。
  • 这两种规则类型都可以根据业务需求和监控目标进行灵活配置,帮助研发同学实时监控系统性能并及时处理潜在问题。