微服务全链路追踪
一、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/notifywechatHooks:textTemplate: |-{"msgtype": "text","text": {"content": "Apache SkyWalking Alarm: \n %s."}}webhooks:- 此处写企业微信通知机器人的地址