[syslog-ng] patterndb: grep on steroids

Balazs Scheidler bazsi at balabit.hu
Tue Jul 20 14:11:03 CEST 2010


Hi,

This is a repost of my blog post at http://bazsi.blogs.balabit.com/
regarding patterndb and syslog-ng OSE 3.2. I felt it was important
enough to crosspost it here.


You may have heard of my last project to collect log samples from
various applications, in order to convert log data from free-form human
readable strings into structured information.

The first round to collect login/logout messages from sshd is now
complete.

You could ask: ok, but what is the immediate benefit? You supposedly
have a lot of unprocessed log files, and syslog-ng's db-parser() has not
been used to process them, thus they are stored as good-old plain text
files.

I spent a couple of hours to add a "grep"-like functionality to pdbtool
which makes it easy to process already existing log files, giving you
immediate benefit for each and every sample added to patterndb.

For example, if you are interested in login failure events, you could
say:

zcat logfile.gz | pdbtool match -p access/sshd.pdb \
  --file - \
  --filter 'tags("usracct") and match('REJECT' type(string) value("secevt.verdict"));' \
  --template '${usracct.type},${secevt.verdict},${usracct.username}\n'


What the command above does is the following:
      * reads a compressed logfile from logfile.gz
      * tells pdbtool to use access/sshd.pdb (in the patterndb git repo)
        as its pattern database file
      * tells pdbtool to read its stdin as a logfile, and
      * apply the db-parser() for each log message
      * apply the syslog-ng filter specified above
      * and print matching messages using the template also specified
        above

As a combination, it results in a CSV file, containing login failure
records found in the logfile. Also please note that as long there's a
pattern in the pdb file, it doesn't really matter how that originally
looked like, the fact that ssh can use 3-5 different messages for the
same meaning is hidden nicely under the hood.

And imagine we'd have patterns for all common applications running on
our computers: this would mean that the same command above would produce
login-failure reports independently from the application/OS combination
being used.

Try that with grep. :)

This pdbtool is in the OSE 3.2 tree, clone the tree from:
git://git.balabit.hu/bazsi/syslog-ng-3.2.git

If you want to experiment with the OSE 3.2 tree, please read the OSE 3.2
caveats post at:

http://bazsi.blogs.balabit.com/2010/07/syslog-ng-ose-32-caveats.html


-- 
Bazsi




More information about the syslog-ng mailing list