Squid Web Cache Wiki

Squid Web Cache 文档

🔗 功能:可定制的日志格式

🔗 配置选项

squid.conf 中的 logformat 选项定义了日志输出的命名格式。

access_log 选项然后使用命名格式,以该格式将每个请求的输出写入指定的日志文件。

🔗 默认格式

默认格式是 Squid 内置的,无需手动定义。只需在 access_log 行中指定默认格式名称即可使用它们。

🔗 squid

Squid 的原生格式

格式是

time elapsed remotehost code/status bytes method URL rfc931 peerstatus/peerhost type

原生日志文件格式比通用日志文件格式记录更多不同的信息:请求持续时间、一些超时信息、下一个上游服务器地址以及内容类型。

存在一些工具可以将一种文件格式转换为另一种。请注意,尽管日志格式共享大部分信息,但两种格式都包含对方格式中没有的信息,因此在转换时会丢失这部分信息。特别是来回转换是不可能无损进行的。

squid2common.pl 是一个转换实用程序,可以将任何 Squid 日志文件格式转换为旧的 CERN 代理样式输出。存在用于分析、评估和绘制该格式结果的工具。

🔗 common

许多 HTTP 服务器使用 通用日志文件格式。该格式包含以下七个字段

remotehost rfc931 authuser [date] "method URL" status bytes

它可以被各种工具解析。通用格式包含的信息与原生日志文件格式不同。HTTP 版本被记录下来,而这是在原生日志文件格式中未记录的。

🔗 Squid 原生 access.log 格式详解

我们建议您使用 Squid 的原生日志格式,因为它提供了更多信息供后续分析。原生 *access.log* 条目的打印格式行如下所示

"%9d.%03d %6d %s %s/%03d %d %s %s %s %s%s/%s %s"

因此,*access.log* 条目通常由(至少)10 列组成,列之间用一个或多个空格分隔

  1. time Unix 时间戳,以 UTC 秒和毫秒精度表示。这是 Squid 开始记录事务的时间,通常发生在事务生命周期结束时,即在从 HTTP 客户端接收完整个请求并向其发送完整个响应之后。要获取近似的事务开始时间,请从该字段中减去事务持续时间(第二个字段),注意这两个字段的时间单位不同。您可以使用这个简短的 Perl 脚本将 Unix 时间戳转换为更易读的格式

       s/^\d+\.\d+/localtime $&/e;
    
  2. duration 经过的时间考虑了事务使缓存忙碌了多少毫秒。对于 TCP 和 UDP,其解释有所不同
    • 对于 HTTP,这基本上是从收到请求到 Squid 完成发送响应的最后一个字节之间的时间。
    • 对于 ICP,这是调度回复到实际发送回复之间的时间。
    • 请注意,条目是在回复发送完成*之后*记录的,*而不是*在事务生命周期中记录的。
  3. client address 请求实例的 IP 地址,即客户端 IP 地址。 client_netmask 配置选项为了数据保护原因可能会扭曲客户端,但这会使分析更加困难。通常最好使用日志文件匿名化工具之一。
  4. result codes 此列由两个由斜杠分隔的条目组成。此列编码事务结果
    • 请求的缓存结果包含有关请求类型、如何满足请求或以何种方式失败的信息。有关有效的符号结果代码,请参阅 Squid 结果代码。旧版本中的几个代码已不再可用、已重命名或已拆分。特别是 *ERR_* 代码似乎已不再出现在日志文件中。有关不再可用的代码的详细信息,也请参阅 Squid 结果代码。状态部分包含 HTTP 结果代码以及一些 Squid 特定的扩展。Squid 使用 RFC 定义的 HTTP 错误代码子集。有关识别的状态代码的详细信息,请参阅 状态代码 部分。
  5. bytes 大小是传输给客户端的数据量。请注意,这不包括净对象大小,因为标题也被计算在内。此外,失败的请求可能会提供错误页面,其大小也在此记录。
  6. request method 获取对象的请求方法。有关可用方法的详细信息,请参阅 请求方法 部分。如果您在配置中关闭了 log_icp_queries,您将看不到(因此无法分析)ICP 交换。*PURGE* 方法仅在您的配置文件中启用了“method purge”的 ACL 时才可用。
  7. URL 此列包含请求的 URL。请注意,日志文件可能包含空格的 URI。但 uri_whitespace 的默认配置会拒绝或截断空格。
  8. user 第八列可能包含请求客户端的用户身份。这可能来源于 HTTP 身份验证、外部 ACL 辅助程序、TLS 身份验证或 IDENT 查找(RFC 931)——按此顺序检查,并显示第一个提供信息的。如果没有可用的用户身份,将记录“-”。
  9. hierarchy code 层次结构信息包含三项
    • 任何层次结构标签都可以加上 *TIMEOUT_* 前缀,如果等待所有 ICP 回复从邻居返回时发生超时。超时是动态的,如果 icp_query_timeout 未设置,或者那里配置的时间已用完。
    • 一个解释请求如何处理的代码,例如,通过转发给对等节点,或直接连接到源。有关层次结构代码和已删除层次结构代码的详细信息,请参阅 层次结构代码
    • 请求(如果是未命中)被转发到的 IP 地址或主机名。对于发送到源服务器的请求,这是源服务器的 IP 地址。对于发送到邻居缓存的请求,这是邻居的主机名。注意:较旧版本的 Squid 会在此处放置源服务器主机名。
  10. type 对象的内容类型,如 HTTP 回复头中所示。请注意,ICP 交换通常没有内容类型,因此记录为“-”。此外,一些异常的回复具有内容类型“:”甚至为空。

如果启用了(debug)选项 *log_mime_headers*,*access.log* 中可能还有另外两列。在这种情况下,HTTP 请求头记录在“[" 和 "]”之间,HTTP 回复头也记录在“[" 和 "]”之间。所有控制字符(如 CR 和 LF)都会被 URL 转义,但空格*不会*被转义!解析器应注意这一点。

类别:功能

导航:站点搜索站点页面类别🔼 向上