[syslog-ng] syslog-ng blocking application

Ulrich David david.ulrich at netplus.pro
Fri Mar 16 14:51:48 CET 2012


Hi,

Thanks for your answer.

I tried to separate the destination in two log statements :
log { 
	source(dhcp_src);
	filter(f_chroot_l2);
	destination(dhcp_log);
};
log { 
	source(dhcp_src);
	filter(f_chroot_l2);
	destination(dhcp_sql);
	flags(final);
};

But i got the same result, blocking dhcp_sql destination blocks dhcp_log destination.
I have found a workaround, i throw my log in a unix socket and the file dhcpd.log together, then i re-take the socket to put in SQL database. (not so pretty)

New versions of syslog-ng have a different behavior which is better to not block inputs ?

My version of syslog-ng is :

dhcp-SEIC-3 syslog-ng # syslog-ng --version
syslog-ng 3.0.4
Revision: ssh+git://bazsi@git.balabit//var/scm/git/syslog-ng/syslog-ng-ose--mainline--3.0#master#1b5d618e301ad94aa20e692ffba16469dece8d10
Compile-Date: Dec  3 2009 16:17:01
Enable-Threads: off
Enable-Debug: off
Enable-GProf: off
Enable-Memtrace: off
Enable-Sun-STREAMS: off
Enable-Sun-Door: off
Enable-IPv6: on
Enable-Spoof-Source: off
Enable-TCP-Wrapper: on
Enable-SSL: on
Enable-SQL: off
Enable-Linux-Caps: off
Enable-Pcre: on


David Ulrich
---
Head of Systems, Quality and Security

e-mail: david.ulrich at netplus.pro
Direct: +41275657531
Groupe:  +41275657530
Réception:  +41275657511
Fax:  +41275657512

netplus.ch SA
Techno-pôle 3
CH-3960 Sierre

Le 16 mars 2012 à 13:24, Balazs Scheidler a écrit :

> On Tue, 2012-02-21 at 14:10 +0100, Ulrich David wrote:
>> Hi,
>> 
>> I have an ISC-DHCP who is logging on a local facility on a chrooted system :
>> 
>> #options { 
>> #        chain_hostnames(no); 
>> #        use_dns(no);
>> #        flush_lines(1);
>> #        stats_freq(3600); 
>> #};
>> #source dhcp_src {
>> #    unix-stream("/chroot/dhcp/dev/log" max-connections(256));
>> #};
>> 
>> My syslog-ng take logs from this source, filter on program and then put the logs on two destinations :
>> 
>> #filter f_chroot_l2 {
>> #        program(dhcpd);
>> #};
>> #
>> #destination dhcp_log { file("/var/log/dhcpd.log" perm(0644)); };
>> #destination dhcp_sql { program("/usr/local/sbin/dhcp_log_to_mysql"); };
>> #
>> #log { 
>> #        source(dhcp_src);
>> #        filter(f_chroot_l2);
>> #        destination(dhcp_log);
>> #        destination(dhcp_sql);
>> #        flags(final );
>> #};
>> 
>> Everything goes well… until I block my program "dhcp_log_to_mysql" (I do it with a lock on the mysql table it uses or with a sleep in the script - for test).
>> 
>> When "dhcp_log_to_mysql" is blocked, logs continues to be written on dhcp_log for some minutes/seconds then it stops. My chrooted dhcpd hangs on that too.
>> 
>> I don't know why syslog-ng is not just dropping logs (continuing eating them on the source). I don't have flow-control enabled… and I find nothing which can explain the problem.
>> 
>> I try to resize the buffer output with very big number (log_fifo_size(45000000)) but it changes nothing. Logs and dhcpd hangs at the same moment.
> 
> Well, I probably know the reason for this, however I agree that it is
> confusing.
> 
> The history for the behaviour is this:
>  - earlier syslog-ng prioritized all output operations over input ones
>  - this meant that if any output driver had things to do, it inhibited
> all input drivers to accept further messages.
>  - however with the threaded behaviour the same prioritization is very
> difficult to implement (and would probably cause a lot of performance
> penalties), so file destinations enable flow-control implicitly
>  - this flow-control is not completely the same as using
> "flags(flow-control)" as when the file destination is suspended because
> of an error, it is not in effect. This is called "soft-flow-control" in
> the codebase.
>  - flow-control is inherited to all parallel branches of a log
> statement.
> 
> This means that if you used separate log statements, the program
> destination wouldn't be flow controlled.
> 
> I remember having to readd this "inheritance" of flow-control (as it was
> removed first while implementing the threaded architecture), because
> without it flow-control wasn't in effect when filtering was used in one
> of the branches.
> 
> Anyway, I'd have to give it some thought, since this case is clearly
> difficult to diagnose and understand.
> 
> For now, use a separate log statement, that should settle it.
> 
> -- 
> Bazsi
> 
> 
> ______________________________________________________________________________
> Member info: https://lists.balabit.hu/mailman/listinfo/syslog-ng
> Documentation: http://www.balabit.com/support/documentation/?product=syslog-ng
> FAQ: http://www.balabit.com/wiki/syslog-ng-faq
> 



More information about the syslog-ng mailing list