Wie protokolliere ich mit Squid nur bestimmte Ergebnis-/Statuscodes?

Wie protokolliere ich mit Squid nur bestimmte Ergebnis-/Statuscodes?

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_statusCodes prüfen. Squid erkennt niemals Statuscodes für binäre Verbindungen und gibt eine Warnung cache.logfü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 successFehler 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

verwandte Informationen