使用goreplay流量回放實(shí)踐(二)

之前一篇文章寫(xiě)了goreplay的一些基礎(chǔ)的介紹以及一些簡(jiǎn)單的使用,不過(guò)都是基于命令行的,由于要操作線上機(jī)器,所以存在一定的風(fēng)險(xiǎn),這邊主要介紹結(jié)合Jenkins對(duì)goreplay做一些簡(jiǎn)單的封裝后,對(duì)線上流量做一些轉(zhuǎn)發(fā)。

優(yōu)點(diǎn):

  • 結(jié)合Jenkins,界面話操作,更加方便快捷
  • 減少在線上機(jī)器直接執(zhí)行命令,降低風(fēng)險(xiǎn)
  • 接入grafana監(jiān)控,結(jié)果更加清晰

流程

整體實(shí)現(xiàn)的大致流程如下:

    1. Jenkins新建任務(wù),增加構(gòu)建必須的參數(shù):如需要轉(zhuǎn)發(fā)接口、轉(zhuǎn)發(fā)速度、轉(zhuǎn)發(fā)到目標(biāo)機(jī)器的IP、轉(zhuǎn)發(fā)時(shí)間等等。
  • 2.用shell腳本,封裝goreplay,針對(duì)傳入的參數(shù),做相應(yīng)的轉(zhuǎn)發(fā)操作

  • 3.接入Grafana監(jiān)控,對(duì)轉(zhuǎn)發(fā)結(jié)果進(jìn)行有效的監(jiān)控

Jenkins配置

首先看一下,最終Jenkins的界面如下:


image.png

一共有4個(gè)參數(shù):

$name    表示接口名  
$speed   表示轉(zhuǎn)發(fā)速度
$server   表示目標(biāo)機(jī)器
$time      表示時(shí)間

需要轉(zhuǎn)發(fā)的時(shí)候,可以自行根據(jù)需求,選擇某一個(gè)接口的流量或者全部接口的流量進(jìn)行轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)速度、時(shí)間均可配置。

例如,我們對(duì)全部流量,以10%的速度,轉(zhuǎn)發(fā)30分鐘,看了下監(jiān)控如下:


image.png

對(duì)比可以看到,QPS 約等于線上實(shí)時(shí)機(jī)器的 10%,時(shí)間為 30分鐘

對(duì)Goreplay進(jìn)行封裝

上面有提到 Jenkins 配置的4個(gè)參數(shù),封裝goreplay主要用到了前三個(gè)參數(shù):
根據(jù)傳入的速度、接口、IP進(jìn)行相應(yīng)的操作,封裝的代碼寫(xiě)的較簡(jiǎn)單,思路比較重要(隱藏了部分可能涉密的信息,但是不影響整體結(jié)構(gòu))

function checkspeed(){
    if [ "$speed"x = "100"x ]
    then
        echo 100
    else
        echo $speed
    fi
}


if [ "$name"x = "all"x ]
then
    r=`checkspeed $speed`
    echo $r
    if [ "$r"x = "100"x ]
    then
        echo "原速轉(zhuǎn)發(fā)所有流量"
        ./gor --input-raw :xxxx --output-http=$server

    else
        echo "$r""%速度轉(zhuǎn)發(fā)所有流量"
        ./gor --input-raw :xxx --output-http="$server|$speed%"
    fi

else
    r=`checkspeed $speed`
    echo $r
    if [ "$r"x = "100"x ]
    then
        echo "原速轉(zhuǎn)發(fā)" $name
        ./gor --input-raw :xxxx --http-allow-url /$name --output-http=$server

    else
        echo "$r" "$name"
        ./gor --input-raw :xxxxx --http-allow-url /$name  --output-http="$server|$speed%"
    fi
fi

在jenkins配置中,執(zhí)行該腳本時(shí)將三個(gè)參數(shù)傳進(jìn)去

sh replay.sh  $name $speed $server

接入Grafana監(jiān)控

轉(zhuǎn)發(fā)流量之后,我們需要對(duì)目標(biāo)機(jī)器做一個(gè)監(jiān)控以及和線上被轉(zhuǎn)發(fā)的機(jī)器做一個(gè)對(duì)比,這邊用到了Grafana監(jiān)控
具體監(jiān)控哪些指標(biāo),可自行根據(jù)業(yè)務(wù)場(chǎng)景,自行增加面板


image.png
image.png

通過(guò)這邊面板,可以直接的查看一些QPS、耗時(shí)等相關(guān)信息

以上是最近基于Gorepaly做的一些提效的事情,有好的建議歡迎交流

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容