mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-09 04:12:08 -04:00
Add DTrace support for resolver queries
When `fctx_query()` is called, a DTrace probe (if enabled) prints the fetch context address, the upstream server address and port, and the latest known SRTT for the server.
This commit is contained in:
parent
fe8f3d9e81
commit
844eee509b
4 changed files with 39 additions and 2 deletions
29
dtrace/resolver-trace.stp
Executable file
29
dtrace/resolver-trace.stp
Executable file
|
|
@ -0,0 +1,29 @@
|
|||
#!/usr/bin/env stap
|
||||
#
|
||||
# resolver-trace.stp - trace resolver queries
|
||||
#
|
||||
# Prints every resolver query to an upstream DNS server, each trace is
|
||||
# identified by the fetch context. The trace contains the server IP, port and
|
||||
# SRTT value.
|
||||
#
|
||||
# Usage:
|
||||
# sudo stap resolver-trace.stp /path/to/named
|
||||
# sudo stap resolver-trace.stp /path/to/named -x <pid>
|
||||
#
|
||||
# Output columns: elapsed milliseconds, fetch context pointer, server socket
|
||||
# address and SRTT.
|
||||
|
||||
global start_time
|
||||
|
||||
probe begin {
|
||||
start_time = gettimeofday_ms()
|
||||
printf("%-10s %-16s %-46s %s\n", "ms", "fctx", "server", "SRTT")
|
||||
}
|
||||
|
||||
probe process(@1).mark("resolver_query") {
|
||||
printf("%-10d %-16p %-46s %d\n",
|
||||
gettimeofday_ms() - start_time,
|
||||
$arg1,
|
||||
user_string($arg2),
|
||||
$arg3)
|
||||
}
|
||||
|
|
@ -10,7 +10,7 @@
|
|||
# information regarding copyright ownership.
|
||||
|
||||
probe_hdr = dtrace_header.process('probes-dns.d')
|
||||
probe_src = [probe_hdr, files('deleg.c', 'xfrin.c')]
|
||||
probe_src = [probe_hdr, files('deleg.c', 'resolver.c', 'xfrin.c')]
|
||||
|
||||
# dns_inc += include_directories('include')
|
||||
dns_inc_p += include_directories('.')
|
||||
|
|
@ -145,7 +145,6 @@ dns_srcset.add(
|
|||
'remote.c',
|
||||
'request.c',
|
||||
'resconf.c',
|
||||
'resolver.c',
|
||||
'result.c',
|
||||
'rootns.c',
|
||||
'rpz.c',
|
||||
|
|
|
|||
|
|
@ -38,4 +38,5 @@ provider libdns {
|
|||
probe xfrin_recv_try_axfr(void *, char *, int);
|
||||
probe xfrin_sent(void *, char *, int);
|
||||
probe xfrin_start(void *, char *);
|
||||
probe resolver_query(void *, char *, int);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -81,6 +81,7 @@
|
|||
#include <dns/zoneproperties.h>
|
||||
|
||||
#include "dns/view.h"
|
||||
#include "probes-dns.h"
|
||||
|
||||
#ifdef WANT_QUERYTRACE
|
||||
#define RTRACE(m) \
|
||||
|
|
@ -2056,6 +2057,13 @@ fctx_query(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo,
|
|||
|
||||
FCTXTRACE("query");
|
||||
|
||||
if (LIBDNS_RESOLVER_QUERY_ENABLED()) {
|
||||
char addrstr[ISC_SOCKADDR_FORMATSIZE];
|
||||
isc_sockaddr_format(&addrinfo->sockaddr, addrstr,
|
||||
sizeof(addrstr));
|
||||
LIBDNS_RESOLVER_QUERY(fctx, addrstr, addrinfo->srtt);
|
||||
}
|
||||
|
||||
res = fctx->res;
|
||||
|
||||
srtt = addrinfo->srtt;
|
||||
|
|
|
|||
Loading…
Reference in a new issue