Si vous souhaitez obtenir des statistique sur l’utilisation de Varnish vous avez le choix entre plusieurs solutions :
- Varnish Plus, qui est une version payant et propose un outil VAC (Varnish Administration Console). Il permet de visualiser en temps réel des statistiques sur l’utilisation de Varnish
- collectd qui est un daemon qui permet de générer des graphique d’utilisation d’un serveur, et possède un plugin Varnish
L’une de deux solutions est payante et l’autre me semble un peu compliqué à mettre en place et ne me permet pas d’obtenir des données que pour un certain domaine.
Je me suis donc tourné vers Google Analytics qui réponds à mes deux problématiques. Mon but étant d’obtenir des stats sur l’utilisation de Varnish à savoir les HIT vs les MISS, et tant qu’à faire avoir les listes des URLs en MISS pour tenter d’identifier un quelconque problème de cache.
Pour stocker ces données dans Google Analytics nous devons créer une dimension personnalisée, et lui envoyer cette nouvelle information. Nous allons utiliser Varnish pour qu’il enregistre cette information de HIT ou MISS dans un cookie dont ensuite la valeur sera envoyée par le navigateur à Google.
Edit : Mise à jour de la version du varnish-module
Tout d’abord une vidéo dans laquelle nous détaillons le fonctionnement des subroutines de Varnish, ainsi que la configuration de Varnish à déployer.
Préparation de Varnish
Afin que Varnish puisse setter un Cookie il faut installer les vmods, qui sont des extensions permettant d’étendre les fonctionnalités de Varnish. La liste de modules est disponible ici.
Pour compiler les modules, vous avez besoin des sources de Varnish que nous installons via un apt-get install
apt-get install varnish-dev
Ensuite il vous faut télécharger l’archive contenant les sources et compiler le tout. Voici l’ensemble des commandes à suivre :
wget https://download.varnish-software.com/varnish-modules/varnish-modules-0.12.1.tar.gz tar xvzf varnish-modules-0.12.1.tar.gz cd varnish-modules-0.12.1 ./configure make make check # optional sudo make install
Vous pouvez vérifier que l’installation s’est bien passée en allant lister le répertoire /usr/lib/varnish/vmods/ qui doit contenir l’ensemble des nouveaux modules.
Configuration de Varnish
Il nous faut maintenant éditer notre fichier de configuration pour d’une part importer le module header, en ajoutant tout en haut du fichier la ligne suivante :
import header;
Puis nous allons également ajouter du code dans la subroutine vcl_deliver, qui est la dernière subroutine appelée dans le process de Varnish lors d’un HIT ou MISS. Nous allons différencier les HIT des MISS en fonction de si l’object a un hits supérieure à 0, et la raison des MISS qui est stocké dans le header X-Pass. Puis setter le cookie via la commande header.append
if (obj.hits > 0) { set resp.http.X-Cache = "HIT"; } else { set resp.http.X-Cache = "MISS : " + req.http.X-Pass; } header.append(resp.http.Set-Cookie, "VarnishCache="+resp.http.X-Cache+";path=/");
La valeur du X-Pass est setté dans la vlc_recv, voici un exemple :
# Don't cache some URLs (security in case missing header in PHP) if (req.url ~ "/(.*)sitemap(.*).xml") { set req.http.X-Pass = "Urls"; return(pass); }
Google Analytics
La création d’une variable personnalisée ainsi que la configuration de Google Analytics est expliquée dans la vidéo suivante. Le code utilisé se trouve dans la suite de l’article.
La fonction javascript suivante permet de récupérer la valeur d’un cookie dans une variable.
function getCookie(cname) { var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); var clen = ca.length; for(var i = 0; i < clen; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } var varnishCache = getCookie('VarnishCache');
Il nous faut ensuite envoyer cette valeur à Google, pour se faire, il faut utiliser le code suivant, qui permet de setter la valeur d’une dimension personnalisée. L’envoi de la valeur se fait au moment du pageview. Dans mon exemple, je n’ai créé qu’une dimension personnalisée, d’où l’index 1 après le mot dimension.
//get('set', 'dimension[index]', value) ga('set', 'dimension1', varnishCache); ga('send', 'pageview');
Création d’une dimension personnalisée
Vous avez la possibilité de créer 20 dimensions personnalisées. Elles peuvent être activées / désactivées mais en aucun cas supprimées.
Aller sur la page d’administration de votre compte.
Dans la partie Propriété :
- Définition personnalisée => dimensions personnalisée
- Nouvelle dimension
Sur le formulaire qui va apparaître nous n’avez besoin de renseigner que le nom
Nous n’avez plus qu’à créer un rapport personnalisé pour obtenir les statistiques entre les HIT et les MISS. Pour ce faire aller dans le menu Personnalisation puis Rapports personnalisés
Voici un exemple de rapport personnalisé que vous pouvez créer. Ce type de rapport vous permet de remonter le nombre de pages vues en fonction des HIT ou MISS et d’obtenir la liste des URLs en MISS.
Vous obtiendrez ce genre de rapport
Avec ce nouveau rapport qui vous donne des stats des HIT vs les MISS vous pouvez détecter si vous avez un soucis de cache, et ainsi le corriger le cas échéant.