hi Jaren,
you could try the following simple ruleset and see if this fits your needs:

type=Calendar
time=0 * * * *
desc=drop byte counters
action=lcall %o -> ( sub { %bytes = () } )

type=Single
ptype=RegExp
pattern=^\d+\/\d+\/\d+ \d{2}:\d{2}:\s*POST \S+ ([\w.@-]+) (\d+)
context=$1 $2 -> ( sub { ($bytes{$_[0]} += $_[1]) > 10000 } ) && \
        !SUPPRESS_ALARMS_FOR_$1
desc=User $1 has transmitted too many bytes
action=write - %s; create SUPPRESS_ALARMS_FOR_$1 7200

This ruleset employs the Perl hash table %bytes for keeping track of user
data transfers. The keys to %bytes hash table are user names, and the value
which corresponds to each user name is the number of bytes transmitted.

Since you didn't mention in which particular time window you would like to
accomplish upload tracking, I have chosen a fixed window of 1 hour which is
applied to all users. The purpose of the first rule is to drop byte
counters for all users once every hour. If you wish to accomplish the
monitoring in a larger window, it is easy to adjust the 'time' field of the
Calendar rule accordingly (the field takes a value in crontab syntax).

The second rule matches individual upload events with the regular expression

^\d+\/\d+\/\d+ \d{2}:\d{2}:\s*POST \S+ ([\w.@-]+) (\d+)

which sets $1 to user name and $2 to transmitted bytes. I have assumed that
legal characters for user names are letters, digits, underscores, dots,
dashes and @-signs, and therefore I've used ([\w.@-]+) for matching the
username. If you want your username to be just any sequence of
non-whitespace characters, you can use (\S+) instead. In order to track the
number of bytes user has uploaded, the rule uses the following context
expression

$1 $2 -> ( sub { ($bytes{$_[0]} += $_[1]) > 10000 } ) && \
        !SUPPRESS_ALARMS_FOR_$1

which consists of two operands joined by logical AND (&&).

The first operand '$1 $2 -> ( sub { ($bytes{$_[0]} += $_[1]) > 10000 } )'
is a call to a precompiled perl function which simply adds bytes for the
current upload to the total of the given user. Note that the variables $1
(user name) and $2 (bytes) serve as input parameters for the function.
Also, the function checks if the resulting user total exceeds the threshold
(I have used 10000 bytes for threshold which probably needs replacement by
a more reasonable value). The second operand of the context expression
!SUPPRESS_ALARMS_FOR_$1 is true if the context SUPPRESS_ALARMS_FOR_$1 does
not exist (which is the case if we haven't generated alarm for the given
user within the last 2 hours -- see the following explanation). If both
operands are true (in other words, the upload threshold is violated and we
haven't produced an alert about the user in last 2h), the rule will write a
warning string to standard output with the 'write' action. Also, after
generating the alarm, the rule creates the SUPPRESS_ALARMS_FOR_$1 context
with a lifetime of 7200 seconds. Since the context will stay around for 2
hours, it suppresses further alarms for the same user for this time frame.

Hope this helps,
risto





2015-09-29 11:21 GMT+03:00 Jaren Peich <burkol...@gmail.com>:

> Hi,
>
> Sorry for my English and thanks for the perl library. Thanks for accepting
> me in mailing list. :)
>
> I have to program a code with SEC to detect a quantity of bytes uploaded
> to the web from one user with a limit. I dont know how to sum the quantity
> of bytes that comes from each proxy log line till reach the limit and
> generate an alert.
>
> Log Line
>
> Time: Method "Url" User Bytes
> 29/09/2015 10:14:POST "www.google.com" Korsakof 1250
>
> Thank you. Regards.
>
>
>
>
>
>
>
>
>
> ------------------------------------------------------------------------------
>
> _______________________________________________
> Simple-evcorr-users mailing list
> Simple-evcorr-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users
>
>
------------------------------------------------------------------------------
_______________________________________________
Simple-evcorr-users mailing list
Simple-evcorr-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users

Reply via email to