Как регистрировать только определенные коды результатов/статусов с помощью 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

Связанный контент