channel

 

channel節

namedが出力する全てのログは1個、もしくは複数のchannelに出力されます。出力先channelは管理者が好きなように設定可能です。

全てのchannelには出力先が設定されています。出力先は、ファイル、syslog、標準エラー、もしくは出力しない(discard)が指定 されます。同時にログの出力レベル、タイムスタンプ、出力レベルなどの出力の有無も選択可能です。ログ出力レベルはinfo、タイムスタンプや出力レベル 表示しないのがデフォルト設定です。

nullは全てのメッセージを破棄します。nullが設定された場合にはその他の設定は意味をなしません。

ログ出力先にファイルを指定しするとファイルシステムに出力されます。この場合にはファイルサイズや最大に保持する過去のファイル数なども設定することが可能です。

 

file節

(versions 3の例)
/var/log/named/named.log ←現在のログ
/var/log/named/named.log.0 ←1世代前
/var/log/named/named.log.1 ←2世代前
/var/log/named/named.log.2 ←3世代前

channelステートメントの中にはnamedのログをファイルに書き出すためのfileオプションがある。fileステートメント設定にはversions設定も可能で、これは過去のログファイルを何世代前まで残すかという設定。例えばversions 3と設定すれば過去3世代分のログファイルを残してくれ、それよりも古いログは削除される。

fileオプションと同時に、sizeオプションも設定されている場合、sizeで指定されているファイルサイズを超えた場合のみファイルのバックアップ処理が行われる。過去ログがあれば、全てのログ番号がずらされて、新しいファイルにログの追記が行われる。versions設定がなければ、制限が設定されるまでログのローテーションが行われず、namedはログを書き込み続ける。デフォルトではファイルサイズに制限はない。

ファイルサイズに制限がないとDiskを食い潰す可能性もあるので、例えば以下のように設定するのがお勧め。

channel an_example_channel {
    file "example.log" versions 3 size 20m;
    print-time yes;
    print-category yes;
};

 

syslog節

syslogを設定するとログはsyslogに渡される。syslog設定はOS等に依存するためそちらを参考にして欲しい。ログがどのように扱われるかはsyslogの実装に依存する。

 

stderr節

stderrを設定するとサーバの標準エラーに向けてログを出力する。namedをフォアグラウンドプロセスとして実行する場合などに便利。設定ファイルのデバッグで利用するときなどに活用できます。

 

定義済みchannel

namedには4個のchannelが予め定義されています。

 

default_syslog

default_syslogはsyslogにログ出力を行うchannelです。

channel default_syslog {
    // send to syslog’s daemon facility
    syslog daemon;
    // only send priority info and higher
    severity info;
};

 

default_debug

default_debugはnamedのデバッグレベルが0以外の時に有効になるchannel。ログはnamed.runに出力されます。

channel default_debug {
    // write to named.run in the working directory
    // Note: stderr is used instead of "named.run" if
    // the server is started with the ’-f’ option.
    file "named.run";
    // log at the server’s current debug level
    severity dynamic;
};

 

default_stderr

default_stderrは標準エラーにログ出力するためのchannel。

channel default_stderr {
    // writes to stderr
    stderr;
    // only send priority info and higher
    severity info;
};

 

null

nullはchannelはログ出力しません。

channel null {
    // toss anything sent to this channel
    null;
};

 

namedデバッグ情報の取得について

デバッグモードを有効にするとより詳細なログ出力が可能です。named.confでdebugレベルを0以上にするとデバッグモードが有効になります。もしくは、-dオプション付きでnamedを起動する方法もあります。rndcを利用する場合にはrndc traceを実行することでデバッグ情報を取得できます。

デバッグレベルを0に設定するとデバッグモードをOFFにできます。rndcの場合はrndc notraceです。デバッグ情報は高ければ高いほどより詳細な内容になります。

デバッグ情報を取得するためのchannel設定を以下のように設定するとレベル3以下のログが、グローバルのデバッグレベルに関係なく出力されます。

channel specific_debug_level {
    file "foo";
    severity debug 3;
};

セキュリティの観点より、namedを起動するときには-uオプションをつけて実行するのがお勧めです。-uは別ユーザでnamedを実行するためのオプションです。named.runファイルはnamedが起動して、UIDが変更された後に生成されるので起動中
のログは出力されませんし、rootで実行中のログは破棄されてしまいます。

起動中のログの確認が必要な場合には、namedを-gオプションをつけて実行しましょう!-g付きで実行すると標準エラーにログが出力されます。

channelが一度定義されると再定義はできません。そのため、Build-in channel(以下4個)を書き換えることはできませんが、categories節を使って別チャネルを定義するとは可能です。