🔗 特性:访问日志的 DNS 等待时间记录
- 目标:为事后分析提供每次事务的 DNS 延迟信息。
- 状态:进行中
- 版本: 3.2
- 开发者:AlexRousskov
🔗 概述
一个主事务是 Squid 处理单个传入 HTTP 请求所关联的所有活动。一个主事务可能包括与缓存对等节点、源服务器和 ICAP 服务器的通信。主事务的详细信息会被记录到 access.log。
本项目增加了一个新的访问日志格式代码,用于记录每个主事务的总 DNS 等待时间。此度量累加了与主事务直接相关的活动在等待 DNS 响应的期间。主事务可能不会被 DNS 查询阻塞,因为同一主事务中的其他活动可能不依赖于 DNS 查询。
新的访问日志格式代码名称是dt。该值以毫秒为单位的整数表示总 DNS 等待时间。如果主事务没有关联任何 DNS 查询,则记录一个破折号(‘’)。记录的值可能不包含所有 DNS 查询,因为一些 DNS 操作发生在代码深处,难以可靠地将查询与主事务关联。
与任何与时间相关的日志字段一样,由于 Squid 内部时钟更新不频繁以及事件处理延迟,DNS 等待时间的精度最好也只有几毫秒。
🔗 实现思路
主事务统计信息累加在HttpRequest 或其成员中。我们可以创建一个MasterDnsStats类来维护主事务的 DNS 统计信息。克隆的请求应继承旧的MasterDnsStats成员值。
仅仅保留总时间累加器可能不够。为了处理单个主事务的并发 DNS 查询,并适应在记录时尚未结束的查询,MasterDnsStats可能还需要使用level和start成员。level成员表示当前并发 DNS 查询的数量。start成员记录了并发 DNS 查询在零级开始的最后时间。新的 DNS 查询会增加级别。一个完成的查询会降低级别,如果是最后一个查询,则将current_time-start差值加到事务总数中。应添加封装查询开始/结束计数的函数。
如果在主事务记录时并发级别大于零,则记录值会增加current_time-start差值。
要从发起或完成 DNS 查询的主事务中定位可能很困难。解决这个难题可能有助于正确修复 Squid bug 2459。
🔗 可用性
开发工作在 Squid3 的 trunk 上进行,目标是包含在官方 v3.2 中。该特性也已被非官方移植到 v3.1。
类别:功能
导航:站点搜索,站点页面,类别,🔼 向上