dnstapはDNSソフトウェア向けの柔軟な構成化バイナリログフォーマットです1。Protocol Buffersを使用して、実装ニュートラルなフォーマットでDNSソフトウェア内で行われるイベントを符号化します。
dnstapはサーバで交換されたすべてのDNSメッセージを、リモートコンピューター(IPアドレス、ポート)と時間に関する情報と共に符号化できます。クライアントのクエリや応答のみならず、他のネームサーバからリクエストされたプロキシ要求やその他の情報も含まれます。
この例ではdnstapコマンドラインツールの出力を表示して、dnstapが提供できる情報の種類を示します。
type: MESSAGE
message:
type: CLIENT_RESPONSE
socket_family: INET
socket_protocol: UDP
query_address: 127.0.0.1
query_port: 47969
response_message: |
;; opcode: QUERY, status: NOERROR, id: 47163
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;example.org. IN A
;; ANSWER SECTION:
example.org. 86339 IN A 93.184.216.34
dnstapプラグインはCoreDNS-010に追加されています.現在のところ、クライアントレベルのメッセージのみをログできます。追加の種類の交換に対するロギングは実装される予定です。
dnstapプラグインはdnstapコマンドラインツールと組み合わせて使用されます。ソケットを使用して通信します。つまり、このツールがリッスンされている限り、プラグインはログを送信します。
dnstapプラグインを使用して開始するには、サーバブロックのCorefileに追加します。
dnstap /tmp/dnstap.sock full
dnstapプラグインにfull
オプションを指定すると、DNSメッセージの全(バイナリ)データも含まれます。dnstapツールを使用して、CoreDNSが書き込みを行っているソケットから読み取ることができるようになりました。
$ dnstap -u /tmp/dnstap.sock
または、dnstapソケットでリッスンし、メッセージペイロードをバイナリdnstap形式ログファイルに格納します。
$ dnstap -u /tmp/dnstap.sock -w /tmp/july.dnstap
その後、7月のログをYAML形式で読み取ります。
$ dnstap -r /tmp/july.dnstap -y