微服务全链路追踪
一、APM 系统
APM 系统是可以帮助理解系统行为、用于分析性能问题的工具以便发生故障的时候,能够快速走位和解决问题。
告警规则
SkyWalking 的发行版都会默认提供config/alarm-settings.yml文件,里面预先定义了一些常用的告警规则。如下
1. 过去 3 分钟内服务平均响应时间超过 1 秒。
2.过去 2 分钟服务成功率低于80%。
3. 过去 3 分钟内服务响应时间超过 1s 的百分比
4.服务实例在过去 2 分钟内平均响应时间超过 1s,并且实例名称与正则表达式匹配
5. 过去 2 分钟内端点平均响应时间超过 1 秒。
6. 过去 2 分钟内数据库访问平均响应时间超过 1 秒。
7.过去 2 分钟内端点关系平均响应时间超过 1秒。
Webhook(网络钩子)
Webhoo可以简单理解为是一种Meb0层面的回调机制,通常由一些事件触发,与代码中的事件回调类队,只不过是Web层面的。由于是Web层面的,所以当事件发生时,回调的不再是代码中的方法或函效,,而是服务接口。例如,在告警这个场景,告警就是一个事件。当该事件发生时,SkyWalking就会主动去调用一个配置好的接口,该接口就是所谓的Webhook。SKWMaKmg9告警消息会通过 HTP 请求进行发送,请求方法为P0ST, contcent-Iype 为 aplication/json,其IS0N教据实基Tlist<ory.apache.skwmelking.oap.server.core.alarm Alarndlasae进行京列比的,,JSON数国示例:
[4
"scopeld”: 1,
"scope”: "SERVICE”
"name": "serviceA",
"ido”: 12,
"id1”: 0.
"ruleName":"service_resp_time_rule”
"alarmMessage":"alarmMessage xxxx"
"startTime”: 1560524171000
@RequestMapping("/alerting")
@RestController
@Slf4j
public class AlertController {
@PostMapping("/notify")
public void alertingNotify(@RequestBody List<AlarmMessage> messages){
log.info("[告警通知]告警消息:{}", JSON.toJSONString(messages));
for (AlarmMessage message : messages) {
if (message.getAlarmMessage().contains("服务挂掉")) {
//发送短信通知
log.info("发送短信通知"+message.getAlarmMessage());
}
}
}
//测试接口估计慢3秒进行测试
@PostMapping("/test")
public String alertingNotifyTest() throws InterruptedException {
TimeUnit.SECONDS.sleep(3L);
String messages="skyWalking测试接口慢3秒进行测试";
log.info("skyWalking测试接口慢3秒进行测试"+messages);
return messages;
}
@ToString
@Data
public class AlarmMessage {
private int scopeId;
private String name;
private String ide;
private String id1;
//告警具体消息
private String alarmMessage;
private long startTime;
private String ruleName;
}
以下为告警通知发送到企业微信案列
webhooks:
# - http://127.0.0.1/notify/
# - http://127.0.0.1/go-wechat/
- http://192.168.3.8:8090/alerting/notify
wechatHooks:
textTemplate: |-
{
"msgtype": "text",
"text": {
"content": "Apache SkyWalking Alarm: \n %s."
}
}
webhooks:
- 此处写企业微信通知机器人的地址