一、问题背景
在之前的内容中,笔者对云原生、DevOps等场景下的质量看护与告警平台建设有了一个初步的介绍。在其中众多的现网故障与风险里,最常见、也是最重要的一类风险为现网接口故障。
接下来我们对这类故障的类型、表现形式以及快速发现与告警的相关进行简略介绍。
二、接口故障
在当前云原生与微服务的背景下,功能业务与数据交互90%以上的情况都是通过接口来实现的。
对于接口访问状态,只是通过状态码机制来实现的:
- 2xx类型:成功类型;
- 3xx类型:使用情况较少,一般不关注;
- 4xx类型:主要关注429——即接口发生流控;
- 5xx类型:重点关注,说明服务内部出现严重故障;
在发现与告警中,我们主要通过以下三种手段:
- 调用链
- 日志
- 拨测
三、基于调用链
- 应用性能管理平台通过Agent获取所有注册在CMDB的服务后端接口调用全链路数据;
- 收集全量数据并在大数据平台进行汇聚、处理,提供诸如“xx接口状态码分布”等结果;
- 基于状态码详情信息,发起快速告警。
基于调用链的,除了能够快速发现现网接口故障外,还能够利用全链路信息,挖掘接口调用用户、上下游服务、故障影响面等信息。
四、基于日志
- 云日志服务结合服务安装的相关
request-filter
插件,实现服务接口访问日志自动上报; - 自动基于日志标签、状态码、故障关键字等信息,实现现网接口故障快速告警。
基于日志的方案没有全链路优势,但可以对访问信息、接口故障日志信息做深度的自定义,方便发现一些其他现网接口问题:例如之前所说的依赖降级等。
五、基于拨测
除了上述基于现网数据,我们还可以使用主动探寻的方法发现服务接口问题——拨测。
这其中还可以根据复杂程度的不同,分成功能拨测与快速拨测两类。
1、功能拨测
- 云化测试平台对多个接口进行用例编纂,一般一个用例包含多个接口,用已验证某个或多个功能特性;
- 根据用例设置的
CheckPoint
来判断用例成功与否、并选择告警。CheckPoint
一般取接口状态码,也可以取RequestBody
中相关字段值;- 只要有一个接口
CheckPoint
未检查通过,整个用例都会显示失败;
功能拨测由于包含完整的数据初始化、数据销毁等流程, 因此执行速度较慢,一般用于测试重要但频率较低的特性。
2、快速拨测
- 配置接口地址、认证token等,高频、快速发起对接口的访问,判断接口返回值是否为2xx;
快速拨测没法承担过于复杂的逻辑检测,但对于暴露给用户或高频次使用的核心接口,这种快速测试的方法在发现接口故障上是颇为有效的。