在默认情况下,BIND把日志消息写到/var/log/messages文件中,而这些日志消息是非常少的,主要就是启动,关闭的日志记录和一些严重错误的消息,所以要详细记录服务器的运行状况,需要自己配置服务器的日志行为,也就是要在配置文件named.conf中使用logging语句来定制自己所需要的日志记录。
logging语句的语法为:
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; ] [ buffered yes or no; ] }; ] [ category category_name { channel_name; [ channel_name; ... ] }; ] ... };
在日志中主要有两个概念:通道(channel)和类别(category)。通道指定了应该向哪里发送日志数据:是发送给syslog,还是写在一个文件里,或是发送给named的标准错误输出,还是发送到位存储桶(bit bucket)。类别则规定了哪些数据需要记录。下面我们主要介绍一下文件通道和类别。
在定义通道的语句中,severity是指定记录消息的级别。在bind中主要有以下几个级别(按照严重性递减的顺序):
- critical
- error
- warning
- notice
- info
- debug [ level ]
- dynamic
定义了某个级别后,系统会记录包括该级别以及比该级别更严重的级别的所有消息。比如定义级别为error,则会记录critical和error 两个级别的信息。一般情况下,我们记录到info级别就可以了。
- print-time是设定在日志中是否需要写入时间
- print-severity是设定在日志中是否需要写入消息级别
- print-category是设定在日志中是否需要写入日志类别。
category语句是指定哪一种类别的数据使用哪个或者哪几个已经定义了的通道。在bind9中类别有:
- default :default类别匹配所有未明确指定通道的类别,但是不匹配不属于任何类别的消息。这些不属于任何类别的消息属于下面列出的这些类别。
- general 包括所有未明确分类的BIND消息。
- client 处理客户端请求。
- config 配置文件分析和处理。
- database 同BIND内部数据库相关的消息,用来存储区数据和缓存记录。
- dnssec 处理DNSSEC签名的响应。
- lame-servers 发现错误授权。
- network 网络操作
- notify 异步区变动通知。
- queries 查询日志
- resolver 名字解析,包括对来自解析器的递归查询的处理。
- security 认可/非认可的请求。
- update 动态更新事件。
- xfer-in 从远程名字服务器到本地名字服务器的区传送。
- xfer-out 从本地名字服务器到远程名字服务器的区传送。
例如要记录queries消息,就可以如下配置(把以下语句添加到named.conf中就可以了):
logging { channel access_log { file "/var/log/named/access.log" versions 100 size 100M; severity dynamic; print-category yes; print-severity yes; print-time yes; buffered yes; }; category default { access_log; }; };
这样服务器会在工作目录(directory语句所指定的目录,通常为:/var/named)下创建query.log这个文件,并把运行过程产生的queries消息写如到query.log文件中,如下:
Nov 28 16:04:55.516 queries: client 192.168.0.113#32770: query: dns.andy.com IN A
另外解释一下file “query.log” versions 3 size 20m;语句中 “version”和“size”的意义:
是指定允许同时存在多少个版本的该文件,比如指定5个版本(version 5),当access.log达到size的大小,则会保存为query.log0,以此类推一直保存到access.log.4
#ll -rw-r--r--. 1 root root 4971 2月 22 08:57 access.log -rw-r--r--. 1 root root 14240 2月 22 08:57 access.log.0 -rw-r--r--. 1 root root 13204 2月 22 08:57 access.log.1 -rw-r--r--. 1 root root 14240 2月 22 08:57 access.log.2 -rw-r--r--. 1 root root 13204 2月 22 08:57 access.log.3 -rw-r--r--. 1 root root 14240 2月 22 08:57 access.log.4
此时,如果access.log又达到了size的大小,同时version也达到了限制,此时会删除最早的access.log.0,并把access.log.1更改成 access.log.0,把access.log.2更改成access.log.1,以此类推。
Pingback引用通告: Bind的安装与详细配置 | 精彩每一天