nxlog是个跨平台日志传输插件,支持linux、windows平台,支持window及linux内置的大部分系统日志及常见的web日志,支持tcp、udp、http(s)等协议传输。
安装包、指导手册及常用配置下载:http://pan.baidu.com/s/1qWTc2g0
通过nxlog将iis日志按syslog以udp的方式发送到linux服务器中作为linux服务器的syslog。
特殊需求:is日志中日期和时间是两个字段,需要合并成一个字段。
OS:window server2008 r2 Enterprise
IIS:7.5
Nxlog:2.9.1347
默认是安装在C:\Program Files (x86)\nxlog路径下。
位置:C:\Program Files (x86)\nxlog\conf\nxlog.conf
修改方式:请看下面【6、nxlog配置示例】
验证去data目录下看nxlog.log是否是否有异常,正常应该无异常,仅含启动成功的日志信息
通过资源监视器,看nxlog发送的网络流量是否存在,正常应该有
通过日志平台来验证日志是否发送成功。
define ROOT C:\Program Files (x86)\nxlog define CERTDIR %ROOT%\cert Moduledir %ROOT%\modules CacheDir %ROOT%\data Pidfile %ROOT%\data\nxlog.pid SpoolDir %ROOT%\data LogFile %ROOT%\data\nxlog.log <Extension w3c> Module xm_csv Fields $datetime, $s-ip, $cs-method, $cs-uri-stem, $cs-uri-query, $c-ip, $csUser-Agent, $cs-Referer, $cs-host, $sc-status, $sc-substatus, $sc-win32-status, $time-taken FieldTypes string, string, string, string, string, string, string, string, string, string, string, string, string Delimiter ' ' QuoteChar '"' EscapeControl TRUE UndefValue - </Extension> <Extension syslog> Module xm_syslog </Extension> <Input in> Module im_file #iis日志目录,文件名支持通配符,文件夹不支持 File "D:\iislog\W3SVC1\u_ex*.log" SavePos TRUE #合并iis日志中的时间与日志字段为一个字段 Exec if $raw_event =~ /^#/ drop(); \ else \ { \ $raw_event = replace($raw_event, ' ', '@',1); \ w3c->parse_csv(); \ $raw_event = replace($raw_event, ' ', "\t"); \ $raw_event = replace($raw_event, '@', ' ',1); \ } </Input> <Output out> Module om_udp Host 192.168.108.2 Port 514 Exec to_syslog_bsd(); </Output> <Route 1> Path in => out </Route>
define ROOT C:\Program Files (x86)\nxlog define CERTDIR %ROOT%\cert Moduledir %ROOT%\modules CacheDir %ROOT%\data Pidfile %ROOT%\data\nxlog.pid SpoolDir %ROOT%\data LogFile %ROOT%\data\nxlog.log <Extension w3c> Module xm_csv Fields $datetime, $s-ip, $cs-method, $cs-uri-stem, $cs-uri-query, $c-ip, $csUser-Agent, $cs-Referer, $cs-host, $sc-status, $sc-substatus, $sc-win32-status, $time-taken FieldTypes string, string, string, string, string, string, string, string, string, string, string, string, string Delimiter ' ' QuoteChar '"' EscapeControl TRUE UndefValue - </Extension> <Extension syslog> Module xm_syslog </Extension> <Input in_machine_a> Module im_file #iis日志目录,文件名支持通配符,文件夹不支持 File 'D:\iislog\W3SVC2\u_ex*.log' SavePos TRUE #合并iis日志中的时间与日志字段为一个字段 Exec if $raw_event =~ /^#/ drop(); \ else \ { \ $raw_event = replace($raw_event, ' ', '@',1); \ w3c->parse_csv(); \ $raw_event = replace($raw_event, ' ', "\t"); \ $raw_event = replace($raw_event, '@', ' ',1); \ } </Input> <Input in_machine_b> Module im_file #iis日志目录,文件名支持通配符,文件夹不支持 File '\\192.168.108.3\d$\iislog\W3SVC2\u_ex*.log' SavePos TRUE #合并iis日志中的时间与日志字段为一个字段 Exec if $raw_event =~ /^#/ drop(); \ else \ { \ $raw_event = replace($raw_event, ' ', '@',1); \ w3c->parse_csv(); \ $raw_event = replace($raw_event, ' ', "\t"); \ $raw_event = replace($raw_event, '@', ' ',1); \ } </Input> <Output out> Module om_udp Host 192.168.108.2 Port 514 Exec to_syslog_bsd(); </Output> <Route 1> Path in_machine_a,in_machine_b => out </Route>
配置多个in及out,可以共用一个path配置输出。
问题现象
2015-03-11 21:27:31 ERROR if-else failed at line 50, character 246 in C:\Program Files (x86)\nxlog\conf\nxlog.conf. statement execution has been aborted; procedure 'parse_csv' failed at line 50, character 103 in C:\Program Files (x86)\nxlog\conf\nxlog.conf. statement execution has been aborted; Not enough fields in CSV input, expected 14, got 0 in input ''
导致整个进程无法继续输出日志
解决方法
替换使用2.9.1347版本的nxlog
参考
http://nxlog.org/question/690/if-else-failed-not-enough-fields
从使用来看,单台服务器一天内大约会发送4到6G大小的日志到远程linux中,nxlog进程占用的资源如下:cpu占用率一般在0%到3%【40核】之间;占用带宽300k-600k/s之间;内存一般小于10M。
总体而言对性能影响较小,注意对带宽的影响。