## 說明
* 在日常開發運維中,我們經常會碰到各種原因導致的接口服務異常,尤其是數據導致的接口返回異常。還有特殊用戶要時刻保證服務接口正常,不能等客戶觸發異常后再去修復等場景。
* 針對這種情況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;

在配置文件中開啟swagger

jpower的common-swagger已經對外拋出了/all/restful接口
2. 被監控的服務需集成seata分布式事務;seata服務的部署可查看[seata文檔/docker啟動](./docker啟動.md)
maven集成common-transaction;

在配置文件中開啟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;

在配置文件中加入如下配置:
~~~
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