分类目录归档:监控

API自动文档管理和接口监控系统

  在现代化前后端分离的方式进行编程时,接口定义和接口对接已经成为很重要的一环。 对此我也有了一些简单的考虑,详情可以参考V站上的讨论: 面向接口编程的一些思考(接口管理、接口健康监控)。 主要思考点有两个: 

  1. 接口文档自动化完成并自动生成mock
  2. 接口自动监控,异常时报警。

为此,希望能有一个工具做到以下几点:

  1. 接口文档和 mock 通过代码自动生成。
  2. 接口版本管理。
  3. 接口健康度监控,可以定时或手动的调用 mock 或是正式的接口(可以通过一个开关控制)。首页可以是一个项目所有接口的 dashboard 监控展示,点击每一项可以看到这个接口的监控或是出错信息。

经过一段时间调研和开发。 接口文档化这一块采用了swagger 对接java doc 进行自动化文档生成。定义文档时不需要手动进行文档描述,只需要按照项目抽象出数据model,然后使用java doc的方式注解上接口的描述等信息,接口请求参数和返回信息等也通过swagger api的方式直接定义。完成定义后,运行项目,自动生成基于swagger的项目接口文档和mock server,方便前后端对接,当model做了修改后swagger文档也对应做修改(后继需要做接口版本管理功能)。展示如下图:

api

接口监控采用定时接口请求,然后保存请求数据到influxdb 中, 展示部分使用grafana 直接展示influxdb中获取到的监控数据。接口监控的详细技术栈如下:

1. 接口监控基于statusok(go开发的并发接口状态监控程序),通过生产者-消费者模型,并发无阻塞地进行接口监控。

2. 数据库采用influxdb, 自动生成基于时间序列化的数据序列,方便后期进行汇总、分析和展示。

3. 展示部分使用grafana,可以原生支持influxdb数据的展示,官方有许多插件,方便扩展,同时本身是基于Angular开发的纯web展示,方便进行定制化开发。

接口监控部分基于statusok做了一些扩展:

1. 接口返回码有influxdb中的field中提取到了tag中,因为tag是添加索引的,而field无索引。在数据展示时返回码也是很重要的一种类别,需要做group等操作,所以添加索引。(注意influxdb中tag部分数据只能为string类型,所以入库时需要做相应的类型转换)。

2. 因为项目的接口经常需要有权限校验逻辑,所以添加了自动权限验证逻辑。具体实现仿照scrapy的逻辑,添加一个pre_request 方法,在这个方法中做一些接口请求的前置操作,比如先获取到相关的token信息,然后放入后继请求的头部cookie中。

grafana中接口监控的dashboard如下如所示,也可以很方便地进行数据的汇总、计算等操作。

grafana

swagger api 开源地址: https://github.com/liyj144/swagger_springdoc.git

监控dashboard 开源地址: https://github.com/liyj144/statusok