日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

ATS插件channel_stats源码分析解读

發(fā)布時間:2023/11/27 生活经验 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ATS插件channel_stats源码分析解读 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
簡介
channel_stats插件能對每個channel收集運行時統(tǒng)計信息(速率,請求數(shù),更多選項將在未來添加),這些統(tǒng)計信息通過http?json方式輸出,這些
接口代碼取自stats_over_http插件。通常,該插件只用于具有*固定*個數(shù)的remap規(guī)則的反向代理服務(wù)器,它并非為那些不限制channel的代理服務(wù)器,比如open-relay?forward?proxy而設(shè)計的。

編譯安裝
使用方法
參見另一篇博文:
http://blog.csdn.net/tao_627/article/details/46275877

目前提供的統(tǒng)計項
?-?response.bytes.content:?transferred?content?length?(not?including?header)
?-?response.count.2xx.get:?2xx?transaction?count
?-?response.count.5xx.get:?5xx?transaction?count
?-?speed.ua.bytes_per_sec_64k:?count?of?transaction?whose?speed?is?<?64KBps
?
另外可選參數(shù)選項
?-?topn:?only?output?top?N?channels?order?by?response?count
?-?channel:?only?output?the?channels?which?contain?specific?string
?-?global:?also?display?TS?internal?stats?as?'stats_over_http'?plugin

源碼解讀

1.數(shù)據(jù)結(jié)構(gòu)的定義

#define?MAX_MAP_SIZE?100000
定義remap.config中的regex_map規(guī)則最多到1萬行,以避免潛在的攻擊

static?std::string?api_path("_cstats");
定義api的path是_cstats,如果帶有這種path的url請求,就斷定它是查詢channel信息的請求

定義全局的狀態(tài)統(tǒng)計信息
static?uint64_t?global_response_count_2xx_get?=?0;?//?2XX?GET?response?count
static?uint64_t?global_response_bytes_content?=?0;?//?transferred?bytes

struct?channel_stat
對一個channel的統(tǒng)計項信息都羅列在這個結(jié)構(gòu)體中,目前只有這4項,后續(xù)根據(jù)業(yè)務(wù)發(fā)展,可能大量增加統(tǒng)計項
??uint64_t?response_bytes_content;
??uint64_t?response_count_2xx;
??uint64_t?response_count_5xx;
??uint64_t?speed_ua_bytes_per_sec_64k;
??
struct?intercept_state_t
截獲狀態(tài)結(jié)構(gòu)體,定義了與ATS內(nèi)核proxy主模塊獲取數(shù)據(jù)時有關(guān)的一些數(shù)據(jù)結(jié)構(gòu),下面的這幾個選項是非常重要的:
??int?output_bytes;
??int?body_written;???//body發(fā)送出去了嗎?
??int?show_global;?//?default?0
??char?*channel;???//?default?""
??int?topn;????????//?default?-1
??int?deny;????????//?default?0
這幾個選項說明了,在獲取內(nèi)核狀態(tài)統(tǒng)計信息時,是全局信息,還是特定channel信息,是topn排名,還是允許查詢該域名
(只有內(nèi)網(wǎng)私有IP和IPv4類型的才允許查詢這種統(tǒng)計信息)

struct?private_seg_t
定義了子網(wǎng)和掩碼,在全局靜態(tài)變量private_segs數(shù)組中預(yù)置了內(nèi)網(wǎng)私有ip相關(guān)信息,并借此判斷內(nèi)網(wǎng)ip和是否是同一網(wǎng)段。
這樣做的目的是,只允許ATS同一局域網(wǎng)內(nèi)的用戶才能查詢相應(yīng)的頻道信息
inet_pton:將“點分十進(jìn)制”?->?“二進(jìn)制整數(shù)”
inet_ntop函數(shù)原型如下[將“二進(jìn)制整數(shù)”?->?“點分十進(jìn)制”]

2.插件基本思想
現(xiàn)在插件配置文件plugin.config中配置
channel_stats.so?test_stats
來設(shè)置接口訪問API中url的path是這里的test_stats,它將會覆蓋默認(rèn)值_cstats,此后將所有進(jìn)來的http請求按照path是不是test_stats的http請求而分為兩類,
一類是path是test_stats的,稱為API請求,記錄它的query參數(shù),提取出指定的channel或是topn=10或是global參數(shù)等,來觸發(fā)intercept 請求,另一類是非API請求,將根據(jù)該transaction中的信息,計算出每類channel的2xx次數(shù),5xx次數(shù),傳輸?shù)目傋止?jié)數(shù),傳輸?shù)钠絻r速度等指標(biāo),并排序,這些信息將存放在上面的channel_stats中,當(dāng)API請求到來時,從中找出相應(yīng)的channel統(tǒng)計信息,直接給出響應(yīng)。
插件調(diào)用流程

總結(jié)

以上是生活随笔為你收集整理的ATS插件channel_stats源码分析解读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。