先來看官網:https://news.shulie.io/
他們還有個文檔地址:https://docs.shulie.io/docs/opensource/opensource-1d40ib39m90bu
然而根據文檔卻不是那么好部署的:
接下來我們根據文檔一步步的操作:
簡介:Takin是基於Java的開源系統,可以在無業務代碼侵入的情況下,嵌入到各個應用程序節點,實現生產環境的全鏈路性能測試,適用於復雜的微服務架構系統。
GitHub開源地址如下:https://github.com/shulieTech/Takin
術語表
業務活動
業務活動指的就是單接口的鏈路。在壓測場景里可以對業務活動發起壓測。
影子庫表
影子表:原始表的副本。影子表前綴通常以PT_開頭,作用是存儲壓測生產的數據,目的是做數據隔離確保真實業務數據的安全。
影子庫: 同影子表,只是以庫的維度隔離。
方案選擇:
①影子庫方案:不清楚表的調用情況,就從原始庫copy一份,不用去梳理庫里表的詳細情況
②影子表方案:清楚表的調用情況,那就在同庫里建影子表
白名單
在客戶端應用里,將對外調用的接口加入到白名單,表示允許壓測流量通過。
擋板
顧名思義,阻止/限制作用。擋板可以將請求攔截,並返回預設好的結果,模擬正常或異常的請求結果。
SLA
Service-Level Agreement的縮寫,意思是服務等級協議。在全鏈路產品中,通過SLA可以保障系統負載的底線,異常指標規則的定義。當壓測過程中,觸發SLA熔斷指標,壓測將自動停止,以保障生產安全。
指標統計
並發數
同時發起業務操作的用戶數,在壓測中也指虛擬用戶數(Virtual User)。
TPS
Transaction Per Second, 每秒事務數, 是衡量系統性能的一個非常重要的指標。
業務活動詳情統計
TPS取當前節點最近5分鍾的平均值,包含壓測流量+業務流量。
壓測統計
TPS當前壓測業務活動中,取壓測期間的平均值,每 10 秒刷新一次。
RT
Response Time,響應時間,執行一個請求從開始到最后收到響應數據所花費的總體時間。
業務活動詳情統計
RT取當前節點最近5分鍾的平均值,包含壓測流量+業務流量。RT取當前節點最近5分鍾的平均值,包含壓測流量+業務流量。
壓測統計
RT當前壓測業務活動中,取壓測期間的平均值,每 10 秒刷新一次。
成功率
對於請求:一個請求返回200 狀態的次數/總請求次數。
對於鏈路內部節點:上游節點調用下游節點成功次數/總次數。
業務活動詳情統計
取最近 24 小時的累加值,包含壓測流量+業務流量。
壓測統計
取壓測期間的平均值,每 5 秒刷新一次。
SA
RT的達標率,請求中RT達到目標值的百分比。
壓測統計
取壓測期間的平均值,每 5 秒刷新一次。
前期准備工作
業務場景梳理
確定全鏈路壓測的業務范圍,根據業務范圍接口,確定應用維度的系統架構,即確定需要安裝LinkAgent的應用范圍。梳理清楚各場景的組件依賴、第三方依賴,為后續聯調工作做准備。
准備壓測腳本
根據業務場景編寫JMeter壓測腳本
測試環境聯調
安裝LinkAgent
相關應用全部都需要安裝探針
鏈路梳理
使用正常流量做單接口、復合場景的測試、回歸,確保業務正常;研發確認相關調用鏈是否正常、完整;
通過LinkAgent自動梳理相關應用的依賴、應用間調用關系、依賴的DB、緩存、RPC、消息等中間件。影子數據准備
確定表關聯字段、偏移規則、脫敏規則;
DBA建庫建表並依據規則准備數據庫鋪底數據壓測流量聯調
確定白名單、影子規則、Mock規則並配置到系統中;
使用壓測流量做單接口、復合場景的測試,確保業務正常;
確認相關調用鏈是否正常、完整,確認數據是否全部落入影子庫表。生產環境驗證
安裝LinkAgent
相關應用全部都需要安裝探針
影子數據准備
DBA建庫建表並依據規則准備數據庫鋪底數據
壓測流量聯調
將白名單、影子規則、Mock規則遷移到生產環境;
使用小批量壓測流量做單接口、復合場景的測試,確保業務正常;
確認相關調用鏈是否正常、完整,確認數據是否全部落入影子庫表。生產環境壓測演練
演練前准備
確定業務場景的壓測目標;
進行業務場景的施壓配置;
確定業務場景的SLA熔斷機制。壓測演練
壓測演練;
演練過程監控。壓測報告分析
獲取壓測報告,進行壓測報告分析、性能分析
環境要求:最低8GB的內存,20GB的硬盤
鏡像大小:2.1GB在使用Takin-web鏡像的前提條件是必須有安裝docker,還不會安裝docker的同學請自行百度(在公司的同學,可以請運維幫忙部署一下)。
裝完docker之后只需要執行兩步即可快速使用我們的takin-web。拉取takin鏡像:docker pull registry.cn-hangzhou.aliyuncs.com/shulie-takin/takin:v1.0.1
啟動takin容器:docker run -e APPIP=192.168.1.103 -p 80:80 -p 2181:2181 -p 29900-29999:29900-29999 -p 3306:3306 -p 6379:6379 registry.cn-hangzhou.aliyuncs.com/shulie-takin/takin:v1.0.1
參數說明如下:
-e:添加系統參數。
-d:后台啟動,如果不想查看部署日志可以在-e前面添加-d參數。APPIP:是運行容器所在的宿主機IP。
默認surge-deploy是讀取docker網卡的ip進行注冊到zookeeper上的,這樣會導致agent無法與容器中的surge-deploy進行通信,通過指定APPIP可以將宿主機的IP注冊到zookeeper上,這樣agent就可以在容器外通過宿主機IP與容器內的surge-deploy應用進行通信。-p:需要開放的端口
前面的端口表示宿主機需要開放的端口,后面的表示容器中需要開放的端口。例如80:80指就是用宿主機的80端口映射到容器中的80端口。當然,你也可以使用其它的端口來與容器內的80端口進行映射,例如70:80,這樣也是可以的。
但是,在訪問的時候你就需要把70這個端口加上,例如使用2000:2181 agent在連接zookeeper的時候就需要把端口改成2000。其中80,2181,29900-29999這些端口是必須要開放的。
如果你想連接系統的redis,mysql你還可以選開放6379和3306端口。安裝tips
Tips:整個安裝部署過程大概2分鍾左右,mysql比較大需要動態編譯因此耗時稍微久一點。
部署成功之后如果出現:
錯誤代碼:502 ,Bad Gateway/錯誤的網關!
這是因為容器內的takin-web還未完全啟動完成,請再等一下,刷新頁面就好了。
如果映射的是81端口需要改index.html文件
docker ps
docker ps -a
docke exec -it 容器id /bin/bash
/data/apps/dist/web
vi index.html
DEMO應用環境准備
開源地址
https://github.com/shulieTech/EasyDemo
下載demo
進入應用服務器(cd /opt目錄),准備DEMO應用:
curl -O https://install-pkg.oss-cn-hangzhou.aliyuncs.com/demo/easydemo_0712.tgz
解壓:
tar xvf easydemo_0712.tgz
配置更新
easydemo-gateway
app/gateway/application.properties
無需更改easydemo-usercenter
app/user/application.properties
無需更改更新數據庫配置
在
demoEnv.conf
里更新配置配置demo應用的數據庫連接
將
demoEnv.conf
里的數據庫相關配置更改為您的數據源地址MYSQLURL=192.168.1.103 PORT=3306 USERNAME=root PASSWD=shulie@2020 需要有java環境和 tools.jar(見centos7下java安裝https://www.cnblogs.com/zhang-da/p/13027872.html)
啟動demo
./demoInstall.sh
如果這里報錯 line 5:create_table_sql:no such file or directory
是因為這個腳本里有mysql命令去創建表,所以要么本機裝個mysql客戶端,要么修改一下腳本,只啟動應用,單獨去mysql那邊建下表linkAgent接入
agent接入到應用后,需要與壓測控制台進行數據傳輸。二者的網絡需要打通。
linkAgent開源地址
https://github.com/shulieTech/LinkAgent
linkAgent下載
https://github.com/shulieTech/LinkAgent/blob/main/doc/QuickStart.md
進入opt目錄curl -O https://install-pkg.oss-cn-hangzhou.aliyuncs.com/manual/agent-opensource.zip #沒有unzip的可以使用yum源或者其他源安裝一下 unzip agent-opensource.zip mv agent-opensource ./simulator-agent
最后的agent目錄為:opt/simulator-agent
接入到demo應用
解壓到應用服務器
配置更新
agent.properties
vi simulator-agent/config/agent.properties
#配置zookeeper連接 請填寫takin部署的docker宿主機的ip simulator.zk.servers=宿主機ip:2181 # tro web url 請填寫takin部署的docker宿主機的ip tro.web.url=http://宿主機ip/takin-web
simulator.properties
vi simulator-agent/agent/simulator/config/simulator.properties
# pradar zk server path,如果是使用docker鏡像的控制台,請使用/config/log/pradar/cloud/server pradar.server.zk.path=/config/log/pradar/cloud/server
demo應用linkAgent啟動方式
更改啟動參數
原生啟動命令:
gateway.sh
start(){ nohup java -jar easydemo-gateway.jar >> gateway.log 2>&1 & }
linkAgent啟動方式
gatewayLinkAgent.sh
start(){ DIR="/opt" JAVA_OPTS="${JAVA_OPTS} -Xbootclasspath/a:$JAVA_HOME/lib/tools.jar" JAVA_OPTS="${JAVA_OPTS} -javaagent:/${DIR}/simulator-agent/simulator-launcher-instrument.jar" JAVA_OPTS="${JAVA_OPTS} -javaagent:/${DIR}/simulator-agent/bootstrap/transmittable-thread-local-2.12.1.jar" JAVA_OPTS="${JAVA_OPTS} -Dsimulator.delay=10" JAVA_OPTS="${JAVA_OPTS} -Dsimulator.unit=SECONDS" JAVA_OPTS="${JAVA_OPTS} -Dpradar.project.name=easydemo-gateway-1.0.0" JAVA_OPTS="${JAVA_OPTS} -Djdk.attach.allowAttachSelf=true" nohup java ${JAVA_OPTS} -XX:+PrintGCTimeStamps -Xloggc:gc.log -jar easydemo-gateway.jar >> gateway.log 2>&1 & }
其中
DIR請填寫探針包解壓的目錄
pradar.project.name請填寫業務應用名稱,全局唯一也可以修改成下面的
start(){
DIR="/opt"
JAVA_OPTS="𝐽𝐴𝑉𝐴𝑂𝑃𝑇𝑆−𝑋𝑏𝑜𝑜𝑡𝑐𝑙𝑎𝑠𝑠𝑝𝑎𝑡ℎ/𝑎:/𝑢𝑠𝑟/𝑙𝑜𝑐𝑎𝑙/𝑗𝑑𝑘1.8.0102/𝑙𝑖𝑏/𝑡𝑜𝑜𝑙𝑠.𝑗𝑎𝑟"𝐽𝐴𝑉𝐴𝑂𝑃𝑇𝑆="JAVAOPTS−Xbootclasspath/a:/usr/local/jdk1.8.0102/lib/tools.jar"JAVAOPTS="{JAVA_OPTS} -javaagent:/𝐷𝐼𝑅/𝑠𝑖𝑚𝑢𝑙𝑎𝑡𝑜𝑟−𝑎𝑔𝑒𝑛𝑡/𝑠𝑖𝑚𝑢𝑙𝑎𝑡𝑜𝑟−𝑙𝑎𝑢𝑛𝑐ℎ𝑒𝑟−𝑖𝑛𝑠𝑡𝑟𝑢𝑚𝑒𝑛𝑡.𝑗𝑎𝑟"𝐽𝐴𝑉𝐴𝑂𝑃𝑇𝑆="DIR/simulator−agent/simulator−launcher−instrument.jar"JAVAOPTS="{JAVA_OPTS} -javaagent:/𝐷𝐼𝑅/𝑠𝑖𝑚𝑢𝑙𝑎𝑡𝑜𝑟−𝑎𝑔𝑒𝑛𝑡/𝑏𝑜𝑜𝑡𝑠𝑡𝑟𝑎𝑝/𝑡𝑟𝑎𝑛𝑠𝑚𝑖𝑡𝑡𝑎𝑏𝑙𝑒−𝑡ℎ𝑟𝑒𝑎𝑑−𝑙𝑜𝑐𝑎𝑙−2.12.1.𝑗𝑎𝑟"𝐽𝐴𝑉𝐴𝑂𝑃𝑇𝑆="DIR/simulator−agent/bootstrap/transmittable−thread−local−2.12.1.jar"JAVAOPTS="{JAVA_OPTS} -Dsimulator.delay=10"
JAVA_OPTS="𝐽𝐴𝑉𝐴𝑂𝑃𝑇𝑆−𝐷𝑠𝑖𝑚𝑢𝑙𝑎𝑡𝑜𝑟.𝑢𝑛𝑖𝑡=𝑆𝐸𝐶𝑂𝑁𝐷𝑆"𝐽𝐴𝑉𝐴𝑂𝑃𝑇𝑆="JAVAOPTS−Dsimulator.unit=SECONDS"JAVAOPTS="{JAVA_OPTS} -Dpradar.project.name=easydemo-gateway-1.0.0"
JAVA_OPTS="𝐽𝐴𝑉𝐴𝑂𝑃𝑇𝑆−𝐷𝑗𝑑𝑘.𝑎𝑡𝑡𝑎𝑐ℎ.𝑎𝑙𝑙𝑜𝑤𝐴𝑡𝑡𝑎𝑐ℎ𝑆𝑒𝑙𝑓=𝑡𝑟𝑢𝑒"𝑛𝑜ℎ𝑢𝑝𝑗𝑎𝑣𝑎JAVAOPTS−Djdk.attach.allowAttachSelf=true"nohupjava{JAVA_OPTS} -XX:+PrintGCTimeStamps -Xloggc:gc.log -jar easydemo-gateway.jar >> gateway.log 2>&1 &
}同理更新
usercenter
應用的啟動參數:usercenterLinkAgent.sh
start(){ DIR="/opt" JAVA_OPTS="${JAVA_OPTS} -Xbootclasspath/a:$JAVA_HOME/lib/tools.jar" JAVA_OPTS="${JAVA_OPTS} -javaagent:/${DIR}/simulator-agent/simulator-launcher-instrument.jar" JAVA_OPTS="${JAVA_OPTS} -javaagent:/${DIR}/simulator-agent/bootstrap/transmittable-thread-local-2.12.1.jar" JAVA_OPTS="${JAVA_OPTS} -Dsimulator.delay=10" JAVA_OPTS="${JAVA_OPTS} -Dsimulator.unit=SECONDS" JAVA_OPTS="${JAVA_OPTS} -Dpradar.project.name=easydemo-usercenter-1.0.0" JAVA_OPTS="${JAVA_OPTS} -Djdk.attach.allowAttachSelf=true" nohup java ${JAVA_OPTS} -XX:+PrintGCTimeStamps -Xloggc:gc.log -jar easydemo-usercenter.jar >> usercenter.log 2>&1 & }
也可以修改成下面的
start(){
DIR="/opt"
JAVA_OPTS="𝐽𝐴𝑉𝐴𝑂𝑃𝑇𝑆−𝑋𝑏𝑜𝑜𝑡𝑐𝑙𝑎𝑠𝑠𝑝𝑎𝑡ℎ/𝑎:/𝑢𝑠𝑟/𝑙𝑜𝑐𝑎𝑙/𝑗𝑑𝑘1.8.0102/𝑙𝑖𝑏/𝑡𝑜𝑜𝑙𝑠.𝑗𝑎𝑟"𝐽𝐴𝑉𝐴𝑂𝑃𝑇𝑆="JAVAOPTS−Xbootclasspath/a:/usr/local/jdk1.8.0102/lib/tools.jar"JAVAOPTS="{JAVA_OPTS} -javaagent:/𝐷𝐼𝑅/𝑠𝑖𝑚𝑢𝑙𝑎𝑡𝑜𝑟−𝑎𝑔𝑒𝑛𝑡/𝑠𝑖𝑚𝑢𝑙𝑎𝑡𝑜𝑟−𝑙𝑎𝑢𝑛𝑐ℎ𝑒𝑟−𝑖𝑛𝑠𝑡𝑟𝑢𝑚𝑒𝑛𝑡.𝑗𝑎𝑟"𝐽𝐴𝑉𝐴𝑂𝑃𝑇𝑆="DIR/simulator−agent/simulator−launcher−instrument.jar"JAVAOPTS="{JAVA_OPTS} -javaagent:/𝐷𝐼𝑅/𝑠𝑖𝑚𝑢𝑙𝑎𝑡𝑜𝑟−𝑎𝑔𝑒𝑛𝑡/𝑏𝑜𝑜𝑡𝑠𝑡𝑟𝑎𝑝/𝑡𝑟𝑎𝑛𝑠𝑚𝑖𝑡𝑡𝑎𝑏𝑙𝑒−𝑡ℎ𝑟𝑒𝑎𝑑−𝑙𝑜𝑐𝑎𝑙−2.12.1.𝑗𝑎𝑟"𝐽𝐴𝑉𝐴𝑂𝑃𝑇𝑆="DIR/simulator−agent/bootstrap/transmittable−thread−local−2.12.1.jar"JAVAOPTS="{JAVA_OPTS} -Dsimulator.delay=10"
JAVA_OPTS="𝐽𝐴𝑉𝐴𝑂𝑃𝑇𝑆−𝐷𝑠𝑖𝑚𝑢𝑙𝑎𝑡𝑜𝑟.𝑢𝑛𝑖𝑡=𝑆𝐸𝐶𝑂𝑁𝐷𝑆"𝐽𝐴𝑉𝐴𝑂𝑃𝑇𝑆="JAVAOPTS−Dsimulator.unit=SECONDS"JAVAOPTS="{JAVA_OPTS} -Dpradar.project.name=easydemo-gateway-1.0.0"
JAVA_OPTS="𝐽𝐴𝑉𝐴𝑂𝑃𝑇𝑆−𝐷𝑗𝑑𝑘.𝑎𝑡𝑡𝑎𝑐ℎ.𝑎𝑙𝑙𝑜𝑤𝐴𝑡𝑡𝑎𝑐ℎ𝑆𝑒𝑙𝑓=𝑡𝑟𝑢𝑒"𝑛𝑜ℎ𝑢𝑝𝑗𝑎𝑣𝑎JAVAOPTS−Djdk.attach.allowAttachSelf=true"nohupjava{JAVA_OPTS} -XX:+PrintGCTimeStamps -Xloggc:gc.log -jar easydemo-gateway.jar >> gateway.log 2>&1 &
}重啟應用
./demoInstallLinkAgent.sh
驗證
進入壓測控制台:http://192.168.1.220/tro/#/appManage或http://192.168.1.103/web/#/dashboard
第一個坑:應用管理里沒有識別到應用
問題現象:
如圖,教程接入后控制台沒有識別到應用
排查思路:
1.應用沒有啟動起來
2.應用掛載agent失敗應用沒有啟動起來
情景1:
看一下應用是否啟動起來了
/root/easydemo/app/gateway/gateway.log
這個問題是沒找到agent包
去看下simulator的包路徑
發現路徑配置錯了,默認配置是如下的配置:
修改路徑后問題解決情景2:
應用日志沒報錯
agent日志報錯了
去看下應用的agent啟動日志
/app/logs_pradar/easydemo-gateway-1.0.0/simulator.log
是lib下沒有tools.jar,重裝jdk ,openjdk找不到tools.jar 換成oracle的jdk 問題解決第二個坑:探針管理頁面顯示探針狀態為未安裝
問題現象
或者排查思路
- 首先登錄容器
- 進入zk bin目錄,使用zkCLi.sh 連接zk
sh /data/apache-zookeeper-3.5.9-bin/bin/zkCli.sh
- 查詢zk中的數據,如下圖,可以查詢出以下內容
get /config/log/pradar/status/應用名/實例IP-PID
- 如果其中agentStatus字段值不為INSTALLED,查看errorMsg字段,根據內容排查相關問題;如果為INSTALLED,登錄amdb數據庫執行以下腳本:
alter table t_amdb_app_instance_status convert to character set utf8mb4;
- 重啟對應應用並再次檢查探針管理中的探針狀態
- 問題應當得到解決
確定壓測鏈路
確定鏈路范圍
確定一條要壓測的鏈路,這里選用了
easydemo
:
查看easydemo
里的HTTP接口,選擇帶有寫入操作的接口curl --location --request POST 'http://192.168.1.203:28881/gateway/api/register'
進行壓測。鏈路梳理
自動鏈路梳理前,請先用curl或者postman發起一些流量。
curl --location --request POST 'http://192.168.1.203:28881/gateway/api/register' --header 'Content-Type: application/json' --data '{"mobile":"15558172233","password":"123456","nickName":"name-1000033","email":"1000000033@qq.com","birthDay":"2000-11-05","provinceName":"浙江","cityName":"杭州"}'
發起流量請求后,系統會自動進行鏈路梳理,梳理出應用的服務,以及服務經過的應用、中間件等數據信息
查詢后台數據庫
字段含義
第三個坑:新增業務活動-無入口
問題現象
新增業務活動,選擇應用后,服務下拉框無數據
排查思路
首先查詢amdb數據庫入口表,根據應用名稱和服務名稱查詢庫中是否有記錄
select * from t_amdb_pradar_link_entrance where app_name = '' and service_name = '';
如果沒有找到,檢查surge-deploy任務是否正常啟動
ps -ef | grep surge-deploy
如果沒有啟動,需將任務啟動,並重新發起流量。
等待2分鍾后再次嘗試新增業務活動,應在下拉框中看到對應接口。如依舊無數據,此時登錄amdb數據庫,使用以下sql查詢表中是否含有最新流量數據:select * from t_trace_all where appName = '你的目標應用' and serviceName = '你的目標url' order by startDate desc;
如果沒有最新流量數據,可以參考 https://docs.shulie.io/docs/opensource/cjwt_08 此排查手冊確認surge-deploy是否正常對外服務。
如zk中服務節點正常,通過以下命令查看surge任務運行日志
vi /data/surge.out
如含有以下報錯:
代表使用的探針包存在問題,可以使用以下探針包替換后重新使用:
https://install-pkg.oss-cn-hangzhou.aliyuncs.com/manual/agent-opensource.zip如以上排查步驟都不能解決您的問題,請到github倉庫提交一個issue並附上以上排查步驟的排查結果,如:
1.t_amdb_pradar_link_entrance表中有無數據
2.surge-deploy任務是否正常啟動
3.t_trace_all表中是否有最新流量數據也可以在黑窗口里面發請求
新增業務活動
進入「仿真平台->鏈路梳理->業務活動」,點擊「新增業務活動」
數據隔離&數據安全配置
–header “User-Agent:PerfomanceTest” 注意,在header帶上了壓測標記,以區分壓測流量和正式流量。若傳入了壓測標記,linkAgent會進行數據隔離的處理。
遠程調用-白名單配置
白名單是壓測流量是否可以調用某個接口的校驗機制,可有效防止壓測流量泄露至未接入的應用
1加入白名單:加入白名單代表壓測流量可調用該接口
2取消白名單:取消白名單代表壓測流量不可調用該接口
若未添加白名單,發起壓測流量時,會報錯進入
easydemo-gateway-1.0.0
應用詳情-遠程調用對業務活動發起流量后,系統會自動梳理業務活動流經的應用的對外調用請求,以及提供了該接口名稱的服務端應用。
將/user-center/user/add
配置為白名單影子庫表
對於有寫操作的接口,若未配置影子庫表,發起壓測流量時,會報錯:提示未進行影子庫表的配置。
這里我們使用影子表模式
。線下建影子表
--影子表模式 use easydemo_db; CREATE TABLE `PT_t_user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `mobile` varchar(16) NOT NULL COMMENT '手機號', `password` varchar(16) NOT NULL COMMENT '登錄密碼', `nick_name` varchar(32) DEFAULT NULL COMMENT '昵稱', `email` varchar(32) DEFAULT NULL COMMENT '郵箱', `birth_day` varchar(16) DEFAULT NULL COMMENT '生日', `province_name` varchar(64) DEFAULT NULL COMMENT '省', `city_name` varchar(64) DEFAULT NULL COMMENT '市', `create_time` datetime DEFAULT CURRENT_TIMESTAMP, `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
壓測平台配置影子表
進入
easydemo-usercenter-1.0.0
應用詳情,配置影子表。
數據庫URL:填寫應用使用的數據源地址
jdbc:mysql://192.168.1.173:3306/easydemo_db
影子表:填寫接口用到的表,加上PT_
前綴數據隔離驗證
數據隔離和安全隔離都配置完成后,可發起壓測流量進行驗證
./curl.sh
壓測准備
JMeter腳本
對
curl --location --request POST 'http://192.168.1.203:28881/gateway/api/register'
准備壓測JMeter腳本注:需使用並發線程組
壓測流量文件
若要進行大流量的壓測,先准備好數據csv文件,並上傳到JMeter腳本
上傳腳本到壓測平台
進入壓測平台->腳本管理->新增腳本
注意:JMeter腳本、jar包、在JMeter里的【csv data set config】/【csv數據文件設置】上傳的csv文件,請上傳到上面的文件框;
上傳:附注:JMeter腳本中的url若使用了附件類型的參數,如圖片等,請上傳到下面的附件文件框
文件將與JMeter腳本存儲在同一目錄下,
所以JMeter腳本中的文件調用路徑僅使用文件名即可創建壓測場景
新增場景
進入壓測平台->壓測場景->新增場景
壓測SLA
在生產環境做壓測時,為了確保業務應用不會受到影響,可設置某些指標出現異常結果時進行報警提醒或立即終止壓測,
可選擇全部或單個業務活動;
選擇指標,可從TPS、RT、成功率、SA中選擇;
設置觸發條件和閾值;
點擊➕可添加多條SLA規則;
保存完壓測場景之后,就可以在列表點擊啟動壓測了。壓測
在壓測場景列表選擇壓測場景,啟動壓測
壓測實況
在壓測過程中,需要實時關注壓測的指標變化情況,以便於能對壓測做出實時性的判斷和應急操作。壓測實況正是在壓測過程中對壓測鏈路進行實時監控的可視化界面,壓測實況的全部數據都會保存在壓測報告中,也可以手動停止壓測,直接到壓測報告中查看完整數據。
壓測報告
在壓測結束后,系統會自動生成一份壓測報告,將本次壓測所產生的數據進行記錄和存檔,可隨時通過查看報告來回溯壓測時的性能指標變化情況,分析性能瓶頸與定位定能問題。
可通過壓測場景-查看報告按鈕查看,也可以通過菜單路徑:壓測管理>壓測報告查看。
報告詳情頁包括:壓測結果總覽、問題分析、壓測概覽、壓測明細、容量水位、告警明細、請求流量明細等。
壓測結果總覽
壓測結論和結果指標:壓測是否通過、具體的告警數量、請求總數、最大並發、TPS、平均RT、成功率、SA;
壓測概覽
可查看壓測全局或單個業務活動的TPS、RT、成功率、SA的指標趨勢。
壓測明細
可查看各個業務活動的具體壓測明細指標,包括請求數、平均TPS的實際與目標值、平均RT的實際與目標值、請求成功率的實際與目標值、SA的目標與實際值、最大TPS、最大RT、最小RT;
告警明細
壓測過程中根據SLA設定觸發的壓測告警信息
請求流量明細
記錄壓測過程中所有的具體請求明細數據,每個請求均擁有唯一的TraceID標識,可點擊請求詳情查看具體的請求采樣日志,包括調用的接口服務、所屬的應用、攜帶的參數、請求狀態與本次請求的時間軸,日志信息保留3天,過期會自動清除;
選擇耗時較長的請求,查看鏈路調用詳情
4、查看所有的容器:
docker ps
docker ps -a
查看鏡像命令
docker images顯示鏡像的id
docker images -q
刪除鏡像
docker rmi name|id
刪除全部鏡像
docker rmi `docker images -q`
5、docker exec -it 容器id /bin/bash
6、查看日志:
cd apps/takin-web/
7、cd logs/takin-web/
8、tail -200f service.log
9、docker 默認地址: 192.168.99.100 默認賬號: docker 默認密碼: tcuser
10、移除所有停止狀態的容器
docker container prune
11、刪除容器
docker rm # 默認只能刪除未運行的容器
-f 強制刪除
12、停止容器:
docker stop id/名字
13、啟動docker容器
docker start 容器id或者容器名稱
docker restart id 重啟之前運行過/停止的容器
docker ps -a docker restart id
14、
-- 業務庫
CREATE DATABASE IF NOT EXISTS easydemo_db DEFAULT CHARSET utf8 COLLATE utf8_general_ci;USE easydemo_db;
CREATE TABLE `t_user` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`mobile` VARCHAR(16) NOT NULL COMMENT '手機號',
`password` VARCHAR(16) NOT NULL COMMENT '登錄密碼',
`nick_name` VARCHAR(32) DEFAULT NULL COMMENT '昵稱',
`email` VARCHAR(32) DEFAULT NULL COMMENT '郵箱',
`birth_day` VARCHAR(16) DEFAULT NULL COMMENT '生日',
`province_name` VARCHAR(64) DEFAULT NULL COMMENT '省',
`city_name` VARCHAR(64) DEFAULT NULL COMMENT '市',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;SELECT * FROM t_user
CREATE TABLE `pt_t_user` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`mobile` VARCHAR(16) NOT NULL COMMENT '手機號',
`password` VARCHAR(16) NOT NULL COMMENT '登錄密碼',
`nick_name` VARCHAR(32) DEFAULT NULL COMMENT '昵稱',
`email` VARCHAR(32) DEFAULT NULL COMMENT '郵箱',
`birth_day` VARCHAR(16) DEFAULT NULL COMMENT '生日',
`province_name` VARCHAR(64) DEFAULT NULL COMMENT '省',
`city_name` VARCHAR(64) DEFAULT NULL COMMENT '市',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;SELECT * FROM pt_t_user
/*
Navicat Premium Data TransferSource Server : 118.178.122.106
Source Server Type : MySQL
Source Server Version : 50732
Source Host : 118.178.122.106:3306
Source Schema : trodbTarget Server Type : MySQL
Target Server Version : 50732
File Encoding : 65001Date: 29/03/2021 12:05:50
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(255) DEFAULT NULL,
`password` VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=151083 DEFAULT CHARSET=utf8mb4;-- ----------------------------
-- Records of user
-- ----------------------------
BEGIN;
INSERT INTO `user` VALUES (6, 'aa', '123');
COMMIT;SET FOREIGN_KEY_CHECKS = 1;
SELECT * FROM USER
15、查看日志
cat /opt/easydemo/app/gateway/gateway.log
16、啟動應用:
cd /opt/easydemo/app/gateway./gateway.sh
./gatewayLinkAgent.sh
cd /opt/easydemo/app/user
./usercenterLinkAgent.sh
cd /opt/easydemo
./demoInstallLinkAgent.sh
1.docker容器commit成鏡像文件
//docker commit 容器名 想要創建的鏡像名:版本號
docker commit mmdetection_zjh mmdetection_zjh:v1
2.網站端登錄docker_hub並創建倉庫
登錄: https://hub.docker.com/
有賬號就登錄,沒有就注冊一個
注冊登錄之后創建一個倉庫,用來待會存儲上傳的鏡像
3.本地端鏈接本地鏡像與倉庫
// docker tag 本地鏡像名:版本號 dockerhub用戶名/倉庫名:版本號
//沒有版本號默認latest
docker tag mmdetection_zjh:v1 zjh96/mmdetection_zjh:v1
4.本地端登錄賬戶並push鏡像
docker login
然后依次輸入docker用戶名,密碼.//push本地鏡像到倉庫
docker push zjh96/mmdetection_zjh:v1