如何使用 Squid 仅记录某些结果/状态代码?

如何使用 Squid 仅记录某些结果/状态代码?

默认情况下,Squid 会记录所有访问信息,包括“成功”和“失败”。我只对记录“失败”感兴趣。换句话说,我想做一些事情,比如只记录 Squid DENIED 结果代码,或者不记录成功的 HTTP 事务。无论我如何定义“成功”和“失败”,我都需要能够更具体地定义 Squid 将写入日志文件的访问信息类型。有人知道如何做到这一点吗?

答案1

您可以使用以下方式实现此功能ACL,不过其中还是有一些技巧的。

主要的技巧是确保你不会意外地检查二进制连接的代码。Squid 永远不会看到二进制连接的状态代码,如果你搞砸了,它会对它看到的二进制连接http_status发出警告。cache.log

下面是一个示例配置,它将把所有 http 成功和重定向以及完成打开套接字的所有二进制连接(除此之外我们没有成功/失败的可见性)写入success.log,并将所有 http 失败代码和无法打开套接字的二进制连接写入failure.log

acl CONNECT method CONNECT

# http status codes (http://wiki.squid-cache.org/SquidFaq/SquidLogs)
acl success_codes http_status 100-199 # informational
acl success_codes http_status 200-299 # successful transactions
acl success_codes http_status 300-399 # redirection

acl failure_codes http_status 400-499 # client error
acl failure_codes http_status 500-599 # server error

acl success_hier hier_code HIER_DIRECT
acl failure_hier hier_code HIER_NONE

acl failure all-of CONNECT failure_hier
acl failure all-of !CONNECT failure_codes

acl success all-of CONNECT success_hier
acl success all-of !CONNECT success_codes

access_log stdio:/usr/local/squid/var/logs/success.log logformat=squid success
access_log stdio:/usr/local/squid/var/logs/failure.log logformat=squid failure

此配置的问题在于,它会禁用默认日志文件,并且不会记录任何与这两个 ACL 不匹配的内容。现在,我非常有信心我已经很好地编写了 ACL,并且已经考虑到了所有可能性,但这仍然会让我感到紧张,因此您可能需要添加另一个日志文件,以捕获任何恰好错过两个 ACL 的内容

access_log stdio:/usr/local/squid/var/logs/unknown.log logformat=squid !success !failure

或者你可以直接定义success并设置失败!success

acl CONNECT method CONNECT

# http status codes (http://wiki.squid-cache.org/SquidFaq/SquidLogs)
acl success_codes http_status 100-199 # informational
acl success_codes http_status 200-299 # successful transactions
acl success_codes http_status 300-399 # redirection

acl success_hier hier_code HIER_DIRECT
acl failure_hier hier_code HIER_NONE

acl success all-of CONNECT success_hier
acl success all-of !CONNECT success_codes

access_log stdio:/usr/local/squid/var/logs/success.log logformat=squid success
access_log stdio:/usr/local/squid/var/logs/failure.log logformat=squid !success

相关内容