Our situation: We need to be able to analyze our WAN link traffic patterns. We are getting ready to replace our hub-and-spoke frame relay network with a MPLS network. We need to know how much each PVC is being utilized during business hours (8 AM to 5 PM local time). We will then use that to size the branch local loops.
The Problem: Plain brown wrapper MRTG shows averages over 7 X 24 period with not a clean way to segregate business hour traffic. My Solution: I modified Paul Williamson & Daniel McDaniel's excellent talker.pl. This script accumulates the traffic over the specified time period and then ranks the targets by bytes or percent utilization. This gives a great Top Talker report. I added a radio button to be able to select all hours or only business hours. I then added code to modify the data accumulation routine to respect that selection. There may be other ways to do this but this works for me. An Aside: I wish I had known about http://www.geocities.com/mrtg_daemon/toptalkers.html when I was first setting up my configurations. He does a great job of documenting how to set what up to get the most out of talker.pl. Kudos to fixitdave (at) blueyonder {dot}co{dot}uk. My hacks [in diff -c format]: *** talker.pl 2004-08-02 15:45:16.000000000 -0400 --- talker-wan7206_business.pl 2005-01-10 10:35:59.000000000 -0500 *************** *** 1,8 **** ! #!/usr/bin/perl # talker.pl: Rank the talkers in a single config file based # on percent utilization of a circuit # # Version 1.1 - DJM/PCW - July 10, 2001 # Changed the periods to reflect the correct information # Added functionality to call talker from command line --- 1,10 ---- ! #!/usr/bin/perl -T # talker.pl: Rank the talkers in a single config file based # on percent utilization of a circuit # + # Version 1.2 - PMB - January 10, 2005 + # Added code to test for business hours only # Version 1.1 - DJM/PCW - July 10, 2001 # Changed the periods to reflect the correct information # Added functionality to call talker from command line *************** *** 194,199 **** --- 202,211 ---- td($query->radio_group(-name=>'sort', -values=>['Units','Utilization'], -default=>'Units'))); + print Tr(td("Hours to use:"), + td($query->radio_group(-name=>'hours', + -values=>['All Hours','Business Hours'], + -default=>'All'))); print end_table; print $query->submit(-label=>'Get rankings'); print $query->end_form; *************** *** 205,211 **** $sort = param('sort'); my $grouptitle = param('group'); my $order = param('order'); ! print h1({-align=>'center'},"Top $total $grouptitle Talkers" .br. "as of $timephrase" .br. "in $order order",hr); my (%topin,%topout,%perctopin,%perctopout); my $interval = $topparams{param('period')}[0]; my $start = $topparams{param('period')}[1]; --- 217,226 ---- $sort = param('sort'); my $grouptitle = param('group'); my $order = param('order'); ! my $period = param('period'); ! my $which_hours = param('hours') ; ! my $business_hours_only = $which_hours eq "Business Hours" ; ! print h1({-align=>'center'},"$period Top $total $grouptitle Talkers" .br. "as of $timephrase $which_hours " .br. "in $order order",hr); my (%topin,%topout,%perctopin,%perctopout); my $interval = $topparams{param('period')}[0]; my $start = $topparams{param('period')}[1]; *************** *** 224,232 **** my ($start,$step,$names,$data) = RRDs::fetch @opts; my ($intot,$outtot,$i,$intotperc,$outtotperc); foreach my $item (@$data) { ! $i++; ! $intot += $$item[0]; ! $outtot += $$item[1]; } if ($i > 0) { $perctopin{$tar} = sprintf('%3f',$intot/ $i / $targets{maxbytes}{$tar} * 100); --- 239,264 ---- my ($start,$step,$names,$data) = RRDs::fetch @opts; my ($intot,$outtot,$i,$intotperc,$outtotperc); foreach my $item (@$data) { ! ## -> PMB Test for business hours or not ! if ($business_hours_only) { ! @loctime = localtime($start) ; ! $start += $step; ! $loctime = scalar localtime($start) ; ! if ( $loctime[2] >= 8 && $loctime[2] < 18 ) { ! ## accumulate values ! $i++; ! $intot += $$item[0]; ! $outtot += $$item[1]; ! } #not business hours so don't accumulate ! } else { ! ## We don't care what time it is, just accumulate ! $i++; ! $intot += $$item[0]; ! $outtot += $$item[1]; ! } } if ($i > 0) { $perctopin{$tar} = sprintf('%3f',$intot/ $i / $targets{maxbytes}{$tar} * 100); ----- Enjoy! Patrick ===== Patrick Bartkus, RHCE, CCNP, SCM Sr. Network Support Analyst Atlanta, GA If truth was not absolute, how could there be justice? __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com -- Unsubscribe mailto:[EMAIL PROTECTED] Archive http://www.ee.ethz.ch/~slist/mrtg FAQ http://faq.mrtg.org Homepage http://www.mrtg.org WebAdmin http://www.ee.ethz.ch/~slist/lsg2.cgi
