简介 channel_stats插件能对每个channel收集运行时统计信息(速率,请求数,更多选项将在未来添加),这些统计信息通过http json方式输出,这些
接口代码取自stats_over_http插件。通常,该插件只用于具有*固定*个数的remap规则的反向代理服务器,它并非为那些不限制channel的代理服务器,比如open-relay forward proxy而设计的。
编译安装 使用方法 参见另一篇博文:
http://blog.csdn.net/tao_627/article/details/46275877
目前提供的统计项
- 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
另外可选参数选项
- 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.数据结构的定义 #define MAX_MAP_SIZE 100000
定义remap.config中的regex_map规则最多到1万行,以避免潜在的攻击
static std::string api_path("_cstats");
定义api的path是_cstats,如果带有这种path的url请求,就断定它是查询channel信息的请求
定义全局的状态统计信息
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的统计项信息都罗列在这个结构体中,目前只有这4项,后续根据业务发展,可能大量增加统计项
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
截获状态结构体,定义了与ATS内核proxy主模块获取数据时有关的一些数据结构,下面的这几个选项是非常重要的:
int output_bytes;
int body_written; //body发送出去了吗?
int show_global; // default 0
char *channel; // default ""
int topn; // default -1
int deny; // default 0
这几个选项说明了,在获取内核状态统计信息时,是全局信息,还是特定channel信息,是topn排名,还是允许查询该域名
(只有内网私有IP和IPv4类型的才允许查询这种统计信息)
struct private_seg_t
定义了子网和掩码,在全局静态变量private_segs数组中预置了内网私有ip相关信息,并借此判断内网ip和是否是同一网段。
这样做的目的是,只允许ATS同一局域网内的用户才能查询相应的频道信息
inet_pton:将“点分十进制” -> “二进制整数”
inet_ntop函数原型如下[将“二进制整数” -> “点分十进制”]
2.插件基本思想 现在插件配置文件plugin.config中配置
channel_stats.so test_stats
来设置接口访问API中url的path是这里的test_stats,它将会覆盖默认值_cstats,此后将所有进来的http请求按照path是不是test_stats的http请求而分为两类,