
1. 配置告警规则:SkyWalking的告警功能是由一组规则驱动的,这些规则定义在`config/alarm-settings.yml`文件中。告警规则有单独规则和复合规则,单独规则是针对单个指标的告警规则,而复合规则则是基于多个指标的综合告警规则。例如:
yaml
service_resp_time_rule:
metrics-name: service_resp_time
include-names:
exclude-names:
threshold: 75
op: <
上述规则表示,当服务`service_a`和`service_b`(不包括`service_c`)的响应时间超过75毫秒时,将触发告警。
2. 配置Webhook:SkyWalking通过Webhook(网络钩子)来发送告警通知。Webhook可以简单理解为是一种Web层面的回调机制,当告警事件发生时,SkyWalking会主动调用一个配置好的接口,该接口就是Webhook。在`config/alarm-settings.yml`文件中配置Webhook地址,格式为`
yaml
webhooks:
3. 实现接收告警通知的服务:SkyWalking只会在发生告警时将告警信息发送至配置好的Webhook接口,需要在该接口里实现发送邮件或短信等功能,从而达到个性化的告警通知。例如,基于Spring Boot实现接收SkyWalking告警通知并发送邮件的功能:
xml
yaml
spring:
mail:
host: smtp.
username:
password: 你的邮箱服务密钥
default-encoding: utf-8
port: 465
protocol: smtp
properties:
mail:
debug: false
smtp:
socketFactory:
class: .ssl.SSLSocketFactory
java
@Data
public class SwAlarmDTO {
private Integer scopeId;
private String scope;
private String name;
private Integer id0;
private Integer id1;
private String ruleName;
private String alarmMessage;
private Long startTime;
java
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping(“/alarm”)
public class SwAlarmController {
private final JavaMailSender sender;
@Value(“${spring.mail.username}”)
private String from;
@PostMapping(“/receive”)
public void receive(@RequestBody List
SimpleMailMessage message = new SimpleMailMessage;
message.setFrom(from);
message.setTo(from);
message.setSubject(“告警邮件”);
String content = getContent(alarmList);
message.setText(content);
sender.send(message);
log.info(“告警邮件已发送…”);
private String getContent(List
StringBuilder sb = new StringBuilder;
for (SwAlarmDTO dto : alarmList) {
sb.append(“scopeId: “).append(dto.getScopeId)
append(“
scope: “).append(dto.getScope)
append(“
目标 Scope 的实体名称: “).append(dto.getName)
append(“
Scope 实体的 ID: “).append(dto.getId0)
append(“
id1: “).append(dto.getId1)
append(“
告警规则名称: “).append(dto.getRuleName)
append(“
告警消息内容: “).append(dto.getAlarmMessage)
append(“
告警时间: “).append(dto.getStartTime)
append(“
);
return sb.toString;
4. 告警通知内容预览:SkyWalking的告警消息会通过HTTP请求进行发送,请求方法为POST,Content-Type为`application/json`,其JSON数据基于`List
json
scopeId”: 1,
scope”: “SERVICE”,
name”: “gateway”,
id0″: 3,
id1″: 0,
alarmMessage”: “Response time of service gateway is more than 1000ms in 3 minutes of last 10 minutes.”,
startTime”: 30
字段说明:
`startTime`:告警时间,格式为时间戳。
Lei
April 24, 2025
技术探讨