微服务全链路追踪
一、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:
    - 此处写企业微信通知机器人的地址 
 
 
