NXLog中文文档(3):配置


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>

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM