DNS BIND之log日志


bind中我們可以通過配置logging來記錄日志信息,以便以后對服務器的分析及問題的跟蹤。logging語句為域名服務器設定了一個多樣性的logging選項。它的channel短語對應於輸出方式、格式選項和分類級別,它的名稱可以與category短語一起定義多樣的日志信息。只用一個logging語句就可以用來定義多個channel和category。如果沒有logging 語句的話,logging設置就是:
logging {
category "unmatched" { "null"; };
category "default" { "default_syslog"; "default_debug"; };
};
在BIND9中,logging的配置只有在整個配置文件被讀取后才被執行。而在BIND8中,logging部分被讀取后就開始執行了。當服務器啟動時,所有在配置文件中關於語法錯誤的logging信息都轉到缺省通道(channel)中,或者使用”-g”選項,指定轉成標准錯誤。
一、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; ]
   }; ]
   [ category category_name {
     channel_name ; [ channel_name ; ... ]
   }; ]
   ...
};
1.channel 
所有日志會輸出到一個或多個channel中;你可以定義所有你想要的通道。每個通道的定義必須包括一個目的字句,用來確定所選的相關通道的信息,將會被輸出到一個文件,或者到一個特殊的syslog工具,或者到一個標准錯誤流,或者被忽略。它也可以隨意的限制通道能接受的信息級別(默認值info),定義是否包含一個由named產生的時間標記,或者是否包含分類的名稱、級別等(默認是不包含任何內容)。
①目的子句為null時,會使所有發送給通道的信息被丟棄;那樣的話,其他通道選項就沒有意義了。
②目的子句為file 時,會使通道的內容輸出到一個磁盤文件。它可以包含這個文件的大小和該文件可以保存多少個版本。
③如果使用versions日志文件選項,named就會自動保留多個版本的日志文件。例如,如果選擇保存文件lamers.log的三個老版本,那么在它被打開的時候lamers.log.1被更名為lamers.log.2,lamers.log.0 被更名為lamers.log.1 ,lamers.log 被更名為lamers.log.0。也可以設置version unlimited,這樣就沒有備份版本的限制了。
④如果對日志文件設置了size選項,那么僅當此文件超過了設定的大小時,系統就會進行更名。默認情況下不儲存備份文件;所有存在的日志文件被簡單進行追加。文件的size 選項用來限制日志的增長。如果文件超過了限制,又沒有versions選項,則named 就會停止寫入文件。如果保留了備份版本,則備份文件如上所述進行滾動命名,然后開始創建一個新的文件。如果沒有versions選項,也沒有其它的機制來刪除或減小日志文件,則系統就不會有數據繼續寫入日志中。默認狀態是不限制文件的大小的。
size 和versions 選項的使用例子:
channel "an_example_channel" {
file "example.log" versions 3 size 20m;
print-time yes;
print-category yes;
};
⑤syslog 目的子句是把通道指向系統日志。它的參數是一個syslog的前綴,如syslog幫助中所述。syslog是怎樣處理帶有這些前綴的信息,可以參考syslog.conf 的幫助信息。
⑥severity子句象syslog中的”priorites”一樣工作,唯一區別的是用戶可以直接寫入一個文件,而不是使用syslog寫入一個文件。不到嚴重級的信息將不會被通道選擇;高嚴重級的信息將會被接受。
如果用戶正在使用syslog,那么syslog.conf 的優先級也會決定什么會最終通過。例如,將channel facility和severity定義成daemon和debug,就不會只記錄通過syslog.conf的daemon.warning信息,后者會使severity是info和notice的信息被丟棄。如果情況相反,named就會只記錄warning或更高級別的信息,而syslogd則會記錄來自於通道的所有信息。
⑦stderr目的子句將通道輸出到服務器的標准錯誤流。它用於服務器在前台運行的情況下,例如,當處於debug模式的時候,服務器能提供豐富的調試信息。如果服務器的全局debug級別(globe debug level)大於0,debug 模式將被激活。全局debug級別可以通過在啟動named時設置“-d”參數加一個正數,或運行rndc trace來設置。如果要關閉debug模式,則將全局debug 級別設置成0,或運行rndc notrace。服務器中所有的debug信息有一個debug級別,高調試級給出更詳細的輸出。
例如,指定調試嚴重級別的通道:
channel "specific_debug_level" {
file "foo";
severity debug 3;
};
上例中,服務器在處於debug模式的時候都會收到3級和比3級小的級別的調試信息,全局的調試級別在這里不起作用。dynamic嚴重級別的通道將使用服務器全局debug級別決定打印哪些信息。
⑧如果使用了print-time參數,則日期和時間也將會記錄下來。print-time也可以針對syslog的通道進行設置,但因為syslog也打印日期和時間,所以一般來講,這沒有什么意義。如果設置了print-category 參數,則信息的分類也會記錄下來。如果設置了print-severity參數,則信息的嚴重級別也會記錄下來。print-xxx 選項可以進行多重組合,單輸出格式都是這個順序:時間、分類、嚴重級別。
下面是一個當三個打印選項都設置的例子:
17-Apr-2015 15:05:32.863 general: notice: running
下面是named 提前定義的四個通道,用於指定缺省的日志。
channel "default_syslog" {
syslog daemon; // 發送給syslog 的daemon facility
severity info; //只發送此優先級和更高優先級的信息
};
channel "default_debug" {
file "named.run"; // 寫入工作目錄下的named.run 文件。注意:如果服務器用-f 參數啟動,則"named.run"會被stderr 所替換。
severity dynamic; // 按照服務器當前的debug 級別記錄日志
};
channel "default_stderr"{
stderr; //寫到stderr
severity info; //只發送此優先級和更高優先級的信息
};
channel "null" {
null; // 丟棄所有發到此通道的信息
};
default_debug 通道有特殊的性質:只有當服務器的debug級別非0的時候,它才產生輸出。一般來說,它會在服務器的工作目錄中寫入named.run文件。
因為安全原因,當在命令行選項中使用了“-u”參數后,只有當named使用了新的UID
后,named.run文件才會產生,以root身份啟動和運行的named所產生的debug信息將會被丟棄。如果用戶需要得到這些輸出,則必須使用“-g”參數運行服務器,並重新將標准錯誤定向到一個文件中去。
一旦定義好一個通道,它就不能被重新定義。這樣就不能修改內置的通道,但是可以通
過把分類指向你已經定義的通道,來修改默認的日志記錄。
2.category
這里存在許多分類,用戶可根據需要定義想看到或不想看到的日志。如果你不將某個分類指定到某些通道的話,那么在這個分類的日志信息就會被發送到default分類通道中。如果用戶沒有設定缺省的分類,下列"default"則會被系統使用:
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";
};
為了丟棄一個分類中的所有信息,可以設定null 通道:
category "xfer-out" { "null"; };
category "notify" { "null"; };
下面是可用的分類和相關的簡明描述,以后的BIND版本中會包含更多的分類:
default: 默認分類,沒有分類的日志都使用這個分類的配置.
general: 沒有分類的日志都記錄在此分類中.
database: 服務器內部使用存儲zone和緩存數據.
security: 允許/拒絕的請求.
config: 配置文件分析和處理.
resolver: DNS解析,被dns緩存服務器進行遞歸查詢.
xfer-in: 接收區域傳輸.
xfer-out: 發送區域傳輸.
notify: NOTIFY協議.
client: 客戶端請求進程.
unmatched: 未匹配的查詢.
network: 網絡操作.
update: 動態更新.
update-security: 允許/拒絕更新請求.
queries: 客戶端隊列日志.
dispatch: 數據包傳送日志.
dnssec: DNSSEC和TSIG協議處理.
lame-servers: 遠端的配置錯誤的服務器發送的請求.
delegation-only: NXDOMAIN的結果將被強制定義到delegation-only區域.

二、配置實例

logging {
    /*指定服務器日志記錄的內容和日志信息來源*/
    channel "default_syslog" {
        syslog daemon; /* 發送給syslog 的daemon facility */
        severity info; /* 只發送此優先級和更高優先級的信息 */
    };
    channel default_debug {
        file "data/named.run"; /* 寫入工作目錄下的named.run 文件。注意:如果服務器用-f 參數啟動,則"named.run"會被stderr 所替換。*/
        severity dynamic; /*  按照服務器當前的debug 級別記錄日志 */
        };
    channel xfer_in_log {
        file "/var/log/named/xfer_in_log" versions 100 size 10m;    # versions 定義可以累積創建100 個日志文件,每個文件大小為10M
        severity info;
        print-category yes;
        print-severity yes;
        print-time yes;
    };

    channel xfer_out_log {
        file "/var/log/named/xfer_out_log" versions 100 size 10m;
        severity info;
        print-category yes;
        print-severity yes;
        print-time yes;
    };

    channel notify_log {
        file "/var/log/named/notify_log" versions 100 size 10m;
        severity info;
        print-category yes;
        print-severity yes;
        print-time yes;
    };

    channel general_log {
        file "/var/log/named/general_log" versions 400 size 100m;
        severity info;
        print-category yes;
        print-severity yes;
        print-time yes;
    };

    channel default_log {
        file "/var/log/named/default_log" versions 400 size 100m;
        severity info;
        print-category yes;
        print-severity yes;
        print-time yes;
    };

    channel update_log {
        file "/var/log/named/update_log" versions 100 size 10m;
        severity info;
        print-category yes;
        print-severity yes;
        print-time yes;
    };

    channel query_log {
        file "/var/log/query_log" versions 1024 size 1m;
        severity info;
        print-category no;
        print-severity no;
        print-time yes;
    };

    category queries { query_log; };
    category default { default_log; };
    category general { general_log; };
    category xfer-in { xfer_in_log; };
    category xfer-out { xfer_out_log; };
    category notify { notify_log; };
    category update { update_log; };
};
————————————————

 

 


————————————————
版權聲明:本文為CSDN博主「slimina」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/tianwei7518/java/article/details/45103455


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM