為什麼打算使用Takin
具備從用戶端到服務端一站式流量發起與診斷功能,目前還沒看到其他開源産品。
1.探針方式接入,不需要修改業務代碼;
2.鍊路治理:能夠幫助業務和微服務架構分析業務鍊路,以技術方式獲得功能視角的鍊路資訊;
3.性能瓶頸定位:性能測試結果可以直接展現整個鍊路中存在性能瓶頸的微服務架構節點;
4.資料隔離:可以在不污染生産環境資料和日志的情況下實施性能測試
Takin核心原理圖

(takin社群文檔提供)
使用效果圖
文章結構分為三大部分
- takin平台部署
- 探針介入
- demo示範
本文結合takin官方說明文檔整理,部署過程相對較長,過程需要認真仔細,由于不允許使用外部連結,部分用的圖檔說明,更詳細資料文末加群二維碼。
一.Takin平台部署
docker環境準備
準備好一個裝有docker的伺服器,個人建議最好用一台空的linux伺服器搭建,平台會涉及到多個端口,部分是公共服務端口,也不建議自行修改端口,在不了解内部配置的情況下,很容易出現問題,我這邊是基于centos7安裝,首先自行安裝好docker。
[root@cctester ~]# docker -v
Docker version 17.12.0-ce, build c97c6d6
複制
docker環境配置
修改 Docker 鏡像位址為阿裡雲:
vim /etc/docker/daemon.json
複制
更新為:
配置生效:
systemctl daemon-reload
複制
下載下傳docker鏡像
docker pull下載下傳
下載下傳完成之後可檢視鏡像。
啟動docker鏡像
-d是背景啟動,-p是需要開放的端口,容器運作初始化的時候需要安裝一些必要的元件需要十分鐘的樣子,-d可以忽略背景元件的安裝資訊,如果想要檢視安裝資訊可以去除-d參數。
最好在啟動之前檢視下端口号是否被占用(netstat -ano|grep 端口号)
啟動成功後:
更改配置
進入容器,可以通過docker ps檢視容器id,然後進入容器,其中CONTAINER ID 為容器id号
docker exec -it 6bc8daa10063 bash
[root@cctester ~]# docker exec -it 6bc8daa10063 bash
[root@6bc8daa10063 data]# ll
total 1339344
-rw-r--r-- 1 root root 6285 5月 14 15:09 admin.conf
-rw-r--r-- 1 root root 1458 5月 14 15:41 alone_init.sql
-rw-r--r-- 1 root root 59841460 5月 14 12:32 amdb-app-1.0-SNAPSHOT.jar
-rw-r--r-- 1 root root 451 5月 14 16:07 amdb.env.conf
-rw-r--r-- 1 root root 646 5月 14 15:39 amdb_install.sh
-rw-r--r-- 1 root root 28971 5月 14 15:10 amdb.sql
-rw-r--r-- 1 root root 54292848 6月 4 14:30 amdb.zip
drwxr-xr-x 7 root root 4096 7月 18 20:23 apache-zookeeper-3.5.9-bin
-rw-r--r-- 1 root root 9623007 5月 14 16:21 apache-zookeeper-3.5.9-bin.tar.gz
drwxr-xr-x 5 root root 4096 7月 18 20:24 apps
-rw-r--r-- 1 root root 1882 5月 14 21:18 apps_install.sh
複制
配置serverUrl
修改serverUrl
vi /data/apps/dist/tro/index.html
将serverUrl配置成伺服器本機IP位址,一般是主控端外網ip;
重新開機Nginx服務
nginx -s reload
複制
配置sugre-deploy啟動指令
tip: sugre-deploy為大資料平台子產品,我們先把原來的程序删了,修改配置後重新開機
kill sugre-deploy
複制
進入容器後
[root@30e961d36c91 data]# ps -ef | grep surge
root 4336 1 66 17:48 ? 00:03:20 java -jar surge-deploy-1.0-jar-with-dependencies.jar {"172.17.0.2":"192.168.1.138"} root 4574 18 0 17:53 ? 00:00:00 grep --color=auto surge
[root@30e961d36c91 data]# kill -9 4336
[root@30e961d36c91 data]# ps -ef | grep surge
root 4582 18 0 17:54 ? 00:00:00 grep --color=auto surge
複制
更改sugre-deploy的啟動指令
vi /data/install.sh
将sugre-deploy的啟動指令參數“172.17.0.2”對應的value更改為主控端的IP,并儲存,
主控端内網ip
重新開機sugre-deploy
進入壓測控制台
輸入壓測控制台位址:
主控端IP/tro/#/login
複制
示例如下
預設賬号密碼:賬号:admin 密碼:pamirs@2020
以上,恭喜您,成功安裝了Takin,接下來就可以開啟壓測之旅啦~
二.探針接入
下載下傳Takin準備的應用demo
解壓:
tar xvf easydemo_0712.tgz
複制
更新資料庫配置
在easydemo/demoEnv.conf裡更新配置
配置demo應用的資料庫連接配接
将demoEnv.conf裡的資料庫相關配置更改為您的資料源位址
MYSQLURL=39.104.xx.xxx
PORT=3306
USERNAME=root
PASSWD=shulie@2020
複制
啟動demo
./demoInstall.sh
複制
執行成功會顯示應用的pid号
如果這裡報錯 line 5:create_table_sql:no such file or directory
是因為這個腳本裡有mysql指令去建立表,是以要麼本機裝個mysql用戶端,要麼修改一下腳本,隻啟動應用,單獨去mysql那邊建下表
如果啟動不成功,去檢視/easydemo/app目錄下兩個應用出現的日志
linkAgent接入
agent接入到應用後,需要與壓測控制台進行資料傳輸。二者的網絡需要打通。
進入opt目錄
mkdir simulator-agent
tar xvf simulator-agent.tar -C simulator-agent
複制
這樣就是都解壓放到這個目錄 opt/simulator-agent
接入到demo應用
進入檔案夾,配置更新
agent.properties
vi simulator-agent/config/agent.properties
複制
配置的主控端内網位址
simulator.properties
vi simulator-agent/agent/simulator/config/simulator.properties
複制
tro.web.url 改成主控端ip詳見【安裝部署】-【docker方式安裝部署】裡的壓測控制台位址
進入到easydemo,修改啟動腳本
原生啟動指令: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請填寫業務應用名稱,全局唯一
同理更新usercenter應用的啟動參數:usercenterLinkAgent.sh,參考gateway即可。
重新開機應用
在app應用下 ./demoInstallLinkAgent.sh
驗證
進入壓測控制台:主控端ip/tro/#/appManage
三.demo示範
檢視easydemo裡的HTTP接口,選擇帶有寫入操作的接口
curl --location --request POST 'ht主控端ip:28881/gateway/api/register'
複制
進行壓測。
完成這步之前,先确認資料庫表有沒有建立,庫表語句貼一下
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;
複制
鍊路簡介
壓測對象:
curl --location --request POST '主控端ip:28881/gateway/api/register' --header 'Content-Type: application/json' --data '{"mobile":"15558172233","password":"123456","nickName":"name-1000033","email":"[email protected]","birthDay":"2000-11-05","provinceName":"浙江","cityName":"杭州"}'
複制
服務端應用:easydemo-gateway-1.0.0
http的path:/gateway/api/register
要壓測的接口,稱為業務活動
業務活動的服務名組成:http的path +# +請求方式
demo裡的業務活動即為:/gateway/api/register#POST
複制
鍊路圖
新增業務活動
這裡的服務填 請求的path+#+請求方式, 這裡是/gateway/api/register#POST
資料隔離&資料安全配置
白名單配置
白名單是壓測流量是否可以調用某個接口的校驗機制,可有效防止壓測流量洩露至未接入的應用
1.加入白名單:加入白名單代表壓測流量可調用該接口
2.取消白名單:取消白名單代表壓測流量不可調用該接口
白名單
easydemo-gateway-1.0.0 請求了easydemo-usercenter-1.0.0 的接口:http://主控端ip:28882/user-center/user/add
進入easydemo-gateway-1.0.0應用詳情,配置白名單/user-center/user/add
若未添加白名單,發起壓測流量時,會報錯;
curl '主控端ip:28881/gateway/api/register' -X POST -d '{"mobile":"15558172233","password":"123456","nickName":"name-1000033","email":"[email protected]","birthDay":"2000-11-05","provinceName":"浙江","cityName":"杭州"}' --header "Content-Type: application/json" --header "User-Agent:PerfomanceTest"
複制
–header “User-Agent:PerfomanceTest” 注意,此處帶上了壓測标記,以區分壓測流量和正式流量。若傳入了壓測标記,linkAgent會進行資料隔離的處理。
日志目錄/opt/logs_pradar/進入相應的應用裡,可檢視日志檔案
影子庫表
對于有寫操作的接口,若未配置影子庫表,發起壓測流量時,會報錯:提示未進行影子庫表的配置。
這裡我們使用影子表模式。
線下建影子表
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:填寫應用使用的資料源位址
影子表:填寫接口用到的表,加上PT_字首
資料隔離驗證
資料隔離和安全隔離都配置完成後,可發起壓測流量進行驗證
./curl.sh
壓測準備
JMeter腳本
對curl --location --request POST '主控端ip: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天,過期會自動清除;
選擇耗時較長的請求,檢視鍊路調用詳情