Comment mesurer l'efficacité du cache DNS / les éléments mis en cache?

16

J'ai configuré en dnsmasqtant que serveur DNS de mise en cache uniquement sur un serveur Debian, et cela fonctionne bien (je constate des temps de réponse DNS améliorés via dig).

Cependant, j'aimerais comprendre ce qu'est la dnsmasqmise en cache à tout moment, afin que je puisse commencer à penser à l'efficacité (c'est-à-dire le taux de réussite) que j'atteins.

J'ai jeté un œil aux pages de manuel et au Web, et je ne trouve pas comment je vois ce qui dnsmasqest mis en cache à tout moment (contrairement à ce que vous pouvez faire pour les baux par exemple, qui sont conservés dans un fichier dnsmasq.lease).

Le dnsmasqcache DNS est-il conservé uniquement en mémoire? Ou dois-je faire un munging de fichier journal?

binaryfrost
la source

Réponses:

22

Je n'ai pas accès à dnsmasqmais selon ce fil intitulé: dnsmasq est-il en cache? vous pouvez envoyer le signal USR1 au dnsmasqprocessus, provoquant le vidage des statistiques dans le journal système.

$ sudo pkill -USR1 dnsmasq

Consultez ensuite les journaux système:

$ sudo tail /var/log/syslog
Jan 21 13:37:57 dnsmasq[29469]: time 1232566677
Jan 21 13:37:57 dnsmasq[29469]: cache size 150, 0/475 cache insertions re-used unexpired cache entries.
Jan 21 13:37:57 dnsmasq[29469]: queries forwarded 392, queries answered locally 16
Jan 21 13:37:57 dnsmasq[29469]: server 208.67.222.222#53: queries sent 206, retried or failed 12
Jan 21 13:37:57 dnsmasq[29469]: server 208.67.220.220#53: queries sent 210, retried or failed 6

REMARQUE: je crois que dnsmasqconserve son cache en RAM.

Donc, si vous souhaitez vider le cache, vous devrez activer le -qcommutateur lorsqu'il dnsmasqest invoqué. Ceci est mentionné dans la dnsmasqpage de manuel:

   -d, --no-daemon
        Debug mode: don't fork to the background, don't write a pid file, 
        don't change user id, generate a complete cache dump  on
        receipt on SIGUSR1, log to stderr as well as syslog, don't fork new 
        processes to handle TCP queries. Note that this option is for use in 
        debugging only, to stop dnsmasq daemonising in production, use -k.

   -q, --log-queries
        Log the results of DNS queries handled by dnsmasq. Enable a full 
        cache dump on receipt of SIGUSR1.
slm
la source
1
Merci, cela semble fonctionner et produit une sortie similaire à: 20 oct 08:39:17 dnsmasq [4846]: heure 1413790757 20 oct 08:39:17 dnsmasq [4846]: taille de cache 4096, 0/59976 insertions de cache re utilisé des entrées de cache non expirées. 20 octobre 08:39:17 dnsmasq [4846]: requêtes transmises 13376, requêtes répondues localement 1326 Donc je suppose que le nombre total d'accès au cache est: 1326/14702, ce qui représente environ 9%. Plus je le laisse fonctionner et plus il y a de sites des mêmes sites que je visite, je suppose que cela pourrait remonter.
binaryfrost
Sur les routeurs basés sur OpenWRT, utilisez logread | tail.
Brian
1
@binaryfrost une idée de l'utilisation de la mémoire par adresse DNS mise en cache? disons que si j'ai 500 000 de cache, les enregistrements satisferont-ils la quantité de mémoire qui devrait être utilisée?
satch_boogie
Les systèmes qui utilisent systemd n'ont pas / var / log / syslog, et je ne trouve aucune entrée pour dnsmasq après avoir émis SIGUSR1 en journalctlsortie. Existe-t-il un moyen de spécifier explicitement où dnsmasq doit vider les enregistrements?
Sergiy Kolodyazhnyy
2

Une autre façon d'obtenir ces informations à partir de la page de manuel:

Les statistiques de cache sont également disponibles dans le DNS comme réponses aux requêtes de classe CHAOS et de type TXT dans le domaine bind. Les noms de domaine sont cachesize.bind, insertions.bind, evictions.bind, misses.bind, hits.bind, auth.bind et servers.bind. Un exemple de commande pour l'interroger, en utilisant l'utilitaire dig serait

   dig +short chaos txt cachesize.bind
   dig +short chaos txt hits.bind
   dig +short chaos txt misses.bind

Si vous avez quelque chose comme systemd-resolver sur votre système, vous devrez interroger le serveur directement avec:

   dig +short chaos txt hits.bind @serverIP
NeroP
la source