[syslog-ng] Internal error, duplicate configuration elements...

David Hauck davidh at netacquire.com
Wed Jun 11 15:24:39 CEST 2014


Hi Balazs,
 
On Tuesday, June 10, 2014 11:51 PM, Balazs Scheidler wrote:
> Hi,
> 
> the issue is that syslog-ng uses the destination IP address/port 
> combination as an identifier to recover the queue when reloading 
> syslog-ng, so it does have some issues (e.g. one borrowing the queue 
> of the other, or using the same queue after reload). This is not good.

Ah, OK, yes, this sounds like a problem. 
 
> This could be solved with a long-discussed, explicit id() parameter, 
> that would let the administrator assign a custom ID, which can be made 
> different for the conflicting drivers, but that hasn't happened yet.

Yup, good idea.

> Using junctions and log expressions could help you to reorganize your 
> configuration in a way that prevent this kind of conflict:
> 
> https://bazsi.blogs.balabit.com/2012/01/syslog-ng-flexibility-improvem
> en ts/

Thanks, I'll see what I can do.

BTW, would this "duplicate UDP destination" work any better if I had a policy where no re-transmissions occurred (i.e., I don't need any queuing for the purposes of re-transmits when the destinations are down)? If so, how would I configure this?

> Hope this helps.

Cheers,
-David

> On Fri, Jun 6, 2014 at 4:15 PM, David Hauck <davidh at netacquire.com>
> wrote:
> 
> 
> 	This morning Gergely Nagy wrote: 	> David Hauck <davidh at netacquire.com>
> writes: 	> 	>> Couple things here: 	>> 1. If this is an error why
> doesn't 'syslog-ng -s' indicate it as such? 	> 	> Because -s checks for
> syntax only, and this is not a syntax error, it's one level higher.
> 
> 
> 	OK.
> 
> 
> 	>> 2. Other than the error, things appear to function correctly.
> Why is this?
> 	>
> 	> That'd be a bit hard to explain without going into low-level details,
> 	> but I'll try: it works because of luck, mostly. UDP destinations will
> 	> not trip over each other when used like this. If you'd try that 
> with files, all hell would break loose.
> 
> 
> 	OK, thanks, having some understanding of how the low level 
> implementation works does help since I don't remember this constraint 
> being discussed in the manual/docs (but I may have missed something 
> there?). Initially it also wasn't clear that these destinations 
> weren't combined at a high level in the implementation so that they, 
> for example, operated within a "pipeline" and thereby enforced a 
> "single-writer" paradigm. Either way, and as you say, this is required 
> for file destinations, but certainly not for network destinations (even in the disconnect case).
> 
> 	In fact, my log() statements with the referenced destinations are 
> complex enough that I may need to rely on the multiple network 
> destination specification capability anyway since combining these as 
> you suggest would make maintenance of the configuration even more 
> difficult (there's a tangle of rules/conditions associated with one of the destination log() statements).
> 
> 
> 	>> 3. Other blocks do not require that their contents contain unique
> 	>> statements. For example, I can create filter blocks that have 	>>
> statements that intersect. Why not destination blocks? 	> 	> Because
> filters generally don't have state, so they can't conflict 	> with each
> other, they can work independently. For destinations, that's not the
> case. For example, if you'd have something like this: 	> 	> destination
> d_1 { file("/var/log/some.log"); udp(...); }; destination 	> d_2 {
> file("/var/log/some.log"); tcp(...); }; 	> 	> That would break horribly,
> as two threads would try to write to the 	> same file, and would write
> over each other, resulting in garbage. That 	> doesn't happen with
> network destinations, but those have different 	> issues. For example,
> if a network target goes down, and you had 	> duplicates in your config,
> then they'd notice the target being down separately, increasing the 
> chance you'll loose logs. If you had one target, and bound it to 
> various sources in a log{} statement instead, then you'd only have one 
> instance of the driver.
> 
> 
> 	I'm wondering if there might be other issues associated with multiple
> (common) network destinations (you only mention one as an example)?
> The example you mention isn't relevant in my case. Whether the network 
> destination is a combined statement/driver or not the payload includes 
> single packets, which are written separately, no? If this is the case 
> it wouldn't matter which packet send detected the network error
> - one or the other would get lost in both cases.
> 
> 	Thanks,
> 	-David
> 
> 
> __________________________________________________________
> ______________ ______ 	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