如何使用 Squid 只記錄某些結果/狀態代碼?

如何使用 Squid 只記錄某些結果/狀態代碼?

預設情況下,Squid 記錄所有存取訊息,包括「成功」和「失敗」。我只對記錄“失敗”感興趣。換句話說,我想做一些事情,例如只記錄 Squid DENIED 結果代碼,或不記錄成功的 HTTP 事務。無論我如何定義“成功”和“失敗”,我都需要能夠更具體地定義 Squid 將寫入日誌檔案的存取資訊類型。有人知道怎麼做這個嗎?

答案1

您可以透過以下方式實現此功能ACL,儘管有一些技巧。

主要技巧是確保您不會意外檢查二進位連接中的http_status程式碼。 Squid 永遠不會看到二進位連線的狀態碼,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

相關內容