簡介
在默認情況下,BIND9 把日志消息寫到 /var/log/messages 文件中,而這些日志消息是非常少的,主要就是啟動,關閉的日志記錄和一些嚴重錯誤的消息;而將調試日志信息寫入 BIND 服務器工作目錄中的 named.run 文件。
BIND 9 的日志是可以靈活配置的,要詳細記錄服務器的運行狀況,要在配置文件 named.conf 中使用 logging 語句來定制自己所需要的日志記錄。
BIND 日志的常用術語
在講述 logging 語句的語法之前,先要熟悉一些常用術語
術語 | 含義 |
---|---|
channel(通道) | 日志輸出方式,如:syslog、文本文件、標准錯誤輸出或 /dev/null |
category(類別) | 日志的消息類別,如:查詢消息或動態更新消息等 |
module(模塊) | 產生消息的來源模塊名稱 |
facility(設備) | syslog 設備名 |
severity(嚴重性) | 消息的嚴重性等級 |
logging 語句的語法
logging 語句的語法為:
logging {
channel channel_name { // 定義通道
file log_file [versions number | unlimited] [size sizespec]; | syslog optional_facility; | null; | stderr; // 定義輸出方式
severity log_severity; // 定義消息嚴重性
[print-time boolean;] // 是否在消息中添加時間前綴,僅用於 file 日志
[print-severity boolean;] // 是否在消息中添加消息嚴重性前綴
[print-category boolean;] // 是否在消息中添加消息類別名前綴
};
category category_name { // 定義類別
channel_name;
......
};
};
channel 語句
配置日志時,首先要定義通道,然后將不同的日志類別的數據指派到指定的通道上輸出。
BIND 9 的默認配置是:
logging {
// 由於使用了默認通道,所以沒有通道定義部分
category "default" { "default_syslog"; "default_debug"; };
};
channel 語句用於定義通道。指定應該向哪里發送日志數據,需要在以下四種之間則其一:
- file: 輸出到純文本文件
- log_file: 指定一個文件名
- version: 指定允許同時存在多少個版本的該文件,比如指定 3 個版本(version 3),就會保存 query.log、query.log0、query.log1 和query.log2。
- size: 指定文件大小的上限,如果只設定了size 而沒有設定 version,當文件達到指定的文件大小上限時,服務器停止寫入該文件。如果設定了version,服務器會進行循環,如把 log_file 變成 log_file.log1,log_file.log1 變成 log_file.log2 等,然后建立一個新log_file.log 進行寫入。
syslog optional_facility :輸出到 syslog,其中 optional_facility 是 syslog 的設備名,通常為以下幾個:
- daemon
- local0 到 local7
- null :輸出到空設備
- stderr :輸出到標准錯誤輸出,默認為屏幕
severity 語句用於指定消息的嚴重性等級, log_severity 的取值為(按照嚴重性遞減的順序):
- critical
- error
- warning
- notice
- info
- debug [ level ]
dynamic 是一個特殊的值,它匹配服務器當前的調試級別。定義了某個嚴重性級別后,系統會記錄包括該級別以及比該級別更嚴重的級別的所有消息。比如定義級別為 error,則會記錄 critical 和error 兩個級別的信息。
對於系統管理員來說,一般記錄到 info 級別就可以了。
BIND 9 預制了如下四個默認通道;
channel "default_syslog" {
syslog daemon; // 發送給 syslog 的 daemon 設備
severity info; // 只發送此 info 及其更高優先級的信息
};
channel "default_debug" { // 只有當服務器的 debug 級別非 0 時,才產生輸出。
file "named.run"; // 寫入工作目錄下的 named.run 文件
severity dynamic; // 按照服務器當前的debug 級別記錄日志
};
channel "default_stderr" {
stderr; // 寫到stderr
severity info; // 只發送此 info 及其更高優先級的信息
};
channel "null" {
null; // 丟棄所有發到此通道的信息
};
category 語句
category 語句是指定哪一種類別的信息使用哪個或者哪幾個已經定義了的通道輸出。
BIND 9 中可用的類別名(category_name)有:
類別 | 說明 |
---|---|
client | 處理客戶端請求。 |
config | 配置文件分析和處理。 |
database | 同BIND內部數據庫相關的消息,用來存儲區數據和緩存記錄。 |
default | 匹配所有未明確指定通道的類別。 |
dnssec | 處理 DNSSEC 簽名的響應。 |
general | 包括所有未明確分類的 BIND 消息。 |
lame-servers | 發現錯誤授權,即殘缺服務器。 |
network | 網絡操作。 |
notify | 區更新通知消息。 |
queries | 查詢日志 |
resolver | 名字解析,包括對來自解析器的遞歸查詢信息。 |
security | 批准/非批准的請求。 |
update | 動態更新事件。 |
xfer-in | 從遠程名字服務器到本地名字服務器的區傳送。 |
xfer-out | 從本地名字服務器到遠程名字服務器的區傳送。 |
例如要記錄查詢消息,可以在 named.conf 中添加如下配置:
logging {
channel query_log {
file "query.log" versions 3 size 20m;
severity info;
print-time yes;
print-category yes;
};
category queries {
query_log;
};
};
這樣服務器會在工作目錄(directory 語句所指定的目錄,Ubuntu 為:/var/cache/bind)下創建 query.log 文件,並把運行過程產生的 queries 消息寫如到此文件中。