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>
