Varnish e log

Vediamo come impostare i log di Varnish affinché essi siano leggibili ed utilizzabili per effettuare delle statiche.

In un sistema in produzione abbiamo visto come l'utilizzo di sistemi di gestione delle cache possano portare ad incrementi prestazionali di notevole entità.

Uno dei strumenti maggiormente utilizzati per sfruttare il caching è sicuramente Varnish, che - da solo o coadiuvato da plone.app.caching - è in grado di velocizzare la navigazione dei portali web.

Scenario

Le nostre configurazioni solitamente prevedono che Varnish sia il frontend (in ascolto sulla port 80), alle cui spalle c'e' NGINX che serve poi a gestire le richieste dei nostri portali Plone o Django.

   <------------   <----------------\   <---------------
|                               |   |              |
|          /----------\        /-------\            |
<browser> --->| INTERNET | ---> * Varnish * ---> [WebServer] <---> (Application Server)
\----------/        \_______/

Con questa configurazione, i log di NGINX risultano avere tutti come provenienza 127.0.0.1 perché la richiesta arriva da Varnish: fatti in questo modo, i log di NGINX non risultano essere utili a fini statistici.

Abbiamo bisogno, quindi, di abilitare i log di Varnish che è l'unico elemento dell'infrastruttura ad avere tutte le informazioni necessarie per soddisfare la nostra esigenza.

Gli strumenti di Varnish

Varnish mette a disposizione dei tool che permettono la consultazione e la conservazione dei log:

  • varnishlog
  • varnishncsa

Il primo dei due tool è utile esclusivamente quando qualcosa va storto e si ha l'esigenza di fare debug in quanto il suo output è decisamente verboso, come è possibile vedere dal seguente snippet di una singola richiesta:

14 RxRequest c GET
14 RxURL  c /it
14 RxProtocolc HTTP/1.1
14 RxHeader  c Host: www.abstract.it
14 RxHeader  c User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:15.0) Gecko/20100101 Firefox/15.0.1
14 RxHeader  c Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
14 RxHeader  c Accept-Language: it-it,it;q=0.8,en-us;q=0.5,en;q=0.3
14 RxHeader  c Accept-Encoding: gzip, deflate
14 RxHeader  c Connection: keep-alive
14 RxHeader  c Cookie: __utma=86997703.162428515.1332340510.1350392491.1350398820.91; __utmz=86997703.1349683205.86.9.utmcsr=projects.abstract.it|utmccn=(referral)|utmcmd=referral|utmcct=/projects/abstract.it-reloaded/varie/16; __atuvc=0%7C38%2C0%7C39%2C3%7C40%2C4%7C41%
14 RxHeader  c Pragma: no-cache
14 RxHeader  c Cache-Control: no-cache
14 VCL_call  c recv
14 VCL_returnc lookup
14 VCL_call  c hash
14 VCL_returnc hash
14 HitPassc 654085715
14 VCL_call  c pass
14 VCL_returnc pass
14 Backendc 19 backend_0 backend_0

Invece, varnishncsa è in grado di effettuare il logging delle richieste che arrivano a Varnish in un formato compatibile con quello dei log di Apache ovvero una cosa simile a:

93.44.x.y - - [16/Oct/2012:17:59:17 +0200] "GET http://www.abstract.it/it HTTP/1.1" 200 7260 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:15.0) Gecko/20100101 Firefox/15.0.1"
93.44.x.y - - [16/Oct/2012:17:59:18 +0200] "GET http://www.abstract.it/it/portfolio/siti-web/img_videohifi.com_banner.png/@@images/f8ec7d39-b0cd-4a0e-a03a-83de5af4f41c.jpeg HTTP/1.1" 304 0 "http://www.abstract.it/it" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:15.0) Gecko/20100101 Firefox/15.0.1"


La sintassi di varnishncsa

Per fare in modo che Varnish scriva i log in un file, utilizziamo il seguente comando

varnishncsa -a -w /var/log/varnish/varnishncsa.log -D

In questo modo, tutte le richieste che arrivano a Varnish vengono loggate in /var/log/varnish/varnishncsa.log; una soluzione simile, però, potrebbe non essere sufficiente: infatti, si potrebbe avere la necessità di separare i file di log per sito web gestito.

Per ottenere ciò il comando da utilizzare sarà:

varnishncsa -m "RxHeader:^Host: www.abstract.it$" -a -w /var/log/varnish/varnishncsa.log -D

Bisogna avere l'accortezza di avviare un processo di varnishncsa per ogni sito web di cui effettuare il logging.

Ulteriori informazioni

Documentazione di varnishncsa

Varnish

Share this on

Share |

On same topics

Commenti

comments powered by Disqus