SkyWalking 自定义告警规则
介绍
SkyWalking的告警系统允许您基于收集到的指标数据定义规则,当特定条件满足时触发通知。自定义告警规则是监控系统的核心功能之一,它使您能够根据业务需求灵活配置告警阈值和条件。
在本章节中,您将学习:
- 告警规则的基本结构
- 如何编写自定义规则
- 实际应用案例
- 最佳实践
告警规则基础
SkyWalking的告警规则使用YAML格式定义,主要包含以下部分:
- 规则名称:唯一标识规则
- 指标名称:要监控的指标(如服务响应时间)
- 阈值条件:触发告警的条件
- 告警周期:检查条件的频率
- 告警消息:触发时显示的消息
- 钩子:告警触发后的动作(如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} 的某些实例响应时间高
实际案例
电商平台监控场景
假设我们有一个电商平台,需要监控以下场景:
- 支付服务延迟:支付服务响应时间超过2秒
- 库存服务错误:库存服务错误率超过10%
- 订单量突降:订单服务每分钟请求量下降超过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})
测试与验证
定义完告警规则后,可以通过以下步骤测试:
- 重启SkyWalking OAP服务使规则生效
- 使用压测工具模拟触发条件
- 检查SkyWalking UI的告警页面
- 验证是否收到预期的通知
最佳实践
- 合理设置阈值:基于历史数据设置合理的阈值
- 避免告警风暴:设置适当的静默期
- 分级告警:不同严重程度使用不同通知渠道
- 定期审查:根据业务变化调整规则
- 使用有意义的告警消息:包含足够上下文信息
总结
SkyWalking的自定义告警规则功能强大且灵活,允许您根据具体业务需求创建精确的监控规则。通过合理配置,可以及时发现系统异常,保障服务稳定性。
延伸学习
- 尝试为您的服务创建自定义告警规则
- 探索SkyWalking的Webhook集成
- 研究如何将告警与第三方系统(如Slack、钉钉)集成
- 学习使用SkyWalking的告警模板功能
练习
- 创建一个规则,当某个服务的JVM内存使用超过80%时触发告警
- 修改现有规则,添加多个服务实例的分组监控
- 尝试配置一个复合条件的告警规则