## 说明
* 在日常开发运维中,我们经常会碰到各种原因导致的接口服务异常,尤其是数据导致的接口返回异常。还有特殊用户要时刻保证服务接口正常,不能等客户触发异常后再去修复等场景。
* 针对这种情况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配置为自己的接口地址即可
- 序言
- 开发环境准备
- 环境要求
- 环境安装
- 基础环境安装
- Nacos安装
- Sentinel安装
- 插件安装
- 导入工程
- 运行工程
- 工程测试
- JPower特性
- 系统启动器
- 多终端令牌认证
- 系统鉴权
- 鉴权API
- 鉴权配置
- API权限配置
- 接口放行配置
- 数据权限
- redis缓存
- 动态网关
- 聚合文档
- SaaS多租户
- 概念
- 使用
- Xss防注入
- 日志记录
- 操作日志&错误日志
- SQL打印
- feign请求日志&配置
- gateway日志
- 服务日志打印
- 导入导出
- 字典查询
- 系统文件上传下载
- 接口监控
- 代码生成器
- 配置文件共享
- Mybatis过滤器
- 配置说明
- 高级实战
- nacos动态配置
- Seata分布式事务
- 简介
- docker启动
- 微服务配置
- 微服务远程调用
- 声明式服务调用 Feign
- 熔断机制 Sentinel
- sentinel流控
- 简介
- 微服务配置
- 配置nacos对接
- APM监控&链路追踪
- 简介
- 安装
- 微服务接入
- SpringBootAdmin监控
- ELK分布式日志追踪系统
- ELK简介
- ELK一键部署
- 微服务日志对接ELK
- JPower-Chat
- 配置说明
- 生产部署
- docker部署
- docker安装
- docker-compose安装
- harbor安装
- 部署步骤
- 版本升级
- 1.0.1升级到2.0.0
- 2.0.0升级到2.0.2
- 2.0.2升级2.1.0
- 2.1.0升级到2.1.1
- 2.1.1升级到2.1.2
- 2.1.2升级到2.1.4