デフォルトでは、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
この設定の問題は、デフォルトのログ ファイルが無効になり、2 つの 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