[syslog-ng] Problems with syslog-ng and filters-

Roberto Nibali ratz at drugphish.ch
Tue Jul 12 11:40:07 CEST 2005


Hello,

> I have created 2 filters. There is check if there is link up/down text
> in msg field.

Ok.

> If its match then there comes N else there should be comes N.
                                ^^^
I guess you mean 'Y' here, right?

> My problem is now that i syslog-ng puts double in sql-table one is Y
> and one is N. Any suggestion what is wrong? Here comes also
> configuration.

It looks like you have two problems: a boolean algebra one and a 
syslog-ng configuration one ;). I really hope I'm awake enough and 
didn't miss something ...

> source net { udp(ip("0.0.0.0") port(514)); };
> 
> filter f_link_downup { match(LINK-3-UPDOWN) or match(LINEPROTO-5-UPDOWN) or match(off-line) or match(on-line); };
> filter f_others { not match(LINK-3-UPDOWN) or not match(LINEPROTO-5-UPDOWN) or not match(off-line) or not match(on-line); };

Assert:
    A := LINK-3-UPDOWN
    B := LINEPROTO-5-UPDOWN
    C := off-line
    D := on-line

Then your filters look as follows:

    f_link_downup = A + B + C + D
    f_others      = !A + !B + !C + !D

One would assume that since you have one bit ('Y' and 'N') as the 
outcome, that you'd want 'f_others' to be '!f_link_downup'. So this guy 
de Morgan once brought up following nitpick:

   !f_link_downup == !A * !B * !C * !D

which is what you want for 'f_others'

Thus your filter statements should rather be (unless I didn't understand 
your wishes):

filter f_link_downup {
   match(LINK-3-UPDOWN) or match(LINEPROTO-5-UPDOWN) or match(off-line) 
or match(on-line);
};

filter f_others {
   not match(LINK-3-UPDOWN) and not match(LINEPROTO-5-UPDOWN) and not 
match(off-line) and not match(on-line);
};

You might want to put '"' for the strings but it's not neccessary in 
your case.

> log { source(net); filter(f_link_downup); destination(d_mysql_downup); };
> log { source(net); filter(f_others); destination(d_mysql_others); };

To speed up your logging you could add a flags(final); statement into 
your log statements.

> destination d_mysql_downup {
>  pipe("/tmp/mysql.pipe" template("INSERT INTO logs (host, facility, priority, level, tag, date, time, program, msg, showdata)
>  VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL','$TAG', '$YEAR-$MONTH-$DAY', '$HOUR:$MIN:$SEC', '$PROGRAM', '$MSG', 'N' );\n")
>  template-escape(yes));
> };
> 
> destination d_mysql_others {
>  pipe("/tmp/mysql.pipe" template("INSERT INTO logs (host, facility, priority, level, tag, date, time, program, msg, showdata)
>  VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL','$TAG', '$YEAR-$MONTH-$DAY', '$HOUR:$MIN:$SEC', '$PROGRAM', '$MSG', 'Y' );\n")
>  template-escape(yes));
> };

HTH and best regards,
Roberto Nibali, ratz
-- 
echo 
'[q]sa[ln0=aln256%Pln256/snlbx]sb3135071790101768542287578439snlbxq' | dc


More information about the syslog-ng mailing list