Como medir a eficiência do cache DNS / itens em cache?

16

Eu configurei dnsmasqcomo um servidor DNS somente para cache em um servidor Debian e está funcionando bem (estou vendo tempos de resposta de DNS aprimorados via dig).

No entanto, eu gostaria de entender o que dnsmasqestá armazenando em cache a qualquer momento, para que eu possa começar a pensar na eficiência (ou seja, na taxa de acertos) que estou alcançando.

Eu dei uma olhada nas páginas de manual e na web e não consigo encontrar como vejo o que dnsmasqestá armazenando em cache a qualquer momento (ao contrário do que você pode fazer pelas concessões, por exemplo, que são mantidas em um arquivo dnsmasq.lease).

O dnsmasqcache DNS é mantido apenas na memória? Ou eu tenho que fazer alguma troca de arquivo de log?

binaryfrost
fonte

Respostas:

22

Eu não tenho acesso, dnsmasqmas de acordo com este tópico intitulado: dnsmasq está em cache? você pode enviar o sinal USR1 para o dnsmasqprocesso, fazendo com que ele despeje estatísticas no log do sistema.

$ sudo pkill -USR1 dnsmasq

Em seguida, consulte os logs do sistema:

$ 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

NOTA: Acredito que dnsmasqmantém seu cache na RAM.

Portanto, se você quiser despejar o cache, precisará ativar o -qswitch quando dnsmasqfor chamado. Isso é mencionado na dnsmasqpágina do manual:

   -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
fonte
1
Obrigado, isso parece funcionar e produz uma saída semelhante a: 20 de outubro 08:39:17 dnsmasq [4846]: time 1413790757 20 de outubro 08:39:17 dnsmasq [4846]: tamanho do cache 4096, 0/59976 inserções de cache re usou entradas de cache não expiradas. 20 de outubro 08:39:17 dnsmasq [4846]: consultas encaminhadas 13376, consultas respondidas localmente 1326 Portanto, acho que o total de ocorrências de entradas de cache é: 1326/14702, que é de cerca de 9%. Quanto mais tempo deixo em execução e mais sites dos mesmos sites que eu visito, acho que isso pode surgir.
Binaryfrost # 20/14
Nos roteadores baseados no OpenWRT, use logread | tail.
Brian
1
@binaryfrost alguma idéia sobre o uso de memória por endereço de cache em DNS? digamos que se eu tiver 500.000 tamanho de cache, os registros completos quanta memória é esperada para ser usada?
satch_boogie
Os sistemas que usam systemd não possuem / var / log / syslog e não consigo encontrar nenhuma entrada para o dnsmasq depois de emitir o SIGUSR1 em journalctl saída. Existe uma maneira de especificar explicitamente onde o dnsmasq deve despejar os registros?
Sergiy Kolodyazhnyy
2

Outra maneira de obter essas informações na página de manual:

As estatísticas de cache também estão disponíveis no DNS como respostas a consultas da classe CHAOS e digite TXT na ligação de domínio. Os nomes de domínio são cachesize.bind, insertions.bind, despejos.bind, misses.bind, hits.bind, auth.bind e servers.bind. Um comando de exemplo para consultar isso, usando o utilitário dig, seria

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

Se você tiver algo como systemd-resolve no seu sistema, precisará consultar o servidor diretamente com:

   dig +short chaos txt hits.bind @serverIP
NeroP
fonte