Standardmäßig protokolliert Squid alle Zugriffsinformationen, einschließlich „Erfolge“ und „Fehler“. Ich möchte nur „Fehler“ protokollieren. Mit anderen Worten, ich möchte so etwas wie nur Squid DENIED-Ergebniscodes protokollieren oder alternativ keine erfolgreichen HTTP-Transaktionen protokollieren. Unabhängig davon, wie ich „Erfolg“ und „Fehler“ definiere, muss ich genauer definieren können, welche Art von Zugriffsinformationen Squid in die Protokolldatei schreibt. Weiß jemand, wie das geht?
Antwort1
Diese Funktionalität erreichen Sie mitZugriffssteuerungslisten, obwohl es einige Tricks dazu gibt.
Der Haupttrick besteht darin, sicherzustellen, dass Sie nicht versehentlich binäre Verbindungen auf http_status
Codes prüfen. Squid erkennt niemals Statuscodes für binäre Verbindungen und gibt eine Warnung cache.log
für die binäre Verbindung aus, die es erkennt, wenn Sie dies vermasseln.
Hier ist eine Beispielkonfiguration, die alle HTTP-Erfolgsmeldungen und -Umleitungen sowie alle Binärverbindungen, die das Öffnen eines Sockets abschließen (darüber hinaus haben wir keine Sichtbarkeit hinsichtlich Erfolg/Misserfolg), in schreibt success.log
, und alle HTTP-Fehlercodes und Binärverbindungen, bei denen das Öffnen eines Sockets fehlschlägt, in 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
Das Problem mit dieser Konfiguration ist, dass sie die Standardprotokolldatei deaktiviert und nichts protokolliert, was nicht mit einer dieser beiden ACLs übereinstimmt. Ich bin mir zwar ziemlich sicher, dass ich meine ACLs gut geschrieben und alle Möglichkeiten berücksichtigt habe, aber das würde mich trotzdem nervös machen, also möchten Sie vielleicht eine weitere Protokolldatei hinzufügen, um alles abzufangen, was zufällig beide ACLs verfehlt.
access_log stdio:/usr/local/squid/var/logs/unknown.log logformat=squid !success !failure
Oder Sie können success
Fehler einfach definieren und festlegen auf!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