(Ab-) using Round Robin Databases with Perl Mike Schilli, Yahoo! 06/18/2008 1 Overview What are Round Robin Databases? RRD and Perl – which module to use? Practical Examples 2 Round Robin Databases Archives of fixed size for unlimited data Overwrite old spots if full 3 Round Robin Archives start 4 Round Robin Archives Overwrite if full 5 Round Robin Archives RRDs with multiple archives with different granularity 6 Data Flow with rrdtool Data Source Archive 7 Data Source Conversions 8 Steps and Heartbeat 9 Steps and Heartbeat 10 Steps and Heartbeat 11 Generous Heartbeat 12 Generous Heartbeat 13 Steps and Heartbeat Long story short: Heartbeat > Step if you’re roughly feeding in “step” intervals. Example: Step=300 (5 min) Heartbeat=600 14 Feeding PDPs to the Archive 15 Feeding PDPs to the Archive Consolidation Functions (MAX, AVERAGE, etc.) xfiles factor (allowed percentage of missing values) 16 17 Simple Example Web Orders: 0:00 1:00 2:00 3:00 4:00 5:00 100 110 120 130 140 150 18 Simple Example 19 Simple Example rrdtool 'create' 'myrrdfile.rrd' '--start' '1211871600' '--step' '3600' 'DS:orders:GAUGE:7200:U:U' 'RRA:MAX:0.5:1:100' rrdtool 'update' 'myrrdfile.rrd' '1211875200:100' rrdtool 'update' 'myrrdfile.rrd' '1211878800:110' rrdtool 'update' 'myrrdfile.rrd' '1211882400:120' rrdtool 'update' 'myrrdfile.rrd' '1211886000:130' rrdtool 'update' 'myrrdfile.rrd' '1211889600:140' rrdtool 'update' 'myrrdfile.rrd' '1211893200:150' rrdtool 'graph' 'mygraph.png' '--vertical-label' 'Orders per Hour' '--end' '1211893200' '--start' '1211871600' 'DEF:draw1=myrrdfile.rrd:orders:MAX' 'AREA:draw1#0000FF:Web Orders 20 RRDTool Arcane syntax Perl API RRDs.pm Pretty close to RRDTool syntax Calls rrdtool under the hood 21 To the Rescue: RRDTool::OO CPAN Module RRDTool::OO Takes the drudgery out of the RRD syntax Does what you want by default Translates between Perl and RRD (watch it with debug on) Named parameters instead of fixed order 22 Simple Example #!/usr/local/bin/perl -w use strict; use RRDTool::OO; use DateTime; my $rrd = RRDTool::OO->new( file => "myrrdfile.rrd" ); 23 Simple Example my $start_dt = DateTime->today( time_zone => "local" ); my $dt = $start_dt->clone(); 24 Simple Example $rrd->create( step => 3600, start => $start_dt->epoch(), data_source => { name => "orders", type => "GAUGE", }, archive => { rows => 100 } ); 25 Simple Example for my $hour (0..5) { $dt->add(hours => 1); $rrd->update( time => $dt->epoch(), value => 100 + $hour*10, ); } 26 Simple Example $rrd->graph( image => "mygraph.png", vertical_label => 'Orders per Hour', start => $start_dt->epoch(), end => $dt->epoch(), draw => { type => "area", color => '0000FF', legend => "Web Orders", } ); 27 Simple Example 28 RRDTool Commands rrdtool 'create' 'myrrdfile.rrd' '--start' '1211871600' '--step' '3600' 'DS:orders:GAUGE:7200:U:U' 'RRA:MAX:0.5:1:100' rrdtool 'update' 'myrrdfile.rrd' '1211875200:100' rrdtool 'update' 'myrrdfile.rrd' '1211878800:110' rrdtool 'update' 'myrrdfile.rrd' '1211882400:120' rrdtool 'update' 'myrrdfile.rrd' '1211886000:130' rrdtool 'update' 'myrrdfile.rrd' '1211889600:140' rrdtool 'update' 'myrrdfile.rrd' '1211893200:150' rrdtool 'graph' 'mygraph.png' '--vertical-label' 'Orders per Hour' '--end' '1211893200' '--start' '1211871600' 'DEF:draw1=myrrdfile.rrd:orders:MAX' 'AREA:draw1#0000FF:Web Orders 29 Where RRDtool shines Graph time-based data Don’t worry about scaling or axis text Stacked graphs 30 Where RRDtool sucks Can’t add data for past events Can’t add data twice at the same timestamp 31 Pitfalls Make sure that the first update happens after RRD “start” time Updates need to happen at increasing timestamps On large step sizes (1 year), limit the number of rows to fit within < 2030. 32 Debugging with Log4perl use Log::Log4perl qw(:easy) Log::Log4perl-> easy_init( $DEBUG ); 33 Log4perl Output rrdtool 'create' 'myrrdfile.rrd' '--start' '1211871600' '--step' '3600' 'DS:orders:GAUGE:7200:U:U' 'RRA:MAX:0.5:1:100' rrdtool 'update' 'myrrdfile.rrd' '1211875200:100' rrdtool 'update' 'myrrdfile.rrd' '1211878800:110' rrdtool 'update' 'myrrdfile.rrd' '1211882400:120' rrdtool 'update' 'myrrdfile.rrd' '1211886000:130' rrdtool 'update' 'myrrdfile.rrd' '1211889600:140' rrdtool 'update' 'myrrdfile.rrd' '1211893200:150' rrdtool 'graph' 'mygraph.png' '--vertical-label' 'Orders per Hour' '--end' '1211893200' '--start' '1211871600' 'DEF:draw1=myrrdfile.rrd:orders:MAX' 'AREA:draw1#0000FF:Web Orders 34 Example: Stock Portfolio 35 Example: Measure Power Usage Mastech MAS-345 Serial Interface (RS-232) 36 Example: Measure Power Usage 37 Example: Measure Power Usage 38 Aberrant Behaviour 39 The End Thanks! 40 References RRDTool::OO on CPAN RRD::Simple on CPAN Portfolio Rendering article: http://perlmeister.com/talks/lm-200805.pdf RRDTool article: http://www.linuxmagazine.com/issue/44/Perl_RDDtool.pdf RRDTool article (in German): http://www.linuxmagazin.de/Artikel/ausgabe/2004/06/perl/perl.html 41 Bonus Slides 42 Aberrant Behaviour Holt Winter Algorithm Data Smoothing/Prediction 43 Aberrant Behaviour Holt Winter Algorithm RRAs: HWPREDICT SEASONAL DEVSEASONAL DEVPREDICT FAILURES RRA:HWPREDICT:rows:alpha:beta:sea sonal_period 44 Aberrant Behaviour alpha (baseline): 0..1 1: recent observations carry greater weight 0: past observations carry greater weight beta (slope): 0..1 gamma (seasonal): 0..1 failures defaults to 7 45 Aberrant Behaviour Example: alpha = 0.50 beta = 0.50 gamma = 0.01 seasonal_period = 2 threshold = 7 window_length = 9 46
© Copyright 2025 Paperzz