Logs Varnishncsa par vhost

Pour avoir des statistiques sur ses sites web, on doit mettre en place des outils de collecte d’informations.

Des logiciels comme Awstats, ou Sawmill traitent ces informations via des fichiers de logs.

Et quand on utilise Varnish, on doit jouer avec Varnishncsa pour récupérer ces logs.

En attendant que cette fonction soit officiellement supportée par Varnish, voici une configuration de varnishncsa qui permet dissocier les logs de chacun des vhosts.

J’ai créé autant de scripts d’init que j’ai de sites, et j’aurai donc autant d’instances vartnishncsa que de sites.

Pré-requis : il faut disposer d’une version de Varnish > v3.

Si comme moi vous êtes sous Debian Squeeze, pensez à backuper vos confs, à consulter les changelogs et la doc d’upgrade. (j’ai notamment été ennuyé par les « purge » de mon fichier vcl)

echo "deb http://repo.varnish-cache.org/debian/ squeeze varnish-3.0" >> /etc/apt.sources.list
apt-get update && apt-get install varnish

Ensuite j’ai crée des scripts d’init personnalisés, un par vhost.

Les paramètres que j’ai modifiés sont :

  • NOM : un nom premettant de différencier les instances de varnishncsa
  • SITE : le nom de mon site web
  • DESC : idem
  • PIDFILE : un nom de process par instance
  • LOGFILE : indique le fichier où on enregistres nos logs
  • HEADER : permet, avec l’option -m, de matcher une regex, ici tout ce qui concerne notre site
  • DAEMON_OPTS : permet d’utiliser une regex pour différencier les flux en fonction du header « host » des requêtes.
  • log_daemon_msg : la variable NAME a été changée par NOM de façon à personnaliser les messages qui s’inscrivent dans le terminal.
#! /bin/sh
### BEGIN INIT INFO
# Provides: varnishncsa
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start HTTP accelerator log daemon
# Description: This script provides logging for varnish
### END INIT INFO

# Source function library
. /lib/lsb/init-functions

NOM=varnishncsasite1
NAME=varnishncsa
SITE=site1.blml.fr
DESC="HTTP accelerator log deamon for site1"
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/$NAME
PIDFILE=/var/run/$NAME/$NOM.pid
LOGFILE=/var/log/varnish/site1.blml.fr.access.log
USER=varnishlog
HEADER="-m RxHeader:${SITE}$"
DAEMON_OPTS="${HEADER} -a -w ${LOGFILE} -D -P ${PIDFILE}"

# Include defaults if available
if [ -f /etc/default/$NAME ] ; then
 . /etc/default/$NAME
fi

# If unset, or set to "0" or "no", exit
if [ -z "${VARNISHNCSA_ENABLED}" ] || \
 [ "${VARNISHNCSA_ENABLED}" = "0" ] || \
 [ "${VARNISHNCSA_ENABLED}" = "no" ]; then
 exit 0;
fi

test -x $DAEMON || exit 0

start_varnishncsa() {
 output=$(/bin/tempfile -s.varnish)
 log_daemon_msg "Starting $DESC" "$NOM"
 create_pid_directory
 if start-stop-daemon --start --quiet --pidfile ${PIDFILE} \
 --chuid $USER --exec ${DAEMON} -- ${DAEMON_OPTS} \
 > ${output} 2>&1; then
 log_end_msg 0
 else
 log_end_msg 1
 cat $output
 exit 1
 fi
 rm $output
}

stop_varnishncsa(){
 log_daemon_msg "Stopping $DESC" "$NOM"
 if start-stop-daemon --stop --quiet --pidfile $PIDFILE \
 --retry 10 --exec $DAEMON; then
 log_end_msg 0
 else
 log_end_msg 1
 fi
}

reload_varnishncsa(){
 log_daemon_msg "Reloading $DESC" "$NOM"
 if kill -HUP $(cat $PIDFILE) >/dev/null 2>&1; then
 log_end_msg 0
 else
 log_end_msg 1
 exit 1
 fi
}

status_varnishncsa(){
 status_of_proc -p "${PIDFILE}" "${DAEMON}" "${NOM}"
}

create_pid_directory() {
 install -o $USER -g $USER -d $(dirname $PIDFILE)
}

case "$1" in
 start)
 start_varnishncsa
 ;;
 stop)
 stop_varnishncsa
 ;;
 reload)
 reload_varnishncsa
 ;;
 status)
 status_varnishncsa
 ;;
 restart|force-reload)
 $0 stop
 $0 start
 ;;
 *)
 log_success_msg "Usage: $0 {start|stop|restart|force-reload|reload}"
 exit 1
 ;;
esac

exit 0

.

A partir de ce fichier, un simple sed va nous permettre de créer nos autres scripts d’init :

.

 sed s/site1/site2/g /etc/init.d/varnishncsasite1> /etc/init.d/varnishncsasite2  

.

Reste à lancer nos scripts :

.

root@local:~# /etc/init.d/varnishncsasite1 start
[ ok ] Starting HTTP accelerator log deamon for site1: varnishncsasite1.
root@local:~# /etc/init.d/varnishncsasite2 start
[ ok ] Starting HTTP accelerator log deamon for site2: varnishncsasite2.

.

On vérifie avec tail que l’on voit bien nos logs dans les fichiers respectifs sous /var/log/varnish/

 .

Evidemment, ne pas oublier de rajouter ces scripts au démarrage :


update-rc.d varnishncsasite1 defaults
update-rc.d varnishncsasite2 defaults

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Time limit is exhausted. Please reload the CAPTCHA.