mirror of
https://github.com/coredns/coredns.git
synced 2025-10-27 08:14:18 -04:00
- added dnstapEncoder object which incapsulates marshalling of dnstap
messages to protobuf and writing data to connection
- dnstapEncoder writes data directly to connection object. It doesn't
use the framestream's "write" method, because it writes data to
intermediate buffer (bufio.Writer) which leads to unnecessary
data copying and drops the performance
- dnstapEncoder reuses a preallocated buffer for marshalling dnstap
messages. Many messages are added to the same buffer. They are
separated with a "frame length" 4-byte values, so the buffer content
is writen to connection object in the format compatible with
framestream library
- added test which guarantees that dnstapEncoder output is the same
as framestream Encoder output
- the performance increase is about 50% in (dio *dnstapIO) serve() method
of dnstap plugin. The overall coredns performance increase is about 10%
in the following configuration:
.:1053 {
erratic {
drop 0
truncate 0
delay 0
}
dnstap tcp://127.0.0.1:6000 full
errors stdout
}
tested with dnsperf tool
dnstap
dnstap enables logging to dnstap, a flexible, structured binary log format for DNS software: http://dnstap.info.
There is a buffer, expect at least 13 requests before the server sends its dnstap messages to the socket.
Syntax
dnstap SOCKET [full]
- SOCKET is the socket path supplied to the dnstap command line tool.
fullto include the wire-format DNS message.
Examples
Log information about client requests and responses to /tmp/dnstap.sock.
dnstap /tmp/dnstap.sock
Log information including the wire-format DNS message about client requests and responses to /tmp/dnstap.sock.
dnstap unix:///tmp/dnstap.sock full
Log to a remote endpoint.
dnstap tcp://127.0.0.1:6000 full
Dnstap command line tool
% go get github.com/dnstap/golang-dnstap
% cd $GOPATH/src/github.com/dnstap/golang-dnstap/dnstap
% go build
% ./dnstap
The following command listens on the given socket and decodes messages to stdout.
% dnstap -u /tmp/dnstap.sock
The following command listens on the given socket and saves message payloads to a binary dnstap-format log file.
% dnstap -u /tmp/dnstap.sock -w /tmp/test.dnstap
Listen for dnstap messages on port 6000.
% dnstap -l 127.0.0.1:6000