[syslog-ng] syslog-ng is not reading level/facility properly

Charlie Reddington charlie.reddington at gmail.com
Wed Sep 8 23:31:16 CEST 2010


Hi List,

After my last weeks note, I kept on doing some more digging. Perhaps  
some of this output will aid in finding a solution.

I compiled from source, from the latest stable 2.0 line thinking maybe  
that was part of my problem since I installed via the epel  
repositories. Nope, still having the same problem.

On a remote host, I have a nginx server, that is sending it's access  
logs to local5.notice and it's error logs to local5.crit. In the  
syslog.conf file I have the following entries.

local5.notice    @syslog-ng server
local5.crit     @syslog-ng server

This data is definitely making it to the systlog server. I have done a  
tcpdump and it shows this with the following. Also I have it logging  
to local log files and they are working the way I expect.

$ tcpdump port 514

tcpdump: verbose output suppressed, use -v or -vv for full protocol  
decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
16:16:40.725473 IP CLIENTIP.syslog > SYSLOGNGIP.syslog: SYSLOG  
local5.notice, length: 304 <-- coming in as local5.notice as I expect.

Okay so they are hitting the server how I expect, but they aren't  
being filtered the way I expect. Below is my syslog-ng config.

# Syslog-ng config

options {
	use_dns(no);
	keep_hostname(yes);
	long_hostnames(off);
	chain_hostnames(off);
	sync(1);
	log_fifo_size(1024);
	create_dirs(yes);
	perm(0644);
	stats_freq(3600);
	mark_freq(600);
};

#
# Data Sources
#

# External Syslog
source s_external {
	udp(ip("0.0.0.0") port(514) flags(no_parse));
};


#
# Where to put Data
#

# Nginx / Lighttpd / Apache Access Logs
destination d_access_log { file("/data01/syslog-ng/$HOST/ 
access.log"); };

# Nginx / Lighttpd / Apache Error Logs
destination d_error_log { file("/data01/syslog-ng/$HOST/error.log"); };

# Everything else
destination d_log { file("/data01/syslog-ng/$HOST/$FACILITY.$LEVEL"); };

#
# Data Filters
#

# Facility local5
filter f_local5 { facility(local5); };

# Level info
filter f_info { level(info); };
# Level notice
filter f_notice { level(notice); };
# Level warn
filter f_warn { level(warn); };
# Level crit
filter f_crit { level(crit); };
# Level err
filter f_err { level(err); };

#
# Data Logging Locations
#

# Access Logs
log { source(s_external); filter(f_local5); filter(f_notice);  
destination(d_access_log); };

# Error Logs
log { source(s_external); filter(f_local5); filter(f_crit);  
destination(d_error_log); };

# Everything Else
log { source(s_external); destination(d_log); };

Now the only place that ANY messages seem to go, is into /data01/ 
syslog-ng/$HOST/kern.emerg.

Why is everything being marked as kern.emerg?

And lastly here's some debug output that maybe able to shed some light  
to those who know more than I do.

./sbin/syslog-ng -d -v -e --cfgfile=./etc/syslog-ng.conf

Running application hooks; hook='1'
syslog-ng starting up; version='2.0.11'

Incoming log entry; line='<156>logger: REMOTEIP www.domain.com - [08/ 
Sep/2010:17:17:44 -0400] "GET /2010/09/08-7912 HTTP/1.0" 200 83134 "-"  
"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) 
"\x0a'
Filter rule evaluation begins; filter_rule='f_local5'
Filter node evaluation result; filter_result='not-match',  
filter_type='facility'
Filter rule evaluation result; filter_result='not-match',  
filter_rule='f_local5'
Filter rule evaluation begins; filter_rule='f_local5'
Filter node evaluation result; filter_result='not-match',  
filter_type='facility'
Filter rule evaluation result; filter_result='not-match',  
filter_rule='f_local5'

For some reason this isn't matching, but I'm officially out of  
experience on this to know what to do further. I should also note that  
I'm running splunk on this syslog-ng server and it's able to get my  
access logs properly.

If anyone can throw me a bone here I'd really appreciate it, many  
thanks in advance.

Charlie



More information about the syslog-ng mailing list