首页 > ATS插件channel_stats源码分析解读

ATS插件channel_stats源码分析解读

简介

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请求而分为两类,

更多相关:

  • 原来我们可以从官网 http://trafficserver.apache.org/tools/via 获取via头的解码信息来得到指定url的缓存状态信息,现在我们可以直接利用本地工具就可以达到目的。 traffic_via工具能够解码Via头信息,输入的参数要求是[]包含的字符串。 使用方法: 参考...

  • logger是一个shell命令接口,可以通过该接口使用Syslog的系统日志模块,还可以从命令行直接向系统日志文件写入一行信息 logger语法: 可以使用的相关命令 -d, --udp 使用数据报(UDP)而不是使用默认的流连接(TCP) -i, --id 逐行记录每一次logger的进程ID -f, --fil...

  • 今天在测试中遇到了一个问题 使用JMeter时请求相关地址参数及方法都填写正确,但是相应数据返回始终不对,例如 查看取样器结果显示 200 正常,但响应数据不符合正常的结果。 经反复检查发现问题如下: 1)没有添加HTTP信息头管理器 (获取根据就近原则) 2)HTTP信息头管理器中填写错误,将Content-Type 填写成了Co...

  • 第一,你要有log4j的对应的包,由于我用的maven,所以直接在pom.xml文件依赖下载则可,如你尚为有此包,请自行百度下载导入,或上http://www.mvnrepository.com/搜索。上如则是我的log4j的包的版本。好了,用了jar包之后,用来学习的项目结构如下:在对应的路径下创建log4Test.java和log...

  • 文章目录1. 基本接口2. Memtable key个数统计3. Immutable Memtable key个数统计4. Sstables key个数统计5. 疑问...

  •  phpMyVisites   phpMyVisites是一个网站流量统计系统,它能够提供非常详细的统计报告和高级图形报表。phpMyVisites不是一个Apache log分析工具,它建有自己的log。它的特点包括: 安装部署:提供可视化的安装向导,并且使用简单只要把一段简单的Javascript代码添加到你网站的页面中就能够马上...