BIND 9.16.0以降のdigでYAML形式の出力が出来るようになっていた

現在携わっている業務でDNSのパフォーマンス監視を考えていた。
そこで何気なく dig コマンドのヘルプを呼び出したのだが、面白いものを見つけてしまった。

1
2
3
4
5
6
7
8
ubuntu@basecamp:~$ dig -h | head -2
Usage: dig [@global-server] [domain] [q-type] [q-class] {q-opt}
{global-d-opt} host [@local-server] {local-d-opt}
(...)
+[no]yaml (Present the results as YAML)
(...)
-h (print help and exit)
-v (print version and exit)

+[no]yaml (Present the results as YAML)

結果をYAMLで返してくれるということか?

早速試してみよう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
ubuntu@basecamp:~$ dig +yaml @ns1.google.com. google.com. soa
-
type: MESSAGE
message:
type: AUTH_RESPONSE
query_time: !!timestamp 2023-11-28T12:34:11.745Z
response_time: !!timestamp 2023-11-28T12:34:11.769Z
message_size: 333b
socket_family: INET
socket_protocol: UDP
response_address: "216.239.32.10"
response_port: 53
query_address: "0.0.0.0"
query_port: 0
response_message_data:
opcode: QUERY
status: NOERROR
id: 42342
flags: qr aa rd
QUESTION: 1
ANSWER: 1
AUTHORITY: 4
ADDITIONAL: 9
OPT_PSEUDOSECTION:
EDNS:
version: 0
flags:
udp: 512
QUESTION_SECTION:
- google.com. IN SOA
ANSWER_SECTION:
- google.com. 60 IN SOA ns1.google.com. dns-admin.google.com. 589072609 900 900 1800 60
AUTHORITY_SECTION:
- google.com. 345600 IN NS ns3.google.com.
- google.com. 345600 IN NS ns1.google.com.
- google.com. 345600 IN NS ns4.google.com.
- google.com. 345600 IN NS ns2.google.com.
ADDITIONAL_SECTION:
- ns3.google.com. 345600 IN A 216.239.36.10
- ns3.google.com. 345600 IN AAAA 2001:4860:4802:36::a
- ns1.google.com. 345600 IN A 216.239.32.10
- ns1.google.com. 345600 IN AAAA 2001:4860:4802:32::a
- ns4.google.com. 345600 IN A 216.239.38.10
- ns4.google.com. 345600 IN AAAA 2001:4860:4802:38::a
- ns2.google.com. 345600 IN A 216.239.34.10
- ns2.google.com. 345600 IN AAAA 2001:4860:4802:34::a

これまでdigの実行結果を頑張ってパースしたことが何度もあったが、YAMLであればほとんどの言語処理系で自由に扱うことが可能でしょう。

BIND 9.16.0のリリースが2020年の2月ですから、もう4年近く経つわけですが気付いていませんでした。
(気付いてすぐ忘れた可能性もあります…)

ちなみに、 dig には -u というオプションがあります。

1
-u                  (display times in usec instead of msec)

-u オプションを追加すると、

1
2
3
ubuntu@basecamp:~$ dig +yaml -u @ns1.google.com. google.com. soa | grep -F time
query_time: !!timestamp 2023-11-29T13:30:07.868708Z
response_time: !!timestamp 2023-11-29T13:30:07.894514Z

このように、時刻の表記がミリ秒精度からマイクロ秒精度に変わり、大変便利です。

皆様も楽しいDNS生活をお送りください。

このエントリーをはてなブックマークに追加