Как зарегистрировать только определенный результат/коды состояния со Сквидом?

Значением по умолчанию Squid регистрирует всю информацию о доступе включая 'успехи' и 'отказы'. Я интересуюсь входом только 'отказов'. Другими словами, я хочу сделать что-то как журнал, только Squid ОТКЛОНИЛ коды результата, или, альтернативно, не регистрируйте успешные транзакции HTTP. Независимо от того, как я определяю 'успех' и 'отказ', я должен смочь определить более конкретно, какую информацию о доступе Squid запишет в файл журнала. Кто-либо знает, как сделать это?

0
задан 17 June 2015 в 08:01
1 ответ

Эту функциональность можно достичь с помощью ACLs, хотя в этом есть некоторые хитрости.

Главная хитрость заключается в том, чтобы убедиться, что вы случайно не проверили двоичные соединения на наличие кодов http_status. Squid никогда не видит коды статуса для двоичных соединений и бросит предупреждение в cache.log для двоичных соединений, если вы все испортите.

Вот пример конфигураций, которые запишут все http-успешные и переадресации, а также все двоичные соединения, которые завершат открытие сокета (у нас нет видимости успеха/неуспешности за пределами этого) в успех. log, а также все коды отказа http и двоичные соединения, которые не открывают сокет на fail.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
4
ответ дан 4 December 2019 в 11:46

Теги

Похожие вопросы