Как измерить эффективность кеширования DNS / кэшированных элементов?

16

Я настроил dnsmasqDNS-сервер только для кэширования на сервере Debian, и он работает хорошо (я вижу улучшение времени отклика DNS с помощью dig).

Тем не менее, я хотел бы понять, что dnsmasqтакое кэширование в любой момент времени, чтобы я мог начать думать об эффективности (то есть уровне попаданий), которой я достигаю.

Я просмотрел справочные страницы и веб-страницу и не могу найти информацию о том, что dnsmasqкеширует в любой момент (в отличие от того, что вы можете сделать, например, с данными об аренде, которые хранятся в файле dnsmasq.lease).

Является ли dnsmasqпроведен кэш DNS в памяти только? Или я должен сделать некоторые файлы журнала?

binaryfrost
источник

Ответы:

22

У меня нет доступа, dnsmasqно в соответствии с этой темой под названием: dnsmasq это кэширование? Вы можете отправить сигнал USR1 dnsmasqпроцессу, заставив его сбросить статистику в системный журнал.

$ sudo pkill -USR1 dnsmasq

Затем просмотрите системные журналы:

$ 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

ПРИМЕЧАНИЕ: я считаю, чтоdnsmasq сохраняет свой кэш в оперативной памяти.

Поэтому, если вы хотите сбросить кэш, вам нужно включить -qпереключатель при dnsmasqего вызове. Это упомянуто на dnsmasqстранице руководства :

   -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
источник
1
Спасибо, это, кажется, работает, и производит вывод, подобный: 20 октября 08:39:17 dnsmasq [4846]: время 1413790757 20 октября 08:39:17 dnsmasq [4846]: размер кэша 4096, 0/59976 вставки кэша повторно использовались неиспользованные записи кэша. 20 октября 08:39:17 dnsmasq [4846]: запросы переадресованы 13376, запросы локально отвечены 1326 Итак, я предполагаю, что общее число попаданий в записи кэша составляет: 1326/14702, что составляет около 9%. Чем дольше я оставляю его работающим, и чем больше сайтов с теми же сайтами я посещаю, тем, наверное, может закрасться.
бинарный мороз
На OpenWRT основаны маршрутизаторы logread | tail.
Брайан
1
@binaryfrost есть идеи об использовании памяти на кешированный адрес DNS? допустим, если у меня будет 500 000 кешей, будет ли полная запись, сколько памяти предполагается использовать?
satch_boogie
Системы, использующие systemd, не имеют / var / log / syslog, и я не могу найти какие-либо записи для dnsmasq после выдачи SIGUSR1 в journalctlвыходных данных. Есть ли способ явно указать, где dnsmasq должен выводить записи?
Сергей Колодяжный
2

Еще один способ получить эту информацию со страницы руководства:

Статистика кэша также доступна в DNS как ответы на запросы класса CHAOS и типа TXT в привязке домена. Доменными именами являются cachesize.bind, inserttions.bind, evictions.bind, misses.bind, hit.bind, auth.bind и servers.bind. Пример команды для запроса этого с использованием утилиты dig:

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

Если у вас есть что-то вроде systemd-resolv в вашей системе, вам нужно напрямую запросить сервер:

   dig +short chaos txt hits.bind @serverIP
NeroP
источник