So you would like to react on the *second* DHCPDISCOVER event, where the 
network is the same as for the previous event, but MAC is different?

If that's the case, here are the rulesets for sample A and B events.

The first solutions employs one Pair rule. Since regular expressions are 
identical in both parts of the rule, the first regular expression will 
grab all events and nothing gets passed to the second expression. In 
order to prevent this from happening, we have to use a context called 
TRACKING_$2 which will be created when the first event appears. For 
example, if event "blah A blah B" appears, context TRACKING_B is 
created. The presence of the context will switch off the first regular 
expression for 60 seconds if any subsequent event "blah * blah B" 
arrives. After example event "blah A blah B" has arrived, we will also 
create an alias HAVE_SEEN_B_WITH_A which indicates that we have seen B 
with A (creating an alias instead of another context is useful, since 
TRACKING_B and HAVE_SEEN_B_WITH_A are supposed to exist exactly at the 
same time).

Suppose now that second instance of "blah * blah B" event comes in. Note 
that the first regular expression is unable to match due to the presence 
of TRACKING_B. However, the second regular expression matches only if * 
is not A (since the presence of HAVE_SEEN_B_WITH_A prevents the match 
from occurring). For instance, if "blah C blah B" comes in, it matches, 
since HAVE_SEEN_B_WITH_C does not exist, and thus a string "we have 
observed B without A (instead A there was C)" gets written to standard 
output:

type=Pair
ptype=regexp
pattern=blah (.+) blah (.+)
context=!TRACKING_$2
desc=tracking second instance of $2
action=create TRACKING_$2 60; alias TRACKING_$2 HAVE_SEEN_$2_WITH_$1
ptype2=regexp
pattern2=blah (.+) blah $2
context2=!HAVE_SEEN_%2_WITH_$1
desc2=we have observed %2 without %1 (instead %1 there was $1)
action2=write - %s; delete TRACKING_%2
window=60

(Note that the lifetime of the Pair operation and the contexts is 60 
seconds.)

If you would like to achieve the same effect with Single rules, you 
could do something like:

type=Single
ptype=regexp
pattern=blah (.+) blah (.+)
context=!TRACKING_$2
desc=start tracking second instance of $2 without $1
action=create TRACKING_$2 60; alias TRACKING_$2 HAVE_SEEN_$2_WITH_$1

type=Single
ptype=regexp
pattern=blah (.+) blah (.+)
context=TRACKING_$2 && !HAVE_SEEN_$2_WITH_$1
desc=we have observed $2 twice with different companions
action=write - %s; delete TRACKING_$2

It is quite similar to previous Pair rule - you just can't get the name 
of first companion of B into the alarm (A, that is). I have to admit I 
like the second solution a bit more, since all correlation logic is 
presented as boolean expressions, and is thus easier to read.

In your last post, I also noticed that you used ^ for negation inside 
the pattern2 field. That will not work unfortunately -- ^ works as a 
negation operator only inside square brackets [^...], but this construct 
matches *one* character only. If you want to negate a whole string, Perl 
regexp negative look-ahead or look-behind might do the trick. I my 
example, I haven't used it, but the first solution might be somewhat 
simpler with it:

type=Pair
ptype=regexp
pattern=blah (.+) blah (.+)
context=!TRACKING_$2
desc=tracking second instance of $2
action=create TRACKING_$2 60
ptype2=regexp
pattern2=blah ((?!$1)\S+) blah $2
desc2=we have observed %2 without %1 (instead %1 there was $1)
action2=write - %s; delete TRACKING_%2
window=60

Note that I haven't tested it fully, but after a quick test it seemed to 
work.

hope this helps and is not too confusing :)
risto


On 10/01/2010 07:25 PM, Mike Rykowski wrote:
> What I want to do is ignore subsequent messages if the mac and network
> are the same. But if a subsequent message has the same network but
> different mac then send email.
>
> So it seems I'd like to see your example solutions :)
>
> On Fri, 2010-10-01 at 19:17 +0300, Risto Vaarandi wrote:
>> hi Mike,
>>
>> I have almost completed two possible example solutions to the problem,
>> but after seeing your e-mail I have an inkling I've got the problem
>> statement wrong :(
>> So far I had an impression that you would like to do some clever
>> pairwise correlation for events that are matched by (almost) identical
>> regular expressions. (Just a note: if the expressions are almost the
>> same, it is actually a bit tricky with Pair* rules.)
>> However, from the example I've got an understanding that you would
>> simply like to suppress duplicate alarms for within a given time window,
>> provided that *both* the MAC address and the network are the same. Is my
>> understanding correct?
>> If so, you could try the following rule:
>>
>> type=SingleWithSuppress
>> ptype=RegExp
>> pattern=\S+\s+\S+\s+\S+\s+\S+ dhcpd: DHCPDISCOVER from (\S+) via \S+
>> network (\S+): no free leases
>> desc=$2 no free leases for MAC $1
>> action=send email
>> window=120
>>
>> If I didn't get it quite right, I'll post my two example solutions :)
>


------------------------------------------------------------------------------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing.
http://p.sf.net/sfu/novell-sfdev2dev
_______________________________________________
Simple-evcorr-users mailing list
Simple-evcorr-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users

Reply via email to