流量配额该用 Squid 的哪个字节计数器?
在汇总 Squid 日志字段之前,先确定代理配额衡量的是响应、请求、上游正文还是接入线路流量。
“给每个用户十个吉字节”听起来很精确,直到两份报表各说各话。一份汇总了发给客户端的响应;另一份统计了从上游取回的字节。两者都可能正确地报告了自己选定的字段。
Squid 的日志格式有彼此不同的计数器:
| 字段 | 记录的测量内容 |
|---|---|
%<st | 适配后发给客户端的响应流量总量 |
%>st | 从客户端收到的请求总大小,不含分块编码字节 |
%<bs | 从下一跳收到的 HTTP 等价消息正文字节,含文档化的排除项 |
Squid 原生日志的 bytes 列使用的是客户端响应计数器。它并不承诺该值等于已保存文件的长度,也不是对 ISP 计费的每个以太网或 IP 字节的测量。
缓存命中说明了差别:Squid 可以在不做新的上游取回的情况下发送响应。上传密集的工作说明另一件事:只统计响应,请求方向就落在配额之外。
对 CONNECT 而言,代理可以在不理解隧道内每个加密文件或页面的情况下核算中继流量。但它无法把隧道的字节总量变成已下载应用对象的精确清单。
把配额契约写在计数器旁边:方向、观测点、结算周期和身份。然后把日志格式版本与报表一起留存。对“一个字节意味着什么”的分歧,不该靠把每个值乘以猜测的修正系数来“修好”。在强制执行时,已完成事务的合计可能落后于实时用量。