Munin est un outil bien pratique pour les tests de charge. Il est packagé par Debian dans sa version 2.0.49 avec des plugins pour quasiment tous les services. Ca tombe bien pour évaluer le comportement de Varnish, puisqu’on a un plugin Varnish présent dans le répertoire des plugins : /usr/share/munin/plugins/varnish_
Pour l’installer, rien de plus simple, il suffit de faire un lien symbolique sur un des « aspects » disponibles pour ce plugin, qu’on obtient par la commande :
1 2 3 4 5 6 7 8 9 10 11 12 |
aa2:~# munin-run varnish_transfer_rates suggest memory_usage request_rate backend_traffic transfer_rates threads bad uptime expunge objects hit_rate aa2:~# |
Mais avant de pouvoir lancer cette commande pour connaître les « aspects » de ce plugin, il fallait déjà faire un lien symbolique, donc lire le contenu du plugin ! La on choisit l’aspect « transfer_rates ». Pour installer le plugin qui va fournir les « transfer_rates » de Varnish, il faut faire le lien suivant :
1 2 |
aa2:~# ln -s /usr/share/munin/plugins/varnish_ /etc/munin/plugins/varnish_transfer_rates aa2:~# |
A cette étape, la configuration est prête pour tester le plugin. On lance la commande suivante pour vérifier les valeurs que renvoie le plugin :
1 2 3 4 5 6 |
aa2:~# munin-run varnish_transfer_rates ..... Could not get hold of varnishd, is it running? no element found at line 1, column 0, byte 0 at /usr/lib/x86_64-linux-gnu/perl5/5.28/XML/Parser.pm line 187. aa2:~# |
Pas de réponse, on attend les ….. puis on obtient une erreur ! Cette erreur provient de varnishstat. Quand on lance varnishstat pourtant tout fonctionne :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
aa2:~# varnishstat -x <?xml version="1.0"?> <varnishstat timestamp="2021-03-08T22:33:50"> <stat> <name>MGT.uptime</name> <value>520285</value> <flag>c</flag> <format>d</format> <description>Management process uptime</description> </stat> <stat> <name>MGT.child_start</name> <value>1</value> <flag>c</flag> <format>i</format> <description>Child process started</description> </stat> ... ... </varnishstat> aa2:~# |
Alors que se passe-t-il ? On essaie avec les options de débug :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
aa2:~# munin-run --debug --pidebug varnish_transfer_rates # Processing plugin configuration from /etc/munin/plugin-conf.d/README # Processing plugin configuration from /etc/munin/plugin-conf.d/dhcpd3 # Processing plugin configuration from /etc/munin/plugin-conf.d/munin-node # Processing plugin configuration from /etc/munin/plugin-conf.d/spamstats # Processing plugin configuration from /etc/munin/plugin-conf.d/varnish4_ # Processing plugin configuration from /etc/munin/plugin-conf.d/varnish5_ # Processing plugin configuration from /etc/munin/plugin-conf.d/varnish_ # Setting /rgid/ruid/ to /113/65534/ # Setting /egid/euid/ to /113 113/65534/ # Setting up environment # About to run '/etc/munin/plugins/varnish_transfer_rates' ..... Could not get hold of varnishd, is it running? no element found at line 1, column 0, byte 0 at /usr/lib/x86_64-linux-gnu/perl5/5.28/XML/Parser.pm line 187. aa2:~# |
Toujours la même erreur. En y regardant de plus près on s’aperçoit que le plugin est lancé avec l’euid 113 qui est l’id de l’utilisateur munin sur ma machine. Mais comme le process Varnish tourne sous l’utilisateur vcache, le plugin ne peut pas contacter Varnish, d’où l’erreur. La méthode pour corriger ce problème est de lancer le plugin Varnish avec l’utilisateur « vcache ». Pour ceci, on crée un fichier de configuration du plugin qui indique d’utiliser « vcache » :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
aa2:~# cat /etc/munin/plugin-conf.d/varnish_ [varnish_*] user vcache aa2:~# aa2:~# munin-run varnish_transfer_rates aa2:~# aa2:~# munin-run --debug --pidebug varnish_transfer_rates # Processing plugin configuration from /etc/munin/plugin-conf.d/README # Processing plugin configuration from /etc/munin/plugin-conf.d/dhcpd3 # Processing plugin configuration from /etc/munin/plugin-conf.d/munin-node # Processing plugin configuration from /etc/munin/plugin-conf.d/spamstats # Processing plugin configuration from /etc/munin/plugin-conf.d/varnish4_ # Processing plugin configuration from /etc/munin/plugin-conf.d/varnish5_ # Processing plugin configuration from /etc/munin/plugin-conf.d/varnish_ # Setting /rgid/ruid/ to /113/109/ # Setting /egid/euid/ to /113 113/109/ # Setting up environment # About to run '/etc/munin/plugins/varnish_transfer_rates' aa2:~# |
Le plugin fonctionne, mais ne renvoie rien !!!
On tombe sur le bug : https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=959812
En cherchant les plugins Varnish pour Munin, on trouve beaucoup de choses. Qui vont de Varnish 2 à Varnish 5. Mais sous Buster, on est en Varnish 6. Tous les plugins Varnish ont la même source, la version de 2009. Mais on ne sait pas exactement avec quelle version de Varnish ils fonctionnent. J’en ai essayé 3 différents, et sans aucun doute, le bon est celui-ci : https://gallery.munin-monitoring.org/plugins/munin-contrib/varnish5_/
Il faut récupérer le source, faire le lien dans le répertoire des plugins et mettre l’utilisateur « vcache » ou « root » dans la configuration. Là, j’ai utilisé le hit_rate comme « aspect » :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
aa2:~# ln -s /usr/share/munin/plugins/varnish5_ /etc/munin/plugins/varnish5_hit_rate aa2:~# aa2:~# cat /etc/munin/plugin-conf.d/varnish5_ [varnish5_*] user vcache aa2:~# aa2:~# munin-run varnish5_hit_rate client_req.value 2955 cache_hitpass.value 0 cache_hitmiss.value 12 cache_hit.value 2228 cache_miss.value 715 aa2:~# |
On a bien un résultat cette fois !
Remarque, le client_req est calculé comme la somme des 4 valeurs cache_*. Alors que la commande varnishstat renvoie un client_req de 9585 ! Cette dernière valeur représente toutes les requêtes reçues par Varnish, y compris les « pass ». Donc avec le plugin « varnish5_ » on n’a que les requêtes qui sont sensées être en cache. Ce qui est logique pour un calcul de hit ratio, mais qui ne montre pas la totalité des requêtes reçues.
On retrouve ci-dessus un hit ratio dont la somme des 4 composantes fait 100.
Références :
Munin
Paquet Munin pour Debian Buster