Skywalking告警配置实战从规则解析到自定义告警与通知集成刚接触Skywalking的开发者面对alarm-config.yaml中密密麻麻的告警规则配置往往会感到无从下手。这份指南将带你深入理解Skywalking告警机制的核心逻辑并通过实际案例演示如何根据业务需求定制告警规则最终实现与飞书/钉钉等协作平台的无缝集成。1. 理解Skywalking告警机制基础Skywalking的告警系统基于指标数据的实时计算与规则匹配。其核心配置文件alarm-config.yaml位于Skywalking部署目录的config文件夹下。默认配置中包含了几种基础告警规则我们先解剖一个典型示例service_resp_time_rule: expression: sum(service_resp_time 1000) 3 period: 10 silence-period: 5 message: Response time of service {name} is more than 1000ms in 3 minutes of last 10 minutes.这个规则包含几个关键元素expression告警触发条件表达式period评估时间窗口分钟silence-period静默时间分钟message告警消息模板表达式中的sum(service_resp_time 1000)表示统计响应时间超过1000ms的次数3表示在评估窗口内达到3次即触发告警。理解这个逻辑是编写自定义规则的基础。2. 告警规则参数详解2.1 核心配置项说明参数必填说明示例expression是PromQL风格的表达式sum(service_sla 8000) 2include-names否规则适用的实体名称列表- order-serviceexclude-names否规则排除的实体名称列表- test-serviceperiod是评估时间窗口分钟10silence-period否相同告警的最小间隔时间5tags否自定义标签键值对severity: CRITICAL2.2 实体名称的特殊格式在配置include-names或exclude-names时需要注意Skywalking的实体命名规范{service_name}|{namespace}|{group}例如如果Agent配置了SW_AGENT_NAMESPACEprod SW_AGENT_NAMEpayment-service那么在告警规则中对应的服务名应为include-names: - payment-service|prod|3. 编写自定义告警规则实战3.1 电商场景订单服务成功率监控假设我们需要监控订单服务的接口成功率要求低于99.9%时触发告警order_service_sla_rule: expression: sum((service_sla / 100) 99.9) 2 include-names: - order-service|prod| period: 5 silence-period: 3 message: 订单服务成功率低于99.9% tags: severity: HIGH这个规则表示如果在5分钟内有2次检测到订单服务的成功率低于99.9%就会触发告警且相同告警至少间隔3分钟才会再次发送。3.2 支付系统P99延迟告警对于支付系统我们可能更关注高百分位延迟payment_p99_latency_rule: expression: sum(service_percentile{_3} 500) 2 include-names: - payment-service|prod| period: 5 message: 支付服务P99延迟超过500ms这里的service_percentile{_3}表示P99指标索引3对应P99整个表达式表示5分钟内出现2次P99延迟超过500ms即触发告警。4. 告警通知集成实践4.1 Webhook通用集成方案最可靠的集成方式是通过自定义Webhook中转hooks: webhook: default: is-default: true urls: - http://your-webhook-service/skywalking对应的Spring Boot Webhook处理器示例RestController RequestMapping(/alert) public class AlertController { PostMapping(/skywalking) public void handleAlert(RequestBody ListAlarmMessage messages) { messages.forEach(msg - { String content String.format(【%s】%s: %s, msg.getRuleName(), msg.getName(), msg.getAlarmMessage()); // 调用飞书/钉钉API发送通知 sendToLark(content); }); } private void sendToLark(String content) { // 实现飞书机器人消息发送 } }4.2 飞书通知的特殊处理直接使用Skywalking内置的飞书集成可能存在只发一次的问题。解决方案使用Webhook中转推荐如上节所示调整静默周期适当缩短silence-period检查飞书机器人配置确保没有启用限频设置4.3 钉钉机器人集成配置对于钉钉平台可以使用以下配置模板hooks: dingtalk: default: text-template: |- { msgtype: text, text: { content: Skywalking告警:\n\n规则: %s\n服务: %s\n消息: %s } } webhooks: - url: https://oapi.dingtalk.com/robot/send?access_tokenYOUR_TOKEN5. 高级配置技巧与排错指南5.1 多环境规则管理建议通过条件包含实现环境隔离order_service_sla_rule: expression: sum((service_sla / 100) 99.9) 2 include-names-regex: .*\|prod\| period: 5 message: [PROD]订单服务SLA告警5.2 常见问题排查表问题现象可能原因解决方案告警未触发表达式条件太严格调整阈值或统计窗口重复告警silence-period设置过小适当增大静默周期通知未送达Webhook地址错误检查网络连通性和接口日志指标数据缺失Agent未正确上报检查Agent配置和网络连接5.3 性能优化建议对于大规模部署考虑以下优化措施合理设置period避免过短的评估周期增加服务器负载使用include/exclude过滤减少不必要的规则计算分级告警不同严重程度的告警使用不同的静默周期在实际项目中我们发现将核心服务的period设置为3-5分钟非核心服务设置为10-15分钟可以在及时性和系统负载之间取得良好平衡。
Skywalking告警配置实战:从看懂默认规则到写出你的第一条自定义告警(附飞书/钉钉通知避坑)
Skywalking告警配置实战从规则解析到自定义告警与通知集成刚接触Skywalking的开发者面对alarm-config.yaml中密密麻麻的告警规则配置往往会感到无从下手。这份指南将带你深入理解Skywalking告警机制的核心逻辑并通过实际案例演示如何根据业务需求定制告警规则最终实现与飞书/钉钉等协作平台的无缝集成。1. 理解Skywalking告警机制基础Skywalking的告警系统基于指标数据的实时计算与规则匹配。其核心配置文件alarm-config.yaml位于Skywalking部署目录的config文件夹下。默认配置中包含了几种基础告警规则我们先解剖一个典型示例service_resp_time_rule: expression: sum(service_resp_time 1000) 3 period: 10 silence-period: 5 message: Response time of service {name} is more than 1000ms in 3 minutes of last 10 minutes.这个规则包含几个关键元素expression告警触发条件表达式period评估时间窗口分钟silence-period静默时间分钟message告警消息模板表达式中的sum(service_resp_time 1000)表示统计响应时间超过1000ms的次数3表示在评估窗口内达到3次即触发告警。理解这个逻辑是编写自定义规则的基础。2. 告警规则参数详解2.1 核心配置项说明参数必填说明示例expression是PromQL风格的表达式sum(service_sla 8000) 2include-names否规则适用的实体名称列表- order-serviceexclude-names否规则排除的实体名称列表- test-serviceperiod是评估时间窗口分钟10silence-period否相同告警的最小间隔时间5tags否自定义标签键值对severity: CRITICAL2.2 实体名称的特殊格式在配置include-names或exclude-names时需要注意Skywalking的实体命名规范{service_name}|{namespace}|{group}例如如果Agent配置了SW_AGENT_NAMESPACEprod SW_AGENT_NAMEpayment-service那么在告警规则中对应的服务名应为include-names: - payment-service|prod|3. 编写自定义告警规则实战3.1 电商场景订单服务成功率监控假设我们需要监控订单服务的接口成功率要求低于99.9%时触发告警order_service_sla_rule: expression: sum((service_sla / 100) 99.9) 2 include-names: - order-service|prod| period: 5 silence-period: 3 message: 订单服务成功率低于99.9% tags: severity: HIGH这个规则表示如果在5分钟内有2次检测到订单服务的成功率低于99.9%就会触发告警且相同告警至少间隔3分钟才会再次发送。3.2 支付系统P99延迟告警对于支付系统我们可能更关注高百分位延迟payment_p99_latency_rule: expression: sum(service_percentile{_3} 500) 2 include-names: - payment-service|prod| period: 5 message: 支付服务P99延迟超过500ms这里的service_percentile{_3}表示P99指标索引3对应P99整个表达式表示5分钟内出现2次P99延迟超过500ms即触发告警。4. 告警通知集成实践4.1 Webhook通用集成方案最可靠的集成方式是通过自定义Webhook中转hooks: webhook: default: is-default: true urls: - http://your-webhook-service/skywalking对应的Spring Boot Webhook处理器示例RestController RequestMapping(/alert) public class AlertController { PostMapping(/skywalking) public void handleAlert(RequestBody ListAlarmMessage messages) { messages.forEach(msg - { String content String.format(【%s】%s: %s, msg.getRuleName(), msg.getName(), msg.getAlarmMessage()); // 调用飞书/钉钉API发送通知 sendToLark(content); }); } private void sendToLark(String content) { // 实现飞书机器人消息发送 } }4.2 飞书通知的特殊处理直接使用Skywalking内置的飞书集成可能存在只发一次的问题。解决方案使用Webhook中转推荐如上节所示调整静默周期适当缩短silence-period检查飞书机器人配置确保没有启用限频设置4.3 钉钉机器人集成配置对于钉钉平台可以使用以下配置模板hooks: dingtalk: default: text-template: |- { msgtype: text, text: { content: Skywalking告警:\n\n规则: %s\n服务: %s\n消息: %s } } webhooks: - url: https://oapi.dingtalk.com/robot/send?access_tokenYOUR_TOKEN5. 高级配置技巧与排错指南5.1 多环境规则管理建议通过条件包含实现环境隔离order_service_sla_rule: expression: sum((service_sla / 100) 99.9) 2 include-names-regex: .*\|prod\| period: 5 message: [PROD]订单服务SLA告警5.2 常见问题排查表问题现象可能原因解决方案告警未触发表达式条件太严格调整阈值或统计窗口重复告警silence-period设置过小适当增大静默周期通知未送达Webhook地址错误检查网络连通性和接口日志指标数据缺失Agent未正确上报检查Agent配置和网络连接5.3 性能优化建议对于大规模部署考虑以下优化措施合理设置period避免过短的评估周期增加服务器负载使用include/exclude过滤减少不必要的规则计算分级告警不同严重程度的告警使用不同的静默周期在实际项目中我们发现将核心服务的period设置为3-5分钟非核心服务设置为10-15分钟可以在及时性和系统负载之间取得良好平衡。