Thanks for the suggestion Risto, I rewrote it using a perlfunc pattern which 
shows me exactly how far behind SEC is.

On Mon, 4 Jan 2016, Risto Vaarandi wrote:

> Date: Mon, 4 Jan 2016 15:57:37 -0600
> From: Risto Vaarandi <risto.vaara...@gmail.com>
> To: Todd M. Hall <t...@msstate.edu>
> Cc: David Lang <da...@lang.hm>, simple-evcorr-users@lists.sourceforge.net
> Subject: Re: [Simple-evcorr-users] detecting 'old' logs
> 
> hi Todd and David,
> the use of Time::Local module and timelocal() is probably the best way to
> accomplish the task, but to make things a bit more efficient, a perlfunc
> pattern could be employed which would parse the event and calculate the
> time difference in one Perl function without an external regular expression
> match. This approach also allows to obtain the actual time difference
> through a match variable:
>
> type=single
> ptype=perlfunc
> pattern=sub { use Time::Local; \
>         if ($_[0] !~ /^(([A-Z][a-z]{2}) {1,2}(\d{1,2})
> (\d{2}):(\d{2}):(\d{2})) .*sec temporal probe/) { return 0; } \
>         my ($timestamp, $lmon, $lmday, $lhour, $lmin, $lsec) = ($1, $2,
> $3, $4, $5, $6); \
>         my %months = qw(Jan 0 Feb 1 Mar 2 Apr 3 May 4 Jun 5 Jul 6 Aug 7
> Sep 8 Oct 9 Nov 10 Dec 11); \
>         my $month = $months{$lmon}; \
>         my($ctime) = time(); my($year) = (localtime($ctime))[5]; \
>         my $ltime = timelocal($lsec, $lmin, $lhour, $lmday, $month,
> $year); \
>         my $diff = $ctime - $ltime; \
>         if ($diff > 60) { return ($diff, $timestamp); } else { return 0; }
> }
> desc=time difference is $1 seconds (log timestamp is $2)
> action=write - %s
>
> If the time difference is greater than 60 seconds, the perlfunc pattern
> matches "sec temporal probe" event and sets two match variables:
> $1 - time difference in seconds
> $2 - textual timestamp from the "sec temporal probe" event
>
> kind regards,
> risto
>
>
> 2016-01-04 21:25 GMT+02:00 Todd M. Hall <t...@msstate.edu>:
>
>> We looked into this and did indeed find a solution.  You don't want to
>> check the
>> timestamp of all of the syslogs as it would be too much effort and could
>> impact
>> the performance of SEC.  The solution we came up with is to send a syslog
>> message from the localhost via a cron job.  This puts it in the queue like
>> any
>> other syslog but guarantees that the timestamp would be in sync.  So then
>> all
>> you need is an SEC rule to calculate the unix timestamp of the current
>> time and
>> the syslog message.  The final rule is kinda ugly, but it works.
>>
>> ############################ Begin Rule ############################
>> type=Single
>> continue=TakeNext
>> ptype=RegExp
>> context=$1 -> ( sub { use Time::Local; \
>>          my $timestring = $_[0]; \
>>          my %months = qw(Jan 0 Feb 1 Mar 2 Apr 3 May 4 Jun 5 Jul 6 Aug 7
>> Sep 8 Oct 9 Nov 10 Dec 11); \
>>          my ($csec, $cmin, $chour, $cmday, $cmon, $year) =
>> localtime(time); \
>>          $timestring =~ /^([A-Z][a-z]+)\s+(\d+)\s(\d+):(\d+):(\d+)/; \
>>          my ($lmon, $lmday, $lhour, $lmin, $lsec) = ($1, $2, $3, $4, $5); \
>>          my $month = $months{$lmon}; \
>>          my $ltime = timelocal($lsec, $lmin, $lhour, $lmday, $month,
>> $year); \
>>          my $ctime = time; \
>>          my $diff = $ctime - $ltime; \
>>          return 1 if ($ctime - $ltime > 60); \
>>          } )
>> pattern=^([A-Z][a-z]{2}\s+\d+ \d+:\d+:\d+) \S+.*sec temporal probe
>> desc=SEC_behind
>> action=pipe 'SEC is behind 1+ minutes. Log time: $1' /bin/mailx -s "SEC:
>> %t SEC
>> is behind 1+ minutes." u...@somewhere.edu
>> ############################ End Rule ############################
>>
>> This rule triggers if the time is over 60 seconds off.  This could be
>> easily
>> adjusted.  The only problem is that the email doesn't show exactly how far
>> off
>> it is.  Hopefully someone else on this list will have a more elegant
>> solution to
>> this problem.
>>
>>
>> On Mon, 4 Jan 2016, David Lang wrote:
>>
>>> Date: Mon, 4 Jan 2016 12:45:07 -0600
>>> From: David Lang <da...@lang.hm>
>>> To: simple-evcorr-users@lists.sourceforge.net
>>> Subject: [Simple-evcorr-users] detecting 'old' logs
>>>
>>> has anyone put together the code that would be needed to detect if sec
>> or log
>>> delivery is falling behind? something along the order of 'if the
>> timestamp in
>>> the logs is > X min behind current, alert'?
>>>
>>> David Lang
>>>
>>>
>> ------------------------------------------------------------------------------
>>> _______________________________________________
>>> Simple-evcorr-users mailing list
>>> Simple-evcorr-users@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users
>>>
>>
>> --
>> Todd M. Hall
>> Sr. Network Analyst
>> Information Technology Services
>> Mississippi State University
>> t...@msstate.edu
>> 662-325-9311 (phone)
>>
>>
>> ------------------------------------------------------------------------------
>> _______________________________________________
>> Simple-evcorr-users mailing list
>> Simple-evcorr-users@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users
>>
>

-- 
Todd M. Hall
Sr. Network Analyst
Information Technology Services
Mississippi State University
t...@msstate.edu
662-325-9311 (phone)

------------------------------------------------------------------------------
_______________________________________________
Simple-evcorr-users mailing list
Simple-evcorr-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users

Reply via email to