12月21, 2017

BIND DNS 日志声明语法

日志记录语句语法

logging {
    [ channel channel_name {
        ( file path_name
          [ versions ( number | unlimited ) ]
          [ size size_spec ]
        | syslog syslog_facility
        | stderr
        | null );
        [ severity (critical | error | warning | notice | info | debug [ level ] | dynamic ); ]
        [ print-category yes or no; ]
        [ print-severity yes or no; ]
        [ print-time yes or no; ]
    }; ]
    [ category category_name {
        channel_name ; [ channel_name ; ... ]
    }; ]
    ...
};

日志记录语句的定义和使用

logging语法提供对name server配置多样的选项。
channel语句结合输出方法、格式化选项和严重级别以及一个名称,然后通过分类词来选择哪些类型的数据需要记录。单logging语法用来定义多channels和categories。
如果没有logging语句,logging的配置将为:

logging {
    category default { default_syslog; default_debug; };
    category unmatched { null; };
};

在BIND 9中,logging配置建立在整个configure被解析时。
在BIND 8中,它将建立在一旦服务启动logging语法被解析,所有的关于语法错误的logging信息发送到默认channels,或者如果-g选项被指定,发送到标准错误输出。

channel语句

所有log可以输出到一个或多个channel.
每个channel定义都必须包含一个目标语句,该语句指出为该channel选择的消息是转到文件,到特定syslog,还是标准错误流,还是被丢弃。它还可以选择性地限制channel将接受的消息严重性级别(默认为info),以及是否包括命名生成的时间戳,类别名称和/或严重性级别(默认值不包括任何 )。

null 目标子句使发送到channel的所有消息都被丢弃;在这种情况下,该channel的其他选项是无意义的。

file 目标语句将channel定向到磁盘文件。它可以包括对文件允许变成多大以及每次打开文件时将保存文件的多少版本的限制。

versions 如果使用versions log file选项,named将通过在打开时重命名文件来保留文件的多个备份版本。默认不保留多版本。

size 文件的大小选项用于限制日志增长。如果文件超过了大小,则named将停止写入该文件,除非它有一个与之关联的版本选项。 如果保留备份版本,则如上所述滚动文件,并开始一个新文件。如果没有版本选项,则不会有更多数据写入日志,直到某些带外机制删除或截断日志到小于最大大小。默认行为不是限制文件的大小。

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

syslog 目标子句将通道引导到系统日志。它的参数是syslog设备,如syslog手册页中所述。

已知的设施有kern,user,mail,daemon,auth,syslog,lpr,news,uucp,cron,authpriv,ftp,local0,local1,local2,local3,local4,local5,local6和local7, 所有操作系统。syslog如何处理发送到此工具的消息在syslog.conf手册页中有描述。如果你有一个系统使用一个非常老的版本的syslog只使用openlog()函数的两个参数,那么这个子句将被忽略。

在Windows计算机上,系统日志消息被定向到EventViewer。severity 子句的作用类似于syslog的“优先级”,除了如果您直接写入文件而不是使用syslog,它们也可以使用。 不会为通道选择至少不具有给定严重性级别的消息; 将接受较高严重性级别的消息。 如果你使用syslog,那么syslog.conf优先级也将决定最终通过的。 例如,将通道功能和严重性定义为demo和debug,但只通过syslog.conf记录daemon.warning 将导致严重性info和notice的消息被删除。 如果情况相反,named的写入消息只有warning或更高,则syslogd将打印从通道接收的所有消息。

stderr目标子句将通道引导到服务器的标准错误流。这适用于服务器作为前台进程运行时使用,例如在调试配置时。

当服务器处于调试模式时,服务器可以提供大量的调试信息。 如果服务器的全局调试级别大于零,则调试模式将处于活动状态。全局调试级别通过使用-d标志后跟正整数启动指定的named 或通过运行rndc trace 来设置。通过运行rndc notrace,可以将全局调试级别设置为零,并关闭调试模式。服务器中的所有调试消息都具有调试级别,并且更高的调试级别提供更详细的输出。
指定特定调试严重性的channel,例如:

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

将获得任何时候服务器处于调试模式下的等级3或更小的调试输出,而不管全局调试级别。具有动态严重性的通道使用服务器的全局调试级别来确定要打印的消息。

如果打开print-time ,则将记录日期和时间。 可以为syslog通道指定打印时间,但通常无意义,因为syslog还记录日期和时间。如果请求 print-category ,则消息的类别也将被记录。最后,如果 print-severity 打开,则将记录消息的严重性级别。 打印选项可以以任何组合使用,并且将始终以以下顺序打印:时间,类别,严重性。 下面是一个示例,其中所有三个打印选项都打开:

28-Feb-2017 15:05:32.863 general:notice:running

有四个预定义的通道用于命名的默认日志记录,如下所示。

channel default_syslog {
    // send to syslog’s daemon facility
    syslog daemon; 
    // only send priority info and hig
    severity info;
};
channel default_debug {
    // write to named.run in the worki
    // Note: stderr is used instead of
    // the server is started with the
    file "named.run";
    // log at the server’s current deb
    severity dynamic;
};
channel default_stderr {
    // writes to stderr
    stderr;
    // only send priority info and hig
    severity info;
};
channel null {
    // toss anything sent to this chann
    null;
};

channel default_debug 有特殊属性,它只在服务器的调试级别非零时才产生输出。 它通常写入服务器工作目录中名为named.run的文件.

日志类别短语

有很多类别,所以你可以发送你想要看到的日志,无论你想要什么,不看到你不想要的日志。如果未指定类别的频道列表,则该类别中的日志消息将发送到默认类别。 如果不指定默认类别,则使用以下“默认默认值”:

category default { default_syslog; default_debug; };

例如,假设您想要将安全事件记录到文件,但是您也希望保留默认日志记录行为。 您可以指定以下内容:

channel my_security_channel {
    file "my_security_file";
    severity info; 
};

category security {
    my_security_channel;
    default_syslog;
    default_debug;
};

要丢弃类别中的所有邮件,请指定空通道:

category xfer-out { null; };
category notify { null; };

以下是其包含的日志信息类型的可用类别:

client    处理客户端请求
cname     域名服务器日志,跳过由于它们是一个CNAME而不是A/AAAA的记录
config    配置文件解析和处理。
database  与名称服务器内部使用的用于存储区域和缓存数据的数据库相关的消息。
default   默认类别定义了没有定义特定配置的那些类别的日志记录选项。
delegation-only  记录由于仅限授权区域或授权(仅在转发,提示或存根区域声明中)强制执行NXDOMAIN的查询。
dispatch  将传入的数据包发送到要处理的服务器模块。
dnssec    DNSSEC和TSIG协议处理。
edns-disabled    记录由于超时而被强制使用纯DNS的查询。
general   很多事情仍然没有分为类别,最终他们都在这里。
lame-servers     这些是远程服务器配置错误,BIND9在解析过程中尝试查询这些服务器时发生。
network   网络操作信息
notify    NOTIFY协议
queries   查询信息
query-errors     查询解析的一些失败信息
rate-limit 在此类别的信息严重性中记录了响应流的速率限制的开始,周期和最终通知。
resolver   DNS解析,例如由缓存名称服务器代表客户端执行的递归查找
rpz        有关响应策略区域文件,重写响应以及最高调试级别错误的信息,只需重写尝试。
security   批准和拒绝请求。
spill      通过删除或响应SERVFAIL来记录已被终止的查询,这是由于超出了限制配额限制的结果。
unmatched  named无法确定的消息类或没有匹配的view,一行摘要也记录到客户端类别。此类别最好发送到文件或stderr,默认情况下发送到空信道。
update     动态更新
update-security  批准和拒绝更新请求。
xfer-in    服务器接收的zone传输信息
xfer-out   服务器发送的zone传输信息

我配置使用的示例

# LOGGING
# severity (critical | error | warning | notice | info | debug [ level ] | dynamic ); 
logging {
    channel default_log {
        file "/var/log/named.log" versions 10 size 200m;
        severity dynamic;
        print-category yes;
        print-severity yes;
        print-time yes;
    };
    channel query_log {
        file "/var/log/query.log" versions 10 size 200m;
        severity dynamic;
        print-category yes;
        print-severity yes;
        print-time yes;
    };
    channel resolver_log {
        file "/var/log/resolver.log" versions 10 size 200m;
        severity dynamic;
        print-category yes;
        print-severity yes;
        print-time yes;
    };

    category default {default_log;};
    category queries {query_log;};
    category query-errors {query_log;};
    category resolver {resolver_log;};
    category lame-servers {null;};
    category edns-disabled {null;};
};

本文链接:https://fandenggui.com/post/bind9-dns-logging-grammar.html

-- EOF --

Comments