ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 说明 * 在日常开发运维中,我们经常会碰到各种原因导致的接口服务异常,尤其是数据导致的接口返回异常。还有特殊用户要时刻保证服务接口正常,不能等客户触发异常后再去修复等场景。 * 针对这种情况JPower基于swagger的/v2/api-docs接口提供了接口监控服务,通过提供的时间周期,定期主动去监控接口是否返回正常,运维人员可随时观察接口返回数据情况。 * 启用接口监控后,接口异常等情况无需用户主动触发后运维人员才能及时发现,我们的服务会在用户触发之前就把异常暴漏出来,可让开发人员提前进行补救修复。 * 接口主动监控不止支持JPower系列得服务,不在JPower系列内也可支持监控,只要服务集成swagger的/v2/api-docs接口和seata分布式事务(服务的数据库中不保存测试数据情况下需要)即可。 ## 如何使用 * 在监控过程中如果要求目标服务数据库不保存监控所产生的数据时,需开启seata全局事务,[seata文档](./Seata分布式事务.md) * 接口监控实现在了日志模块(jpower-log),可在配置文件中配置`jpower.monitor-restful.enable`为true即可开启接口主动监控。 * 主动接口监控完整配置如下: ~~~ jpower: monitor-restful: enable: true cron: 0 0 1 * * ? routes: - name: test location: http://localhost:82 url: /all/restful auth: url: /auth/login method: post params: loginId=lipw&passWord=57ba172a6be125cca2f449826f9980ca&grantType=password headers: User-Type=web&Authorization=Basic Y2hhdDppSzFZRlE%3D code-field: code success-code: 200 token: 'eyJ0eXBlIjoiSnNvbldlYlRva2VuIiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiJpc3N1c2VyIiwiYXVkIjoiYXVkaWVuY2UiLCJhZGRyZXNzIjoi5YaF6JKZ5Y-kIiwiaWRUeXBlIjoxLCJsb2dpbklkIjoicm9vdCIsIm9yZ05hbWUiOiIiLCJuaWNrTmFtZSI6Iui2hee6p-eUqOaItyIsInRlbGVwaG9uZSI6IjE1MDExMDcxMjI2IiwiYXZhdGFyIjoiNjNlOTNiZWUzNmRiNGM3NGE2ZGEyODMxZmE3NzFhNmZjYjRiYWU3YWE5YjJmYTc5M2M1Mzc5ZDJhZGI4ZmI1MmUxYWRjYmJkM2YwN2RiZDkiLCJ0ZW5hbnRDb2RlIjoiMDAwMDAwIiwidXNlck5hbWUiOiLotoXnuqfnrqHnkIblkZgiLCJpZE5vIjoiMTUyNjAxMTk5NDA4MDEyNjE3IiwidXNlcklkIjoiMSIsImxvZ2luQ291bnQiOjE0NTksIm9yZ0lkIjoiOWMzNTZiMWY2MWZjYTIxOTE5YmVhMTVlMWVhOTY0MWIiLCJsYXN0TG9naW5UaW1lIjoxNjE1MDQxNTE2MDAwLCJyb2xlSWRzIjpbIjEiXSwiY2xpZW50Q29kZSI6ImFkbWluIiwicG9zdENvZGUiOiIwMTIwMDAiLCJpc1N5c1VzZXIiOjAsInVzZXJUeXBlIjowLCJlbWFpbCI6IjE2MzQ1NjY2MDZAcXEuY29tIiwiZXhwIjoxNjE4NTg2ODU1LCJuYmYiOjE2MTg1ODUwNTV9.dOdD2aSP15E5uv_xt1owxfYHXK8EQEhpnuycv4qV-P8' token-field: data.accessToken token-name: jpower-auth token-position: header expires-in: 1800 expires-field: data.expiresIn expires-unit: seconds token-prefix: jpower token-prefix-field: data.tokenType token-suffix: '' token-suffix-field: '' token-delimiter: ' ' ~~~ 各个配置属性说明如下: | <p align = center>属性</p> | <p align = center>默认值</p> | <p align = center>说明值</p> | | --- | --- | --- | | jpower.monitor-restful.enable | false | 是否开启接口监控 | | jpower.monitor-restful.cron| 0 0 1 * * ? | 何时进行监控,cron表达式 | | jpower.monitor-restful.auth | | 监控服务鉴权信息配置属性。<br>与jpower.monitor-restful.routes.auth配置一样,优先级低。<br>属于所有服务通用的鉴权配置,如不配置jpower.monitor-restful.routes.auth则会自动按这里的配置进行接口鉴权 | | jpower.monitor-restful.routes | | 监控服务集合,该属性是数组 | | jpower.monitor-restful.routes.name | | 监控服务名称。<br>不可重复 | | jpower.monitor-restful.routes.location | | 服务地址,不支持https请求 | | jpower.monitor-restful.routes.url | /v2/api-docs | 服务提供的swagger接口地址或自定义提供的获取全部接口的地址 | | jpower.monitor-restful.routes.auth | | 监控服务鉴权信息配置属性。<br>与jpower.monitor-restful.auth配置一样,优先级高 | | jpower.monitor-restful.routes.auth.url | | 鉴权接口(登录接口) | | jpower.monitor-restful.routes.auth.method | get | 鉴权接口请求方式。<br>可选值:get、post、head | | jpower.monitor-restful.routes.auth.params | | 鉴权接口请求参数。<br>用=分割名称和值用&分割不同参数,例如:key1=value1&key2=value2。<br>如用户名密码在参数里则配置在这里 | | jpower.monitor-restful.routes.auth.headers | | 鉴权接口请求header头。<br>用=分割名称和值用&分割不同参数,例如:key1=value1&key2=value2。<br>如用户名密码在header头里则配置在这里 | | jpower.monitor-restful.routes.auth.code-field | code | 鉴权接口返回数据请求成功的字段。<br>例如鉴权接口返回数据为{"code":200,"data":{"token":"xxx"}},则这里配置code即可 | | jpower.monitor-restful.routes.auth.success-code | 200 | 标识接口返回成功的值。<br>例如鉴权接口返回数据为{"code":200,"data":{"token":"xxx"}},则这里配置200即可 | | jpower.monitor-restful.routes.auth.token | | 请求服务的token。<br>此配置优先级高于power.monitor-restful.routes.auth.token-field。<br>一旦配置此属性则所有有关请求鉴权接口相关的配置项都无用(可不配置)。 | | jpower.monitor-restful.routes.auth.token-field | | 鉴权接口返回数据token字段。<br>优先级低于jpower.monitor-restful.routes.auth.token。<br>例如鉴权接口返回数据为{"code":200,"data":{"token":"xxx"}},则这里配置data.token即可 | | jpower.monitor-restful.routes.auth.token-name | Authorization | 请求监控接口时的token参数名称 | | jpower.monitor-restful.routes.auth.token-position | header | 请求监控接口时token参数位置。<br>可选值:header、form、query | | jpower.monitor-restful.routes.auth.expires-in | 0 | token过期时间,0代表不过期。<br>优先级低于jpower.monitor-restful.routes.auth.expires-field | | jpower.monitor-restful.routes.auth.expires-field | | 鉴权接口返回数据中token过期时间字段。<br>例如鉴权接口返回数据为{"code":200,"data":{"token":"xxx","expiresIn":1800}},则这里配置data.expiresIn即可。<br>优先级高于jpower.monitor-restful.routes.auth.expires-in | | jpower.monitor-restful.routes.auth.expires-unit | seconds | token过期时间单位。<br>可选值:nanoseconds、microseconds、milliseconds、seconds、minutes、hours、days | | jpower.monitor-restful.routes.auth.token-prefix | | 请求监控接口时的token参数前缀。<br>优先级低于jpower.monitor-restful.routes.auth.token-prefix-field | | jpower.monitor-restful.routes.auth.token-prefix-field | | 鉴权接口返回数据的token前缀字段。<br>优先级高于jpower.monitor-restful.routes.auth.token-prefix。<br>配置方式和 jpower.monitor-restful.routes.auth.expires-field一样 | | jpower.monitor-restful.routes.auth.token-suffix | | 请求监控接口时的token参数后缀。<br>优先级低于jpower.monitor-restful.routes.auth.token-suffix-field | | jpower.monitor-restful.routes.auth.token-suffix-field | | 鉴权接口返回数据的token后缀字段。<br>优先级高于jpower.monitor-restful.routes.auth.token-suffix。<br>配置方式和 jpower.monitor-restful.routes.auth.expires-field一样 | | jpower.monitor-restful.routes.auth.token-delimiter | '空格符合' | token在拼接前缀和后缀时的分割字符 | >[info] `jpower.monitor-restful.cron`配置支持nacos的动态刷新,可在不重启服务的情况下修改监控周期 ## 监控JPower服务 1. 被监控的服务需集成swagger; maven集成common-swagger; ![](https://img.kancloud.cn/06/7b/067b5a97ed7d2964cbac30f789709613_545x141.png) 在配置文件中开启swagger ![](https://img.kancloud.cn/25/07/2507a5a9f79907629b8df6baeac431cd_286x116.png) jpower的common-swagger已经对外抛出了/all/restful接口 2. 被监控的服务需集成seata分布式事务;seata服务的部署可查看[seata文档/docker启动](./docker启动.md) maven集成common-transaction; ![](https://img.kancloud.cn/3f/2d/3f2d273b78cdfe41ed0443f1a1cdcd3d_619x153.png) 在配置文件中开启seata,并配置seata服务地址,配置方式如下: ~~~ jpower: seata: # 是否启用分布式事务 enabled: true # 开发环境 dev: seata: # seata服务地址 grouplist: 192.168.0.8:85 ~~~ 3. jpower-log配置参考如下; ~~~ jpower: seata: # 是否启用分布式事务(使用接口监控需开启) enabled: true monitor-restful: enable: false cron: 0 0 1 * * ? routes: - name: jpower-system location: http://localhost:80 url: /jpower-system/all/restful auth: url: /jpower-auth/auth/login method: post params: loginId=root&passWord=57ba172a6be125cca2f449826f9980ca&grantType=password headers: User-Type=web&Authorization=Basic Y2hhdDppSzFZRlE%3D code-field: code success-code: 200 token-field: data.accessToken token-name: jpower-auth token-position: header expires-field: data.expiresIn expires-unit: seconds token-prefix-field: data.tokenType # 开发环境 dev: seata: grouplist: 192.168.0.8:85 ~~~ 4. 启动jpower-log服务即可。 ## 监控第三方服务 1. 三方服务需自行集成swagger,并保证/v2/api-docs接口可正常访问。或集成jpower的common-swagger模块实现swagger功能,集成common-swagger方式如下: maven集成common-swagger; ![](https://img.kancloud.cn/06/7b/067b5a97ed7d2964cbac30f789709613_545x141.png) 在配置文件中加入如下配置: ~~~ spring: profiles: #开发环境 active: dev application: #项目名称 name: other knife4j: enable: true swagger: base-package: #项目包的顶级路径 - com.test ~~~ 2. 三方服务需集成seata分布式事务; maven继承seata; ~~~ <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-seata</artifactId> <version>2.2.5.RELEASE</version> </dependency> <dependency> <groupId>io.seata</groupId> <artifactId>seata-spring-boot-starter</artifactId> <version>1.4.1</version> </dependency> ~~~ 在配置文件中加入如下配置: ~~~ seata: enabled: true tx-service-group: other-group service: grouplist: #seata服务地址 default: 192.168.0.8:85 vgroup-mapping: other-group: default ~~~ seata的部署可参考[seata文档/docker启动](./docker启动.md) 3. jpower-log配置参考如下; ~~~ jpower: seata: # 是否启用分布式事务 enabled: true monitor-restful: enable: true cron: 0 0 1 * * ? routes: - name: jpower-system location: http://localhost:80 #继承jpower的common-swagger模块这里写/all/restful,自行集成的swagger这里写/v2/api-docs。 url: /all/restful auth: url: 【登录接口】 method: post params: userName=root&passWord=123456 code-field: code success-code: 200 token-field: data.accessToken token-name: auth token-position: header expires-field: data.expiresIn expires-unit: seconds dev: #seata服务地址 seata: grouplist: 192.168.0.8:85 ~~~ 4. 启动jpower-log服务即可。 >[info] 如果三方服务不想集成swagger,可自行实现获取全部接口信息的web接口,只要返回格式和swagger的/v2/api-docs接口一致即可,自行实现的接口只需修改jpower.monitor-restful.routes.url配置为自己的接口地址即可