安裝
git clone https://github.com/alibaba/jvm-sandbox-repeater.git
cd jvm-sandbox-repeater/bin
./bootstrap.sh
執行完成后應該會在用戶根目錄cd ~
生成一個 sandbox 目錄,並且會啟動一個 SpringBoot (Demo)應用(啟動失敗也無所謂,直接用自己的Java應用更方便)
也可以直接執行curl -s http://sandbox-ecological.oss-cn-hangzhou.aliyuncs.com/install-repeater.sh | sh
僅安裝 sandbox,不部署 Demo 應用
配置
模板
{
"degrade": false,
"exceptionThreshold": 1000,
"httpEntrancePatterns": [
"^/regress/.*$"
],
"javaEntranceBehaviors": [
{
"classPattern": "com.alibaba.repeater.console.service.impl.RegressServiceImpl",
"includeSubClasses": false,
"methodPatterns": [
"getRegress"
]
}
],
"javaSubInvokeBehaviors": [
{
"classPattern": "com.alibaba.repeater.console.service.impl.RegressServiceImpl",
"includeSubClasses": false,
"methodPatterns": [
"getRegressInner"
]
},
{
"classPattern": "com.alibaba.repeater.console.service.impl.RegressServiceImpl",
"includeSubClasses": false,
"methodPatterns": [
"findPartner"
]
},
{
"classPattern": "com.alibaba.repeater.console.service.impl.RegressServiceImpl",
"includeSubClasses": false,
"methodPatterns": [
"slogan"
]
}
],
"pluginIdentities": [
"http",
"java-entrance",
"java-subInvoke",
"mybatis",
"ibatis",
"dubbo-provider",
"dubbo-consumer"
],
"repeatIdentities": [
"java",
"http"
],
"sampleRate": 10000,
"useTtl": true
}
說明
配置項 | 釋義 |
---|---|
useTtl | 是否開啟ttl線程上下文切換,開啟之后,才能將並發線程中發生的子調用記錄下來,否則無法錄制到並發子線程的子調用信息 |
degrade | 是否執行錄制降級策略,開啟之后,不進行錄制,只處理回放請求 |
exceptionThreshold | 異常發生閾值;默認1000 |
sampleRate | 采樣率;最小力度萬分之一;默認值:10000 |
pluginsPath | 插件地址 |
httpEntrancePatterns | 由於HTTP接口的量太大(前后端未分離的情況可能還有靜態資源)因此必須走白名單匹配模式才錄制 |
javaEntranceBehaviors | java入口插件動態增強的行為 |
javaSubInvokeBehaviors | java子調用插件動態增強的行為 |
pluginIdentities | 需要啟動的插件 |
repeatIdentities | 回放器插件 |
示例
該配置實現了對/perf
路徑下接口的錄制;
mock了JPA中的兩個mongo查詢方法;
cat ~/.sandbox-module/cfg/repeater-config.json
{
"degrade": false,
"exceptionThreshold": 1000,
"httpEntrancePatterns": [
"^/perf/.*$"
],
"javaEntranceBehaviors": [
{
"classPattern": "com.test.moudle.perf.service.PerfReportService",
"includeSubClasses": true,
"methodPatterns": [
"getReportDetail"
]
}
],
"javaSubInvokeBehaviors": [
{
"classPattern": "com.test.moudle.perf.repository.PerfReportBaseRepository",
"includeSubClasses": true,
"methodPatterns": [
"findAllByReportId"
]
},
{
"classPattern": "com.test.moudle.perf.repository.PerfReportRepository",
"includeSubClasses": true,
"methodPatterns": [
"findById"
]
}
],
"pluginIdentities": [
"http",
"java-entrance",
"java-subInvoke"
],
"repeatIdentities": [
"java",
"http"
],
"sampleRate": 10000,
"useTtl": true
}