#NSDで動的にdebugログをだす
NSDでは標準のログの他に、--enable-checkingオプション付きでコンパイルすると、debug logを出すことができます。
しかし、nsd起動時の引数として渡す必要があり、nsd-controlではlog verbosityは変えることができますが、debug logのON/OFFはできません。
そこで、gdbで動いているプロセスにattachしてdebug logを有効にします。
gdbをインストールしていない場合は、gdbをインストールします
$ sudo yum install gdb
nsdのPIDを探します
$ ps -ef | grep nsd
nsd 19685 1 0 23:28 ? 00:00:00 /var/service/ans/nsd/sbin/nsd
nsd 19686 19685 0 23:28 ? 00:00:00 /var/service/ans/nsd/sbin/nsd
nsd 19691 19686 0 23:28 ? 00:00:00 /var/service/ans/nsd/sbin/nsd
gdbでプロセスにattachします。
$ sudo gdb /usr/local/sbin/nsd
(gdb)attach 22997
debug levelの変数の値を変更します。
(gdb)print nsd_debug_level
$1 = 0 # debug leveが0の状態
(gdb)print nsd_debug_level=1
$2 = 1
(gdb)quit
なお、attach中はそのプロセスの処理が止まります。
今回は、ゾーン転送周りのdebugログを出したかったので、PPID 1のプロセスをattachしています。そのため、ゾーン転送や、nsd-control処理が止まります。DNSレスポンスを返すのは別のプロセスなため、そこまで影響はないと思われます。