Perl-friendly message queue-like system
Peter Edwards
peter at dragonstaff.co.uk
Thu Sep 22 22:54:08 BST 2011
>
> The problem is not the database I store stuff in, it's getting stuff to the
> database in the first place. The final data store will almost certainly be
> postgres, I see no reason to use anything else.
>
>
If volume is not a problem, sure.
We already had 10GB in our PostgreSQL db and didn't want any more coming
from generating rolling 5 minute, 15 minutes, 30 minutes, hourly (etc.)
stats -> real time graphs for our monitoring screens with historic period
comparison across a range of measures .
In case it's of use for someone else here's an easy way to do it.
With RRD you create a logging database file like
$ rrdtool create transfer.rrd \
--start N --step 300 \
DS:transfer_in_secs:GAUGE:1200:0:600 \
DS:files_transferred:GAUGE:1200:0:20 \
DS:transfer_errors:GAUGE:1200:0:20 \
DS:average_errors:COMPUTE:transfer_errors,files_transferred,/,100,* \
RRA:AVERAGE:0.5:1:3600 \
RRA:MAX:0.5:1:3600 \
RRA:MIN:0.5:1:3600 \
RRA:AVERAGE:0.5:4:9600 \
RRA:AVERAGE:0.5:24:6000
that logs 3 data points and computes one more
# in your app's logging configuration set up a Log4perl logger to write RRD
entries
use Log::Log4perl;
my $transfer_rrd_db_path = "./transfer.rrd";
Log::Log4perl->init(
...
"log4perl.category.TRANSFERRRD" => "INFO, TransferRRD",
"log4perl.appender.TransferRRD" => "Log::Log4perl::Appender::RRDs",
"log4perl.appender.TransferRRD.dbname" => $transfer_rrd_db_path,
"log4perl.appender.TransferRRD.layout" =>
"Log::Log4perl::Layout::PatternLayout",
"log4perl.appender.TransferRRD.layout.ConversionPattern" => "N:%m",
...
);
# now in your code when you do some work
get_logger('TRANSFERRRD')->info(
$time_elapsed . ':' .
$files_transferred . ':' .
$total_errors
);
then you can create a graph (if that's what you want) with
$ rrdtool graph ./transfer.rrd \
--start "-1day" --title="Average transfer time" --vertical-label "secs" \
--height 200 --width 400 \
DEF:var_transfer_in_secs=transfer.rrd:transfer_in_secs:AVERAGE \
DEF:var_files_transferred=transfer.rrd:files_transferred:AVERAGE \
DEF:var_transfer_errors=transfer.rrd:transfer_errors:AVERAGE \
LINE1:var_transfer_in_secs#ff0000:"transfer time in seconds" \
AREA:var_files_transferred#33BB22:"files transferred" \
AREA:var_transfer_errors#A1A1A1:"transfer errors"
More at
http://oss.oetiker.ch/rrdtool/doc/rrdtool.en.html
Regards, Peter
http://perl.dragonstaff.co.uk
More information about the london.pm
mailing list