Squid Cap 21

Capitolo 21. La analisi dei log di Squid

Squid utilizza diversi files di logs di cui quattro sono i file di log principali, questi vengono definiti dai seguenti TAG

21.2. I log nativi

File di log

il TAG cache_access_log

cache_access_log /usr/local/squid/var/logs/access.log

nel file access.log vengono registrate tutte le transazioni effettuate dai client

il TAG cache_log

cache_log /usr/local/squid/var/logs/cache.log

nel file cache.log vengono registrate tutte le informazioni sullo stato della cache, ne analizzeremo i dettagli in seguito

il TAG cache_store_log

cache_store_log /usr/local/squid/var/logs/store.log

nel file store.log vengono registrate tutte le attività eseguite dallo storage manager di Squid

il TAG cache_swap_log

cache_swap_log /usr/local/squid/var/cache/swap.state

nel file swap.state viene memorizzato il file di log dello swap, si tratta di un file binario che include un checksum MD5 e che contiene i campi dello store entry.

Predefiniti

Questi sono i file di log creati di default senza specifiche in squid.conf

cache.log  
squid.out  
store.log

access.log

Il file dal quale riusciremo ad estrapolare il maggior numero di informazioni sul funzionamento del servizio di web cache è senza dubbio il file access.log . Genera parecchi log quindi non è tra quelli di default

(1)1049790275.517(2)880(3)192.168.5.12(4)TCP_MISS (5)20012689(6)GET (7)ftp://it.samba.org/pub/samba (8)Federico DIRECT(9)217.56.103.6 (10) text/html

Ecco il significato:
  1. TimeStamp
  2. Elapsed Time: il tempo necessario per processare la richiesta, il tempo viene espresso in millisecondi
  3. Client Address determina l'indirizzo IP sorgente della richiesta
  4. Log Tag/HTTP Code si tratta dell'azione intrapresa da Squid in base alla richiesta (hit, miss, denied)
  5. Size la quantità di byte inviati al Client
  6. Request Method determina il metodo HTTP che viene utilizzato per soddisfare la richiesta (GET, POST)
  7. URL
  8. Ident determina l'utente o l'identificativo del client che ha richiesto il servizio (nella mia prima configurazione è apparsa una - quindi niente identificazione)
  9. Hierarchy Data / Hostname identifica come e dove la richiesta è stata processata , ip di destinazione e altre info
  10. Content Type come da RFC viene riportato il campo Content-Type dell'header HTTP

A partire da questo file si possono fare molte statistiche , ecco un link per l'analisi dei log
http://www.squid-cache.org/Scripts/

21.3. Log in altri formati

Si può applicare la modalità compatibile con un server httpd mettendo semplicemente il tag

emulate_httpd_log on

ecco un esempio di riga in questo formato
192.168.10.81 - - [20/Jan/2011:17:53:12 +0100] "GET http://www.gazzetta.it/index.shtml? HTTP/1.1" 200 27126 TCP_MISS:DIRECT

Oppure si può disporre di un file di log il cui output è nel formato custom log format bisogna applicare una patch. E' anche possibile processare il file access.log con uno script perl appositamente realizzato e reperibile presso la URL's http://cord.de/tools/squid/Welcome.html.en. E' previsto l'inserimento del custom log Format nella futura versione Squid-3.

21.4. Troubleshooting con il file cache.log

Il file cache.log è molto utile per configurare squid in maniera ottimale.
Per controllare squid all'avvio basta fare un tail -f cache.log , il messaggio che indica il corretto funzionamento è Ready to serve requests.
Per riassumere il controllo del file cache.log è fondamentale per risolvere diversi problemi di configurazione e per tenere sotto costante controllo lo stato di funzionamento di Squid.

21.4.2. Livelli di debug

Per il debug del file cache.log si usa questa direttiva

debug_options ALL,5

Dove il livello 1 è un debug con poche informazioni e 9 è quello con troppe info.

21.5. I codici di stato di Squid

Per comprendere meglio squid bisogna capire i codici di stato, quelli che cominciano con TCP_ si riferiscono alle richieste verso la porta http 8080 di solito , i codici che cominciano con UDP_ si riferiscono alla porta icp 3130

n. hits  valore %  codice di stato
---------------------------------------------------
1 14630    39.58%  TCP_MISS:DIRECT
2  5528    14.96%  TCP_REFRESH_HIT:DIRECT
3  4576    12.38%  TCP_HIT:NONE
4  4566    12.35%  TCP_CLIENT_REFRESH_MISS:DIRECT
5  4159    11.25%  TCP_IMS_HIT:NONE

Con una statistica di questo tipo si riesce a tenere sotto controllo la banda della rete
Nel paragrafo in questione c'è la leggenda dettagliata dei codici in sintesi
  • HIT copia valida nella cache
  • MISS non presente in cache
  • UDP_DENIED per questo tipo di richiesta l'accesso è stato negato
  • UDP_INVALID è stata ricevuta una richiesta non valida
  • NONE Si verifica con gli errori sulle richieste effettuate dal cache manager

Nella guida però non è specificato dove andare a leggere queste statistiche

Codici di stato HTTP

Squid utilizza quasi tutti i codici di stato HTTP ad eccezione dei codici 307 (Temporary Redirect), 416 (Request Range Not Satisfiable) e 417 (Expectation Failed). Squid utilizza anche dei codici aggiuntivi come lo 0 (result code being unavailable) e 600 (segnalare un header non valido o un errore del proxy).
Ecco l'elenco completo

"000" ; Used mostly with UDP traffic (Squid)
"100" ; Section 10.1.1: Continue
"101" ; Section 10.1.2: Switching Protocols
"200" ; Section 10.2.1: OK
"201" ; Section 10.2.2: Created
"202" ; Section 10.2.3: Accepted
"203" ; Section 10.2.4: Non-Authoritative Information
"204" ; Section 10.2.5: No Content
"205" ; Section 10.2.6: Reset Content
"206" ; Section 10.2.7: Partial Content
"300" ; Section 10.3.1: Multiple Choices
"301" ; Section 10.3.2: Moved Permanently
"302" ; Section 10.3.3: Found
"303" ; Section 10.3.4: See Other
"304" ; Section 10.3.5: Not Modified
"305" ; Section 10.3.6: Use Proxy
"307" ; Squid unsupported
"400" ; Section 10.4.1: Bad Request
"401" ; Section 10.4.2: Unauthorized
"402" ; Section 10.4.3: Payment Required
"403" ; Section 10.4.4: Forbidden
"404" ; Section 10.4.5: Not Found
"405" ; Section 10.4.6: Method Not Allowed
"406" ; Section 10.4.7: Not Acceptable
"407" ; Section 10.4.8: Proxy Authentication Required
"408" ; Section 10.4.9: Request Time-out
"409" ; Section 10.4.10: Conflict
"410" ; Section 10.4.11: Gone
"411" ; Section 10.4.12: Length Required
"412" ; Section 10.4.13: Precondition Failed
"413" ; Section 10.4.14: Request Entity Too Large
"414" ; Section 10.4.15: Request-URI Too Large
"415" ; Section 10.4.16: Unsupported Media Type
"416" ; Squid unsupported
"417" ; Squid unsupported
"500" ; Section 10.5.1: Internal Server Error
"501" ; Section 10.5.2: Not Implemented
"502" ; Section 10.5.3: Bad Gateway
"503" ; Section 10.5.4: Service Unavailable
"504" ; Section 10.5.5: Gateway Time-out
"505" ; Section 10.5.6: HTTP Version not supported 
"600" ; Squid header parsing error (Squid)

Metodi di richiesta supportati

method    defined    cachabil meaning
--------- ---------- ---------- ----------------------------------
GET       HTTP/0.9   possibly object retrieval and simple searches
HEAD      HTTP/1.0   possibly metadata retrieval
POST      HTTP/1.0   CC or Exp. submit data (to a program)
PUT       HTTP/1.1   never upload data (e.g. to a file)
DELETE    HTTP/1.1   never remove resource (e.g. file)
TRACE     HTTP/1.1   never appl. layer trace of request route
OPTIONS   HTTP/1.1   never request available comm. options
CONNECT   HTTP/1.1r3 never tunnel SSL connection
ICP_QUERY            Squid never used for ICP based exchanges
PURGE                Squid never remove object from cache
PROPFIND  rfc2518    ? retrieve properties of an object
PROPATCH  rfc2518    ? change properties of an object
MKCOL     rfc2518    never create a new collection
COPY      rfc2518    never create a duplicate of src in dst
MOVE      rfc2518    never atomically move src to dst
LOCK      rfc2518    never lock an object against modifications
UNLOCK    rfc2518    never unlock an object

21.8. Codici gerarchici per il peering con altre webcache

Nel caso si utilizzi Squid all'interno di una cache gerarchica, nei files di log potremmo trovare dei codici gerarchici. Vedere il paragrafo per i dettagli.

21.9. Strumenti di analisi dei Log

Nel file access.log con uno scenario di 500 utenti può raggiungere il gigabyte in una settimana. Per questo motivo si deve usare il comando

squid -k rotate

tale comando genererà un file access.log.N dove "N" indica un numero incrementale a partire da 0 sino a 9 che indica il numero di rotazione del file di log. Quindi si consiglia di metterlo nel crontab

Per i dettagli dell'analyzer del log vedere la pagina specifica

Salvo diversa indicazione, il contenuto di questa pagina è sotto licenza Creative Commons Attribution-ShareAlike 3.0 License