MySQL抓包工具:sniffer-agent

sniffer-agent
抓取tcp包解析出mysql語句,將查詢信息打印在屏幕上或者發(fā)送到Kafka绳军。

1. Architecture

架構(gòu)設(shè)計:

本項目采用模塊化設(shè)計删铃,主要分為四大模塊:TCP抓包模塊踏堡,協(xié)議解析模塊,輸出模塊顷蟆,心跳模塊

2. Parse Protocol

sniffer-agent采用模塊化結(jié)構(gòu)帐偎,支持用戶添加自己的解析模塊,只要實現(xiàn)了統(tǒng)一的接口即可

  • MySQL
  • PostgreSQL
  • Redis
  • Mongodb
  • GRPC
詳細輸出格式查看

3. CapturePacketRate

sniffer-agent可以動態(tài)設(shè)置抓包率豁生,詳情查看文檔

4. Exporter

輸出模塊主要負(fù)責(zé)漫贞,將解析的結(jié)果對外輸出。默認(rèn)情況下輸出到命令行迅脐,可以通過指定export_type參數(shù)選擇kafka,這時候會直接將解析結(jié)果發(fā)送到kafka谴蔑。
同樣只要實現(xiàn)了export接口龟梦,用戶可以自定義自己的輸出方式计贰。

5. Install:

環(huán)境:

golang:1.12

libpcap包

測試腳本運行在python3環(huán)境下

1.安裝依賴躁倒,目前自測支持Linux系列操作系統(tǒng),其他版本的系統(tǒng)有待驗證

CentOS:

yum install libpcap-devel

Ubuntu:

apt-get install libpcap-dev

2.執(zhí)行編譯命令 go build

6. Demo

目前只支持MySQL協(xié)議的抓取挣输,需要將編譯后的二進制文件上傳到MySQL服務(wù)器上

1.最簡單的使用

./sniffer-agent

2.指定log級別,可以指定的值為debug停士、info完丽、warn、error蜻底,默認(rèn)是info

./sniffer-agent --log_level=debug

默認(rèn)會監(jiān)聽 網(wǎng)卡:eth0薄辅,端口3306

3.指定網(wǎng)卡和監(jiān)聽端口

./sniffer-agent --interface=eth0 --port=3358

4.指定輸出到kafka抠璃,為了將ddl和select、dml區(qū)分處理窿春,這里使用了兩個topic來生產(chǎn)消息

./sniffer-agent --export_type=kafka --kafka-server=$kafka_server:$kafka_server --kafka-group-id=sniffer --kafka-async-topic=non_ddl_sql_collector --kafka-sync-topic=ddl_sql_collector

5.指定嚴(yán)格模式,通過查詢獲取長連接的用戶名和數(shù)據(jù)庫

./sniffer-agent --strict_mode=true --admin_user=root --admin_passwd=123456

7. 題外話

在做這個功能之前采盒,項目組調(diào)研過類似功能的產(chǎn)品旧乞,最有名的是 mysql-sniffergo-sniffer,這兩個產(chǎn)品都很優(yōu)秀磅氨,不過我們的業(yè)務(wù)場景要求更多良蛮。
我們需要將提取的SQL信息發(fā)送到kafka進行處理,之前的兩個產(chǎn)品輸出的結(jié)果需要進行一些處理然后自己發(fā)送悍赢,在QPS比較高的情況下决瞳,這些處理會消耗較多的CPU货徙;
另外mysql-sniffer使用c++開發(fā),平臺的適用性較差皮胡,后期擴展較難痴颊。
開發(fā)的過程中也借鑒了這些產(chǎn)品的思想,另外在MySQL包解析的時候屡贺,參考了一些 VitessTiDB 的內(nèi)容蠢棱,部分私有變量和函數(shù)直接復(fù)制使用,這里向這些優(yōu)秀的產(chǎn)品致敬甩栈,如有侵權(quán)請隨時聯(lián)系玉转。

8. 結(jié)果分析

在壓測的過程中和mysql-sniffer進行了結(jié)果對比究抓,壓測執(zhí)行28萬條語句,mysql-sniffer抓取了8千條橘茉,sniffer-agent抓取了30萬條語句(其中包含client自動生成的語句)

9. 風(fēng)險提示

1.sniffer-agent使用了pacp抓包捺癞,根據(jù)pacp抓包原理,在IO較高的時候有一定的概率丟包唐础;

2.sniffer-agent提供了Prepare語句的支持一膨,但是如果sniffer-agent在prepare語句初始化之后啟動,就無法抓取prepare語句瞒津;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市啦膜,隨后出現(xiàn)的幾起案子僧家,更是在濱河造成了極大的恐慌,老刑警劉巖乘粒,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件每聪,死亡現(xiàn)場離奇詭異药薯,居然都是意外死亡,警方通過查閱死者的電腦和手機穷娱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門携添,熙熙樓的掌柜王于貴愁眉苦臉地迎上來羞秤,“玉大人,你說我怎么就攤上這事【└铮” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我画侣,道長,這世上最難降的妖魔是什么桑寨? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任燥透,我火速辦了婚禮芭碍,結(jié)果婚禮上窖壕,老公的妹妹穿的比我還像新娘。我一直安慰自己速勇,他們只是感情好养匈,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布陨晶。 她就那樣靜靜地躺著先誉,像睡著了一般诈闺。 火紅的嫁衣襯著肌膚如雪把曼。 梳的紋絲不亂的頭發(fā)上注盈,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天震叮,我揣著相機與錄音,去河邊找鬼贪薪。 笑死,一個胖子當(dāng)著我的面吹牛霍弹,可吹牛的內(nèi)容都是我干的忘闻。 我是一名探鬼主播私恬,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼硅蹦,長吁一口氣:“原來是場噩夢啊……” “哼涮瞻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎冤寿,沒想到半個月后狠角,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體姨蟋,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年铝噩,在試婚紗的時候發(fā)現(xiàn)自己被綠了年叮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片补箍。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡终蒂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出睁蕾,到底是詐尸還是另有隱情,我是刑警寧澤子眶,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布谚中,位于F島的核電站,受9級特大地震影響将塑,放射性物質(zhì)發(fā)生泄漏来吩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一迫肖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晦鞋,春花似錦、人聲如沸娜谊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纱皆。三九已至湾趾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間派草,已是汗流浹背搀缠。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留近迁,地道東北人艺普。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像鉴竭,于是被迫代替她去往敵國和親歧譬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355