[syslog-ng] Rewriting Cisco messages

Thomas Wollner tw at wollner-net.de
Tue Feb 7 23:01:32 CET 2012


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi Martin,

mine is a simplified one of yours (and yes stolen / inspired from elsa;-))

filter f_rewrite_cisco_program {
  match('%([^:]+):\s+([^\n]+)' value("MESSAGE") type("pcre")
flags("store-matches" "nobackref"));
};

rewrite r_cisco_program {
  set("$1", value("PROGRAM") condition(filter(f_rewrite_cisco_program)));
  set("$2", value("MESSAGE") condition(filter(f_rewrite_cisco_program)));
};

just one step and in the rewrite everything before the % gets whiped out.

I`m pre-filtering for cisco based logs (which have the mnemonic in the
message) and then rewrite only those. I`have logs from different
network vendors and some servers too. The combined pre-filter together
with the rewrite I newer catched a "false" one. Currently I have
around 6-8 k msg/sec and I do not notice an impact on cpu utilization
compared to the setup without the rewriting.


best regards,

Tom




On 07.02.2012 22:45, Martin Holste wrote:
> Yep, my regexes should account for all of those weird formats.
> So, your method is a two-step method in which you first clear out 
> everything before the percent sign, then you match from the percent
> to the colon?  Are you only receiving Cisco syslog?  Do you have a
> config example?
> 
> On Tue, Feb 7, 2012 at 2:16 PM, Thomas Wollner <tw at wollner-net.de>
> wrote:
> 
> 
> Martin,
> 
> the configs on cisco routers are very different. One can use too
> many options how timestamps are built and that crap makes it to the
> message part of the log.
> 
> Just an example: #service timestamps log myrouter(config)#service
> timestamps log ? datetime  Timestamp with date and time uptime
> Timestamp with system uptime <cr>
> 
> myrouter(config)#service timestamps log date 
> myrouter(config)#service timestamps log datetime ? localtime
> Use local time zone for timestamps msec           Include
> milliseconds in timestamp show-timezone  Add time zone information
> to timestamp year           Include year in timestamp <cr>
> 
> Because of the too many options I used to rewrite all that crap
> with nothing until I find a %FACILITY-PRIORITY-PROGRAM - a so
> called mnemonic - and set that as the $PROGRAM without leading %.
> That way I can use a simple regex "everything between % and :" is
> program and everything until end of line is message.
> 
> The above options are just for ios based devices. ios-xe, ios-xr, 
> nx-os are out in the wild now and I`m quite shure they will
> operate different...
> 
> just my 2 cents,
> 
> best regards,
> 
> Tom
> 
> 
> 
> On 07.02.2012 16:26, Martin Holste wrote:
>>>> I spent some time yesterday working out the proper regexes
>>>> to handle the many ways Cisco sends its timestamps, depending
>>>> on how the device is configured.  However, I feel like my
>>>> solution can be improved upon, so I'd like to see if there's
>>>> a better way.  Here's what I've got so far that seems to be
>>>> working, though there seems to be a 10-15% CPU penalty at the
>>>> moment:
>>>> 
>>>> #4w4d: %LINEPROTO-5-UPDOWN: Line protocol on Interface 
>>>> FastEthernet0/15, changed state to down #1y46w: 
>>>> %CDP-4-NATIVE_VLAN_MISMATCH: Native VLAN mismatch discovered
>>>> on GigabitEthernet0/1 (1), with S-COR-02 GigabitEthernet2/15
>>>> (40). filter f_rewrite_cisco_program_3 {
>>>> match('^\d+[ywdh]\d+[ywdh]: (%[^:]+): ([^\n]+)'
>>>> value("MSGONLY") type("pcre") flags("store-matches"
>>>> "nobackref")); };
>>>> 
>>>> #Feb  6 16:43:32.219: %LINK-3-UPDOWN: Interface 
>>>> FastEthernet2/0/42, changed state to up filter 
>>>> f_rewrite_cisco_program_2 { 
>>>> match('^[\*\.]?(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}(?:\.\d+)?(?:
>>>>
>>>>
>
>>>> 
[A-Z]{3})?: (%[^:]+): ([^\n]+)'
>>>> value("MSGONLY") type("pcre") flags("store-matches"
>>>> "nobackref")); };
>>>> 
>>>> # Others where MSGONLY starts with PROGRAM filter 
>>>> f_rewrite_cisco_program { match('^(%[A-Z]+\-\d\-[0-9A-Z]+): 
>>>> ([^\n]+)' value("MSGONLY") type("pcre")
>>>> flags("store-matches" "nobackref")); };
>>>> 
>>>> rewrite r_cisco_program { set("$1", value("PROGRAM") 
>>>> condition(filter(f_rewrite_cisco_program) or 
>>>> filter(f_rewrite_cisco_program_2) or 
>>>> filter(f_rewrite_cisco_program_3))); set("$2",
>>>> value("MESSAGE") condition(filter(f_rewrite_cisco_program)
>>>> or filter(f_rewrite_cisco_program_2) or 
>>>> filter(f_rewrite_cisco_program_3))); };
>>>> 
>>>> This works, but is there a better way? 
>>>> ______________________________________________________________________________
>>>>
>>>>
>
>>>> 
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
>>>> 
>> ______________________________________________________________________________
>>
>> 
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
>> 
> ______________________________________________________________________________
>
> 
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
> 
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iD8DBQFPMZ88TCCRT+dccOYRAkD4AJ9RZS5LT44x9oYsNvVEvQpQNgZfQwCePCdP
TVucxhRlGcgD14mRqYMhzD8=
=v6vK
-----END PGP SIGNATURE-----


More information about the syslog-ng mailing list