On Tue, 18 Oct 2011, Justin J. Novack wrote:

> Great idea, however, now all 432 ports on my device would send out an email
> on flap, rather than the 60 important ones.  This would be perfect if an
> entire switch needed friendly names.
>
> As for David's suggestion, this would also be the case, however, I could
> error out (silently) if it doesn't match something in the hash.  I would
> still need to call a shellcmd, I don't just email, I also trigger additional
> alerts like sounds and phones with the shellcmd announce.php, I'm happy to
> call that separately.  At that point, I might as well just offload EVERY
> event to different perl files and fail silently if the switch/port
> combination is not in a hash/map.
>
> Are these ways any safer(?) or less performance intensive than 60+ rules?
> My initial thought was to write a template and seed file (ala Section 4.2
> http://sixshooter.v6.thrupoint.net/SEC-examples/article-part2.html#SECPERFORMANCE)
> and just deal with adding a line (for each friendly named port) and
> recompiling the rules file every time I want to change.
>
> Thoughts?

regex matches are expensive (even in perl), if you can replace many regex 
matches with one perl match you will gain a lot of efficiency.

forexample, instead of your current match

pattern=\w+\s+\d+\s\d+:\d+:\d+\s(switch).*LINK-3-UPDOWN.*Interface 
(GigabitEthernet4\/38), changed state to down

you could replace it with a perl snippet along the lines of:

pattern= sub (@junk = split(' ',substr($[0],17)); if (exists 
%serverhash{$junk[8]} && $junk[4] eq 'LINK-3-UPDOWN') {return $_;}

this will return the line as $0 if the line is a 'LINK-3-UPDOWN' event and 
the interface is in the serverhash list. you can easily add additional 
parsing of the line in perl to pull apart the data in other ways.

doing a split on space is far cheaper than evaluating a lengthy regex, 
especially with a lot of \w+ \s+ \d+ type entries. with a default syslog 
line you need to do the split on the substring starting with column 17 
because the date will have an extra space in it for the first 9 days of 
each month.

David Lang

> --
> Justin J. Novack
> Official Disturber of the Peace
>
>
> On Tue, Oct 18, 2011 at 1:52 PM, John P. Rouillard <rou...@cs.umb.edu>wrote:
>
>>
>> In message
>> <CAB3_BpPsYVc+OKX5oio03tuSy=D=o5ikb5eq7rxtxykvuax...@mail.gmail.com> ,
>> "Justin J. Novack" writes:
>>> [...]
>>> I could tap the collective knowledge.  My dilemma is that I'd like to be
>>> able to email out a friendly name for a port if one should exist.
>>>
>>> Rather than writing a x number of rules for x number of ports with a
>>> friendly name, (Port 1 belongs to EXCHANGE, port 2 belongs to
>>> DOMAINCONTROLLER, port 3 belongs to DNSSERVER, etc), I was wondering if
>>> there is a way to reference a map (by an external file or written within
>> the
>>> rule itself).
>>
>> You could use `grep interface name /file/mapping` in the commands
>> where you invoke the shell. Alternatively you could call a shell
>> script that interfaces to your inventory management system and does a
>> lookup so when the IMS changes mappings, you get the change
>> automatically.
>>
>> action=pipe '%s' /bin/mail -s '[ERROR] `grep '^$2' /file/mapping`
>> LINK_DOWN!' n...@domain.net;
>>
>> for example.
>>
>>> My admins don't know what Ethernet4/38 maps to, and they shouldn't be
>>> expected to memorize it.  So currently I have to write the following rule:
>>>
>>> # IMPORTANT SERVER 1
>>> type=Single
>>> ptype=RegExp
>>> pattern=\w+\s+\d+\s\d+:\d+:\d+\s(switch).*LINK-3-UPDOWN.*Interface
>>> (GigabitEthernet4\/38), changed state to down
>>> desc=(MAJOR) $1 interface $2 DOWN!
>>> action=pipe '%s' /bin/mail -s '[ERROR] IMPORTANT SERVER 1 LINK_DOWN!'
>>> n...@domain.net; \
>>>        shellcmd /usr/bin/php /home/scripts/announce.php "IMPORTANT SERVER
>>> 1 Link DOWN" "%s" 9
>>> [...]
>>> Multiply that over each port needed, and I am swamped in rules.  Is it
>>> possible to utilize a mapping function so I have to write that rule once,
>>> but I can map interfaces with friendly names?
>>>
>>> GigabitEthernet4/38, IMPORTANT SERVER 1
>>> GigabitEthernet4/39, IMPORTANT SERVER 2
>>> GigabitEthernet4/40, IMPORTANT SERVER 3
>>
>> I can see a couple of other ways of doing this inside of sec, but I am
>> not sure it's easier/better than using `` in the command output:
>>  1) use contexts
>>  2) use a perl associative array
>>
>> The context could be called server_for_GigabitEthernet4/38 and have
>> the value IMPORTANT SERVER 1. To populate it a rule like:
>>
>>  type = single
>>  ptype = regexp
>>  pattern = ^set (GigabitEthernet[0-9/]*) (.*)
>>  action = fill server_for_$1 $2
>>
>> and generate a series of events/input lines like:
>>
>>  set GigabitEthernet4/40 IMPORTANT SERVER 3
>>
>> into SEC (see the mailing list archives for doing this over a secure
>> control channel).
>>
>> Then to use the mapping:
>>
>>   action2=assign %S; copy server_for_$2 %S; pipe '%s' /bin/mail -s
>> '[WARNING] %S Link Bounce' n...@domain.net; ...
>>
>> Note I may have some syntax off as I am doing this from memory. The
>> assign is needed to wipe any prior value and the copy pulls the value
>> from the context.
>>
>> You can also do something similar using a perl associative array
>> replacing the fill ... from above with
>>
>>  eval %v ($ServerName{$1} = '$2')
>>
>> using the same single rule.  To retrieve the value use something like:
>>
>>   eval %S ($ServerName{$2})
>>
>> which will return the value or use some extra perl (... || "Unknown
>> server" perhaps??) to return a default value if the key doesn't
>> exist. Note there may need to be a return or some other perlish syntax
>> around $ServerName{$1}. I'm not in a position to test at the moment.
>>
>> All of these alternatives allow you to change the mappings on the fly
>> using input to SEC (or rewriting an external file) which is usually
>> wanted since a change in the wiring infrastructure shouldn't require a
>> restart of SEC.
>>
>> --
>>                                -- rouilj
>> John Rouillard
>> ===========================================================================
>> My employers don't acknowledge my existence much less my opinions.
>>
>

------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2d-oct
_______________________________________________
Simple-evcorr-users mailing list
Simple-evcorr-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users

Reply via email to