From 2c51d5deec879ab7aade039139e9d3a4d5643656 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 30 Oct 1998 06:12:14 +0000 Subject: [PATCH] added a perl script to summarise the rsyncd log format --- loadparm.c | 2 +- rsyncd.conf.yo | 5 +- support/rsyncstats | 284 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 289 insertions(+), 2 deletions(-) create mode 100755 support/rsyncstats diff --git a/loadparm.c b/loadparm.c index 8fe8e8d8..ee9639af 100644 --- a/loadparm.c +++ b/loadparm.c @@ -151,7 +151,7 @@ static service sDefault = NULL, /* secrets file */ NULL, /* exclude */ NULL, /* exclude from */ - "%o %h [%a] %m (%u) %f %l ", /* log format */ + "%o %h [%a] %m (%u) %f %l", /* log format */ }; diff --git a/rsyncd.conf.yo b/rsyncd.conf.yo index fefeca92..08c188f6 100644 --- a/rsyncd.conf.yo +++ b/rsyncd.conf.yo @@ -131,7 +131,10 @@ itemize( it() %u for the authenticated username (or the null string) ) -The default log format is "%o %h [%a] %f %l" +The default log format is "%o %h [%a] %m (%u) %f %l" + +A perl script called rsyncstats to summarise this format is included +in the rsync source code distribution. dit(bf(socket options)) This option can provide endless fun for people who like to tune their systems to the utmost degree. You can set all diff --git a/support/rsyncstats b/support/rsyncstats new file mode 100755 index 00000000..9471c709 --- /dev/null +++ b/support/rsyncstats @@ -0,0 +1,284 @@ +#! /usr/bin/perl +# --------------------------------------------------------------------------- +# +# USAGE: rsyncstats +# +# OPTIONS: +# -f Use for the log file +# -h include report on hourly traffic +# -d include report on domain traffic +# -t report on total traffic by section +# -D report only on traffic from +# -l Depth of path detail for sections +# -s
Section to report on, For example: -s /pub will report +# only on paths under /pub +# +# This script parses the default logfile format produced by rsync when running +# as a daemon with transfer logging enabled. It is derived from the xferstats +# script that comes with wuftpd +# +# Andrew Tridgell, October 1998 +# rsync-bugs@samba.anu.edu.au +# +# --------------------------------------------------------------------------- + +# edit the next line to customize for your default log file +$usage_file = "/var/adm/rsyncd.log"; + +# Edit the following lines for default report settings. +# Entries defined here will be over-ridden by the command line. + +$opt_h = 1; +$opt_d = 0; +$opt_t = 1; +$opt_l = 2; + +require 'getopts.pl'; +&Getopts('f:rahdD:l:s:'); + +if ($opt_r) { $real = 1;} +if ($opt_a) { $anon = 1;} +if ($real == 0 && $anon == 0) { $anon = 1; } +if ($opt_f) {$usage_file = $opt_f;} + +open (LOG,$usage_file) || die "Error opening usage log file: $usage_file\n"; + +if ($opt_D) {print "Transfer Totals include the '$opt_D' domain only.\n"; + print "All other domains are filtered out for this report.\n\n";} + +if ($opt_s) {print "Transfer Totals include the '$opt_s' section only.\n"; + print "All other sections are filtered out for this report.\n\n";} + +line: while () { + + @line = split; + + $day = $line[0]; + $time = $line[1]; + $pid = $line[2]; + $op = $line[3]; + $host = $line[4]; + $ip = $line[5]; + $module = $line[6]; + $user = $line[7]; + $file = $line[8]; + $bytes = $line[9]; + + next if ($#line != 9); + + next if ($op != "send" && $op != "recv"); + + $daytime = $day; + $hour = substr($time,0,2); + + $file = $module . "/" . $file; + + @path = split(/\//, $file); + + $pathkey = ""; + for ($i=0; $i <= $#path && $i <= $opt_l;$i++) { + $pathkey = $pathkey . "/" . $path[$i]; + } + + next if (substr($pathkey,0,length("$opt_s")) ne "$opt_s"); + + $host =~ tr/A-Z/a-z/; + + @address = split(/\./, $host); + + $domain = $address[$#address]; + if ( int($address[0]) > 0 || $#address < 2 ) + { $domain = "unresolved"; } + + if ($opt_D) { + next unless (substr($domain,0,length("$opt_D")) eq "$opt_D"); + } + + +# printf ("c=%d day=%s bytes=%d file=%s path=%s\n", +# $#line, $daytime, $bytes, $file, $pathkey); + + $xferfiles++; # total files sent + $xfertfiles++; # total files sent + $xferfiles{$daytime}++; # files per day + $groupfiles{$pathkey}++; # per-group accesses + $domainfiles{$domain}++; + + $xferbytes{$daytime} += $bytes; # bytes per day + $domainbytes{$domain} += $bytes; # xmit bytes to domain + $xferbytes += $bytes; # total bytes sent + $groupbytes{$pathkey} += $bytes; # per-group bytes sent + + $xfertfiles{$hour}++; # files per hour + $xfertbytes{$hour} += $bytes; # bytes per hour + $xfertbytes += $bytes; # total bytes sent +} +close LOG; + +@syslist = keys(systemfiles); +@dates = sort datecompare keys(xferbytes); + +if ($xferfiles == 0) {die "There was no data to process.\n";} + + +print "TOTALS FOR SUMMARY PERIOD ", $dates[0], " TO ", $dates[$#dates], "\n\n"; +printf ("Files Transmitted During Summary Period %12.0f\n", $xferfiles); +printf ("Bytes Transmitted During Summary Period %12.0f\n", $xferbytes); +printf ("Systems Using Archives %12.0f\n\n", $#syslist+1); + +printf ("Average Files Transmitted Daily %12.0f\n", + $xferfiles / ($#dates + 1)); +printf ("Average Bytes Transmitted Daily %12.0f\n", + $xferbytes / ($#dates + 1)); + +format top1 = + +Daily Transmission Statistics + + Number Of Number of Percent Of Percent Of + Date Files Sent MB Sent Files Sent Bytes Sent +--------------- ---------- ----------- ---------- ---------- +. + +format line1 = +@<<<<<<<<<<<<<< @>>>>>>>>> @>>>>>>>>>> @>>>>>>> @>>>>>>> +$date, $nfiles, $nbytes/(1024*1024), $pctfiles, $pctbytes +. + +$^ = top1; +$~ = line1; + +foreach $date ( sort datecompare keys(xferbytes) ) { + + $nfiles = $xferfiles{$date}; + $nbytes = $xferbytes{$date}; + $pctfiles = sprintf("%8.2f", 100*$xferfiles{$date} / $xferfiles); + $pctbytes = sprintf("%8.2f", 100*$xferbytes{$date} / $xferbytes); + write; +} + +if ($opt_t) { +format top2 = + +Total Transfers from each Archive Section (By bytes) + + - Percent - + Archive Section NFiles MB Files Bytes +------------------------------------- ------- ----------- ----- ------- +. + +format line2 = +@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @>>>>>> @>>>>>>>>>> @>>>> @>>>> +$section, $files, $bytes/(1024*1024), $pctfiles, $pctbytes +. + +$| = 1; +$- = 0; +$^ = top2; +$~ = line2; + +foreach $section ( sort bytecompare keys(groupfiles) ) { + + $files = $groupfiles{$section}; + $bytes = $groupbytes{$section}; + $pctbytes = sprintf("%8.2f", 100 * $groupbytes{$section} / $xferbytes); + $pctfiles = sprintf("%8.2f", 100 * $groupfiles{$section} / $xferfiles); + write; + +} + +if ( $xferfiles < 1 ) { $xferfiles = 1; } +if ( $xferbytes < 1 ) { $xferbytes = 1; } +} + +if ($opt_d) { +format top3 = + +Total Transfer Amount By Domain + + Number Of Number of Percent Of Percent Of +Domain Name Files Sent MB Sent Files Sent Bytes Sent +----------- ---------- ------------ ---------- ---------- +. + +format line3 = +@<<<<<<<<<< @>>>>>>>>> @>>>>>>>>>>> @>>>>>>> @>>>>>>> +$domain, $files, $bytes/(1024*1024), $pctfiles, $pctbytes +. + +$- = 0; +$^ = top3; +$~ = line3; + +foreach $domain ( sort domnamcompare keys(domainfiles) ) { + + if ( $domainsecs{$domain} < 1 ) { $domainsecs{$domain} = 1; } + + $files = $domainfiles{$domain}; + $bytes = $domainbytes{$domain}; + $pctfiles = sprintf("%8.2f", 100 * $domainfiles{$domain} / $xferfiles); + $pctbytes = sprintf("%8.2f", 100 * $domainbytes{$domain} / $xferbytes); + write; + +} + +} + +if ($opt_h) { + +format top8 = + +Hourly Transmission Statistics + + Number Of Number of Percent Of Percent Of + Time Files Sent MB Sent Files Sent Bytes Sent +--------------- ---------- ----------- ---------- ---------- +. + +format line8 = +@<<<<<<<<<<<<<< @>>>>>>>>> @>>>>>>>>>> @>>>>>>> @>>>>>>> +$hour, $nfiles, $nbytes/(1024*1024), $pctfiles, $pctbytes +. + + +$| = 1; +$- = 0; +$^ = top8; +$~ = line8; + +foreach $hour ( sort keys(xfertbytes) ) { + + $nfiles = $xfertfiles{$hour}; + $nbytes = $xfertbytes{$hour}; + $pctfiles = sprintf("%8.2f", 100*$xfertfiles{$hour} / $xferfiles); + $pctbytes = sprintf("%8.2f", 100*$xfertbytes{$hour} / $xferbytes); + write; +} +} +exit(0); + +sub datecompare { + $a lt $b; +} + +sub domnamcompare { + + $sdiff = length($a) - length($b); + ($sdiff < 0) ? -1 : ($sdiff > 0) ? 1 : ($a lt $b) ? -1 : ($a gt $b) ? 1 : 0; + +} + +sub bytecompare { + + $bdiff = $groupbytes{$b} - $groupbytes{$a}; + ($bdiff < 0) ? -1 : ($bdiff > 0) ? 1 : ($a lt $b) ? -1 : ($a gt $b) ? 1 : 0; + +} + +sub faccompare { + + $fdiff = $fac{$b} - $fac{$a}; + ($fdiff < 0) ? -1 : ($fdiff > 0) ? 1 : ($a lt $b) ? -1 : ($a gt $b) ? 1 : 0; + +} + -- 2.34.1