NXLog使用Apache風格的配置文件,啟動的時候它會去默認的位置加載這份配置文件,也可以使用-c參數指定配置文件的路徑。配置文件由塊和指令組成,塊是包含多個指令的XML文件。指令是不區分大小寫的,但是指令里面的參數是區分大小寫的,如果里面的值太長的話,可以用 \ 來進行換行
文件引用
使用include指令可以引用其他的配置文件,SpoolDir指令會在配置文件讀取完后才生效
例1:引用指定配置文件
include modules/module1.conf
例2:使用通配符引用配置文件
include /etc/nxlog.d/*.conf
使用宏
define指令可以定義宏變量,在一個值在多個地方都用到的時候,這個指令就非常有用
例3:使用宏
define BASEDIR /var/log define IGNORE_DEBUG if $raw_event =~ /debug/ drop(); <Input messages> Module im_file File '%BASEDIR%/messages' </Input> <Input proftpd> Module im_file File '%BASEDIR%/proftpd.log' Exec %IGNORE_DEBUG% </Input>
例4:在宏中使用多條語句
define ACTION { log_warning("dropping message"); drop(); }
全局指令
ModuleDir | 模塊目錄,默認是nxlog二進制文件所在目錄的module目錄 |
PidFile | pid文件存放位置,對Windows和NXLog-Processor無效 |
LogFile | Nxlog日志文件存放位置 |
LogLevel | 日志級別,以下為可選項CRITICAL, ERROR, WARNING, INFO, DEBUG |
SuppressRepeatingLogs | 有一些極端情況下,一旦配置出錯會由於重復的日志把磁盤一下就寫滿了,這個指令可以讓日志在2秒內出現多行重復行的時候,后面的日志設置為last message repeated x times,默認為true |
NoCache | 有些模塊會寫臨時文件,例如im_file會記錄上次讀到的位置,默認是False,假如設成true的話,以im_file為例,它就會從頭開始讀起了 |
CacheDir | 存放configcache.dat臨時文件的目錄 |
User | 啟動用戶,對Windows和NXLog-Processor無效 |
Group | 啟動用戶組,對Windows和NXLog-Processor無效 |
RootDir | 根目錄,對Windows和NXLog-Processor無效 |
SpoolDir | 工作目錄,對Windows和NXLog-Processor無效 |
Threads | 使用多少個線程來處理日志消息 |
FlowControl | 默認為True,用於設定是不是所有的輸入和處理模塊都使用流程控制 |
NoFreeOnExit | 默認是False,用於設定退出之后是否釋放資源,一般調試的時候會用 |
IgnoreErrors | 默認為True,如果設為False即使配置文件出錯了還繼續啟動 |
Panic | 調試用的參數,一般不用管 |
模塊
nxlog會加載在配置文件中定義的模塊,例如
<Input instancename> Module im_module ... </Input>
每個實例的名字都必須是唯一的,會在后面的route里面用到
模塊的通用指令
Module:模塊名稱
FlowControl:是否啟用流程控制,建議在使用im_uds模塊從/dev/log采集本地syslog 的時候禁用掉,不然syslog會阻塞所有寫入的動作,假如輸出隊列還滿掉了,系統可能就不響應了
Schedule:用於定義作業,具有以下幾個選項
-
When:什么時候開始執行,和Crontab用法一樣,也有一些自帶的指令,例如
@yearly Run once a year, "0 0 1 1 *". @annually (same as @yearly) @monthly Run once a month, "0 0 1 * *". @weekly Run once a week, "0 0 * * 0". @daily Run once a day, "0 0 * * *". @midnight (same as @daily) @hourly Run once an hour, "0 * * * *".
-
Every:每xx秒/分這樣的表示方法,可用單位為sec, min, hour, day, week,默認為秒
-
First:設置首次執行時間,使用datetime類型的值
-
Exec:執行的命令內容
例5:同時存在2個調度
<Input in> Module im_tcp Port 2345 <Schedule> Every 1 sec First 2010-12-17 00:19:06 Exec log_info("scheduled execution at " + now()); </Schedule> <Schedule> When 1 */2 2-4 * * Exec log_info("scheduled execution at " + now()); </Schedule> </Input> <Output out> Module om_file File "tmp/output" </Output> <Route 1> Path in => out </Route>
例6:條件判斷
Exec if $Hostname = 'myhost';
例7:語句換行
Exec if $Message =~ /something interesting/ \ log_info("found something interesting"); \ else \ log_debug("found nothing interesting");
例8:分號進行語句換行
Exec log_info("first"); \ log_info("second"); # The above is the same as the following: Exec log_info("first"); Exec log_info("second");
例9:使用Exec塊進行語句換行
Exec log_info("first"); \ log_info("second"); # The above is the same as the following: <Exec> log_info("first"); log_info("second"); </Exec>
Processors:這個指令廢棄掉了
InputType:用於指定輸入類型
-
LineBased:一行為一個日志,用\n或者\r\n區分
-
Dgram:一旦Buffer用完了,考慮合成一份日志,im_udp模塊的時候是默認選項,因為UDP syslog 是分批到達的
-
Binary:轉成Nxlog二進制格式
例10:輸入輸出
<Input in> Module im_tcp Port 2345 InputType Binary </Input> <Output out> Module om_file File "tmp/output" </Output> <Route 1> Path in => out </Route>
OutputType:這個指令用於把原始日志格式化后送到指定的輸出里面,只能用於:om_file,om_exec,om_ssl,om_tcp,om_udp,om_uds里面,輸出類型可以指定以下類型
-
LineBased:一行為一個日志
-
Dgram:一旦緩沖滿了就把緩沖數據作為一行日志,om_udp輸出默認是開着的
-
Binary:用nxlog binary格式化輸出
例11、使用Binary格式化
<Input in> Module im_file File "tmp/input" </Input> <Output out> Module om_tcp Port 2345 Host localhost OutputType Binary </Output> <Route 1> Path in => out </Route>
Routes
路由定義了日志流的處理方式
<Route example> Path in1, in2 => proc => out1, out2 </Route>
Priority
日志路由的優先級,可選范圍為1-100,默認是10,數值越低,優先級越高
<Input tcpin> Module im_tcp Host localhost Port 514 </Input> <Input udpin> Module im_udp Host localhost Port 514 </Input> <Output tcpfile> Module om_file File "/var/log/tcp.log" </Output> <Output udpfile> Module om_file File "/var/log/udp.log" </Output> <Route udp> Priority 1 Path udpin => udpfile </Route> <Route tcp> Priority 2 Path tcpin => tcpfile </Route>
Path
Path指定了路由的方式
<Input in1> Module im_null </Input> <Input in2> Module im_null </Input> <Processor p1> Module pm_null </Processor> <Processor p2> Module pm_null </Processor> <Output out1> Module om_null </Output> <Output out2> Module om_null </Output> <Route 1> # no processor modules Path in1 => out1 </Route> <Route 2> # one processor module Path in1 => p1 => out1 </Route> <Route 3> # multiple modules Path in1, in2 => p1 => p2 => out1, out2 </Route>