全鏈路壓測平台Takin安裝配置和實驗


先來看官網: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 Transfer

Source Server : 118.178.122.106
Source Server Type : MySQL
Source Server Version : 50732
Source Host : 118.178.122.106:3306
Source Schema : trodb

Target Server Type : MySQL
Target Server Version : 50732
File Encoding : 65001

Date: 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM