溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在Linux服務(wù)器中使用TCPCopy獲取用戶訪問流量

發(fā)布時(shí)間:2021-03-15 15:31:10 來源:億速云 閱讀:283 作者:Leah 欄目:系統(tǒng)運(yùn)維

本篇文章給大家分享的是有關(guān)怎么在Linux服務(wù)器中使用TCPCopy獲取用戶訪問流量,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

 tcpcopy可以當(dāng)做一種壓力測(cè)試工具,也可以獲取真實(shí)的用戶訪問流量,從而模擬真實(shí)運(yùn)行環(huán)境,tcpcopy的開發(fā)者這樣介紹它: TCPCopy是一種請(qǐng)求復(fù)制(所有基于tcp的packets)工具,其應(yīng)用領(lǐng)域較廣,利用TCPCopy程序,可以把訪問memcached的系統(tǒng)流量復(fù)制一份到membase系統(tǒng)中去。對(duì)于membase來說,這份流量就是訪問membase的,跟直接上線
membase效果一樣,就可以做各種試驗(yàn),查看membase的各種特性。
     主要有以下功能
      1)分布式壓力測(cè)試工具,利用在線數(shù)據(jù),可以測(cè)試系統(tǒng)能夠承受的壓力大小,也可以提前發(fā)現(xiàn)一些bug
      2)普通上線測(cè)試,可以發(fā)現(xiàn)新系統(tǒng)是否穩(wěn)定,提前發(fā)現(xiàn)上線過程中會(huì)出現(xiàn)的諸多問題,讓開
發(fā)者有信心上線
      3)對(duì)比試驗(yàn),同樣請(qǐng)求,針對(duì)不同或不同版本程序,可以做性能對(duì)比等試驗(yàn)
      4)流量放大功能,可以利用多種手段構(gòu)造無限在線壓力,滿足中小網(wǎng)站壓力測(cè)試要求
      5)利用TCPCopy轉(zhuǎn)發(fā)傳統(tǒng)壓力測(cè)試工具發(fā)出的請(qǐng)求,可以增加網(wǎng)絡(luò)延遲,使其壓力測(cè)試更加真實(shí)
      6)熱備份
      7)實(shí)戰(zhàn)演習(xí)(架構(gòu)師必備)
    

安裝:

代碼如下:


tar -zxvf tcpcopy-0.9.0 .tar.gz
cd tcpcopy-0.9.0
./configure
make
make install


注意:tcpcopy 和 intercept的版本,配置參數(shù)要一致

現(xiàn)在的代碼已經(jīng)放在github(https://github.com/session-replay-tools/tcpcopy)上了,1.0 以上的版本,tcpcopy 和 intercept 包已經(jīng)分開了,需要單獨(dú)下載安裝,注意,如果在安裝intercept的時(shí)候 ./configure報(bào)錯(cuò)checking for pcap.h … not found,可以 通過yum install libpcap-devel解決。


            TCPCopy分為TCPCopy client和TCPCopy server。其中TCPCopy client運(yùn)行在在線服務(wù)器上面,用來捕獲在線請(qǐng)求數(shù)據(jù)包;TCPCopy server(監(jiān)聽端口為36524)運(yùn)行在測(cè)試機(jī)器上面,在測(cè)試服務(wù)器的響應(yīng)包丟棄之前截獲測(cè)試服務(wù)器
的響應(yīng)包,并通過TCPCopy client和TCPCopy server之間的tcp連接傳遞響應(yīng)包的tcp和ip頭部信息給TCPCopy client,以完成TCP交互。

      使用方法如下:
         TCPCopy server (root用戶執(zhí)行)
             1)啟動(dòng)內(nèi)核模塊ip_queue (modprobe ip_queue)
             2)設(shè)置要截獲的端口,并且設(shè)置對(duì)output截獲
                 

代碼如下:

iptables -I OUTPUT -p tcp --sport port -j QUEUE


             3)interception


         TCPCopy client   (root用戶執(zhí)行)
               tcpcopy 本地ip地址1[:本地ip地址2:…]  本地port  遠(yuǎn)程ip地址 遠(yuǎn)程port

      試用:
            模擬抓取apache的訪問流量。試用之前清空apache的訪問日志。線上機(jī)器:10.1.6.205,線下機(jī)器:10.1.6.206。
       操作Client-VM2

代碼如下:


modprobe ip_queue
iptables -I OUTPUT -p tcp --sport 80 -j QUEUE
interception


      操作Client-VM1

代碼如下:


tcpcopy 10.1.6.205 80 10.1.6.206 80


作者交待了一些注意事項(xiàng):

 1)Linux平臺(tái),內(nèi)核2.6+,需要支持netlink機(jī)制

2)TCPCopy中的tcpcopy和interception程序運(yùn)行需要root權(quán)限

3)interception在同一臺(tái)機(jī)器只需要要運(yùn)行一個(gè)實(shí)例,多個(gè)實(shí)例還不支持

4)TCPCopy client需要連接測(cè)試服務(wù)器的36524端口,所以要對(duì)外開放36524端口

5)TCPCopy由于依賴于抓包函數(shù),壓力大的時(shí)候,抓包函數(shù)本身不可靠,所以會(huì)丟包,

進(jìn)而丟失請(qǐng)求

6)由于interception程序密切跟ip queue內(nèi)核模塊相關(guān),所以當(dāng)壓力很大的時(shí)候請(qǐng)求

丟失率很高,需要優(yōu)化sysctl系統(tǒng)參數(shù)才能達(dá)到好的效果(通過cat /proc/net/ip_queue,

查看ip queue運(yùn)行情況,如果Queue dropped的數(shù)值不斷增大,則需要修改ip_queue_maxlen參數(shù),

比如echo 4096 > /proc/sys/net/ipv4/ip_queue_maxlen;

如果Netlink droppedde的數(shù)值不斷增大,修改net.core.rmem_max和net.core.wmem_max參數(shù),

比如sysctl -w net.core.rmem_max=16777216和sysctl -w net.core.wmem_max=16777216)

7)復(fù)制同一臺(tái)機(jī)器進(jìn)程之間的請(qǐng)求,也即Local Requests,請(qǐng)?jiān)O(shè)置lo MTU不超過1500,

并且在配置文件中不要設(shè)置127.0.0.1地址,要設(shè)置內(nèi)網(wǎng)或者外網(wǎng)地址

8)TCP segmentation offloading相關(guān)問題(要注意網(wǎng)卡tso和gro要關(guān)閉)

如果tcpcopy所抓的數(shù)據(jù)包大小超過MTU,那么由于raw socket output的原因,需要你

改變?cè)诰€設(shè)置,比如:ethtool -K eth2 tso off ; ethtool -K eth2 gro off

9)TCPCopy server,也即interception程序有可能會(huì)成為性能瓶頸,特別是對(duì)大數(shù)據(jù)響應(yīng)這種情況

10)測(cè)試環(huán)境最好和在線環(huán)境一致,比如連接都保持keepalive

11)TCPCopy只與ip、tcp層的數(shù)據(jù)有關(guān),如果請(qǐng)求驗(yàn)證與tcp層以上的協(xié)議有關(guān),則系統(tǒng)不能正常運(yùn)行。

例如:mysql連接協(xié)議,由于權(quán)限認(rèn)證與tcp層上面的mysql協(xié)議有關(guān),所以復(fù)制過去的請(qǐng)求會(huì)被目

標(biāo)測(cè)試服務(wù)器認(rèn)為非法請(qǐng)求,這個(gè)時(shí)候需要針對(duì)mysql協(xié)議作具體針對(duì)性的處理,tcpcopy程序才能正常運(yùn)行

12)多層架構(gòu)環(huán)境下,測(cè)試系統(tǒng)一定要獨(dú)立,與在線系統(tǒng)沒有業(yè)務(wù)關(guān)聯(lián),否則會(huì)影響在線

13)丟失請(qǐng)求率跟網(wǎng)絡(luò)狀況有關(guān),最好在內(nèi)網(wǎng)內(nèi)復(fù)制請(qǐng)求

14)本系統(tǒng)不支持域名,只支持ip地址

15)針對(duì)長(zhǎng)請(qǐng)求(比如上傳文件),本系統(tǒng)不是很支持,預(yù)計(jì)0.5版本會(huì)支持

16)客戶端ip地址為內(nèi)網(wǎng)ip地址,一般情況下其應(yīng)用請(qǐng)求是無法復(fù)制到外網(wǎng)測(cè)試機(jī)器上面去的。

17)為了避免不必要的麻煩,關(guān)閉的時(shí)候先關(guān)閉tcpcopy,然后再關(guān)閉interception

以上就是怎么在Linux服務(wù)器中使用TCPCopy獲取用戶訪問流量,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI