跳到主要内容

SkyWalking 自定义告警规则

介绍

SkyWalking的告警系统允许您基于收集到的指标数据定义规则,当特定条件满足时触发通知。自定义告警规则是监控系统的核心功能之一,它使您能够根据业务需求灵活配置告警阈值和条件。

在本章节中,您将学习:

  • 告警规则的基本结构
  • 如何编写自定义规则
  • 实际应用案例
  • 最佳实践

告警规则基础

SkyWalking的告警规则使用YAML格式定义,主要包含以下部分:

  1. 规则名称:唯一标识规则
  2. 指标名称:要监控的指标(如服务响应时间)
  3. 阈值条件:触发告警的条件
  4. 告警周期:检查条件的频率
  5. 告警消息:触发时显示的消息
  6. 钩子:告警触发后的动作(如Webhook)

规则文件结构

SkyWalking的告警规则通常存储在 config/alarm-settings.yml 文件中。基本结构如下:

yaml
rules:
rule-name:
metrics-name: metric_name
op: ">,<,="
threshold: threshold_value
period: how_long_to_check
count: how_many_times_need_match
silence-period: how_long_to_silence
message: Alarm message

创建自定义规则

让我们通过一个实际例子来学习如何创建自定义告警规则。

示例1:服务响应时间告警

假设我们想监控某个服务的响应时间,当平均响应时间超过500毫秒持续3分钟时触发告警:

yaml
rules:
service_resp_time_rule:
metrics-name: service_resp_time
op: ">"
threshold: 500
period: 10
count: 18
silence-period: 5
message: 服务 {name} 的平均响应时间超过500ms (当前值: {value}ms)
参数说明
  • period: 10:每10秒检查一次
  • count: 18:需要连续18次匹配(10×18=180秒=3分钟)
  • silence-period: 5:告警后静默5个周期(50秒)再检查

示例2:错误率告警

监控服务的错误率,当错误率超过5%持续2分钟时触发告警:

yaml
rules:
service_error_rate_rule:
metrics-name: service_error_rate
op: ">"
threshold: 0.05
period: 10
count: 12
message: 服务 {name} 的错误率超过5% (当前值: {value}%)

高级规则配置

使用复合条件

SkyWalking支持使用表达式组合多个条件:

yaml
rules:
combined_rule:
metrics-name: service_percentage
expression: service_resp_time > 500 && service_error_rate > 0.1
period: 10
count: 6
message: 服务 {name} 响应时间高且错误率高

指标分组

可以对相同服务的多个实例进行分组告警:

yaml
rules:
group_rule:
metrics-name: service_instance_resp_time
op: ">"
threshold: 1000
period: 10
count: 3
group-by: ["service_name"]
message: 服务 {name} 的某些实例响应时间高

实际案例

电商平台监控场景

假设我们有一个电商平台,需要监控以下场景:

  1. 支付服务延迟:支付服务响应时间超过2秒
  2. 库存服务错误:库存服务错误率超过10%
  3. 订单量突降:订单服务每分钟请求量下降超过50%
yaml
rules:
payment_latency_rule:
metrics-name: service_resp_time
op: ">"
threshold: 2000
period: 10
count: 6
include-names: ["payment-service"]
message: 支付服务响应时间超过2秒 (当前: {value}ms)

inventory_error_rule:
metrics-name: service_error_rate
op: ">"
threshold: 0.1
period: 10
count: 6
include-names: ["inventory-service"]
message: 库存服务错误率超过10% (当前: {value}%)

order_drop_rule:
metrics-name: service_cpm
op: "<"
threshold: 0.5
period: 60
count: 1
include-names: ["order-service"]
compare: "previous 1 minutes"
message: 订单服务请求量下降超过50% (当前: {value})

测试与验证

定义完告警规则后,可以通过以下步骤测试:

  1. 重启SkyWalking OAP服务使规则生效
  2. 使用压测工具模拟触发条件
  3. 检查SkyWalking UI的告警页面
  4. 验证是否收到预期的通知

最佳实践

  1. 合理设置阈值:基于历史数据设置合理的阈值
  2. 避免告警风暴:设置适当的静默期
  3. 分级告警:不同严重程度使用不同通知渠道
  4. 定期审查:根据业务变化调整规则
  5. 使用有意义的告警消息:包含足够上下文信息

总结

SkyWalking的自定义告警规则功能强大且灵活,允许您根据具体业务需求创建精确的监控规则。通过合理配置,可以及时发现系统异常,保障服务稳定性。

延伸学习

  • 尝试为您的服务创建自定义告警规则
  • 探索SkyWalking的Webhook集成
  • 研究如何将告警与第三方系统(如Slack、钉钉)集成
  • 学习使用SkyWalking的告警模板功能
练习
  1. 创建一个规则,当某个服务的JVM内存使用超过80%时触发告警
  2. 修改现有规则,添加多个服务实例的分组监控
  3. 尝试配置一个复合条件的告警规则