diff --git a/plugins/apache/apache_byprojects/byprojects_access b/plugins/apache/apache_byprojects/byprojects_access index 7ed34589..475f4638 100644 --- a/plugins/apache/apache_byprojects/byprojects_access +++ b/plugins/apache/apache_byprojects/byprojects_access @@ -3,26 +3,30 @@ use strict; # # byprojects_access # -# Perl script to monitor access *byprojects* (e.g. vhost) from multiple files and/or regex. +# Perl script to monitor access *byprojects* (e.g. vhost) from multiple files +# and/or regex. # # Danny Fullerton # Mantor Organization -# This work is licensed under a Creative Commons Attribution 3.0 Unported License. +# This work is licensed under a MIT license. # # You need logtail (https://www.fourmilab.ch/webtools/logtail/) # -# Log can be gathered from multiple sources by simply specifying multiple log filename -# and/or a log filename and a regex. -# - 'prod' => [ {'path' => '/home/prod/log/access.log'} ], -# Prod graph will be using everything in /home/prod/log/access.log -# - 'test' => [ {'path' => '/var/log/access.log', 'regex' => '"[A-Z]+ /test/'}, -# {'path' => '/home/test/log/access.log'} ], -# Test graph will be using everything in /home/test/log/access.log and stuff that match -# '"[A-Z] /test/' in /var/log/access.log such as '"GET /test/' +# Log can be gathered from multiple sources by simply specifying multiple log +# filename or using wildcards (glob). File content can be selected using regex. +# +# - 'prod' => [ {'path' => '/home/prod/log/access.log'} ], +# Prod graph will be using everything in /home/prod/log/access.log +# +# - 'test' => [ {'path' => '/var/log/access.log', 'regex' => '"[A-Z]+ /test/'}, +# {'path' => '/home/test/log/access*.log'} ], +# Test graph will be using everything file matching /home/test/log/access*.log +# and stuff that match the expression '"[A-Z] /test/' in /var/log/access.log +# such as '"GET /test/' my $server = 'Apache'; -my $statepath = '/usr/local/var/munin/plugin-state'; # where logtail will save the state +my $statepath = '/usr/local/var/munin/plugin-state'; my $logtail = '/usr/local/bin/logtail'; my %logs = ( @@ -67,17 +71,21 @@ foreach my $project ( keys %logs ) { my $i = 0; my $x = 0; foreach my $log ( @{$logs{$project}} ) { - my $state = $statepath.'/'.$project.$x.'_access.state'; - open(LT, "$logtail -f ".$log->{'path'}." -o $state |") or die "Can't open $logtail : $!"; - while () { - my $buf = $_; - if($buf eq '') { next } - if(!defined($log->{'regex'}) || $buf =~ m/$log->{'regex'}/) { - $i++; + my @paths = glob $log->{'path'}; + foreach my $path (@paths) { + my $state = $statepath.'/'.$project.$x.'_access.state'; + open(LT, "$logtail -f ".$log->{'path'}." -o $state |") or + die "Can't open $logtail : $!"; + while () { + my $buf = $_; + if($buf eq '') { next } + if(!defined($log->{'regex'}) || $buf =~ m/$log->{'regex'}/) { + $i++; + } } + close(LT); + $x++; } - close(LT); - $x++; } print $project.".value $i\n"; } diff --git a/plugins/apache/apache_byprojects/byprojects_bandwidth b/plugins/apache/apache_byprojects/byprojects_bandwidth index d77a436e..d5f6e841 100644 --- a/plugins/apache/apache_byprojects/byprojects_bandwidth +++ b/plugins/apache/apache_byprojects/byprojects_bandwidth @@ -3,30 +3,35 @@ use strict; # # byprojects_bandwidth # -# Perl script to monitor total bandwidth *byprojects* (e.g. vhost) from multiple files and/or regex. +# Perl script to monitor total bandwidth *byprojects* (e.g. vhost) from multiple +# files and/or regex. # # Danny Fullerton # Mantor Organization -# This work is licensed under a Creative Commons Attribution 3.0 Unported License. +# This work is licensed under a MIT license. # # You need logtail (https://www.fourmilab.ch/webtools/logtail/) # # mod_logio apache module (https://httpd.apache.org/docs/2.0/mod/mod_logio.html). -# Your logformat should look like this "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" +# Your logformat should look like this: +# "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" # where %I is input and %O is output. # -# Log can be gathered from multiple sources by simply specifying multiple log filename -# and/or a log filename and a regex. -# - 'prod' => [ {'path' => '/home/prod/log/access.log'} ], -# Prod graph will be using everything in /home/prod/log/access.log -# - 'test' => [ {'path' => '/var/log/access.log', 'regex' => '"[A-Z]+ /test/'}, -# {'path' => '/home/test/log/access.log'} ], -# Test graph will be using everything in /home/test/log/access.log and stuff that match -# '"[A-Z] /test/' in /var/log/access.log such as '"GET /test/' +# Log can be gathered from multiple sources by simply specifying multiple log +# filename or using wildcards (glob). File content can be selected using regex. +# +# - 'prod' => [ {'path' => '/home/prod/log/access.log'} ], +# Prod graph will be using everything in /home/prod/log/access.log +# +# - 'test' => [ {'path' => '/var/log/access.log', 'regex' => '"[A-Z]+ /test/'}, +# {'path' => '/home/test/log/access*.log'} ], +# Test graph will be using everything file matching /home/test/log/access*.log +# and stuff that match the expression '"[A-Z] /test/' in /var/log/access.log +# such as '"GET /test/' my $server = 'Apache'; -my $statepath = '/usr/local/var/munin/plugin-state'; # where logtail will save the state +my $statepath = '/usr/local/var/munin/plugin-state'; my $logtail = '/usr/local/bin/logtail'; my %logs = ( @@ -58,7 +63,8 @@ if(defined($ARGV[0])) { print "graph_total Total\n"; print "graph_vlabel Bits\n"; print "graph_category $server\n"; - print "graph_info This graph show $server total bandwidth used by various projects.\n"; + print "graph_info This graph show $server total bandwidth used by various "\ + "projects.\n"; while ((my $project, my @files) = each(%logs)) { print $project.".label $project\n"; print $project.".type GAUGE\n"; @@ -72,20 +78,24 @@ foreach my $project ( keys %logs ) { my $o = 0; my $x = 0; foreach my $log ( @{$logs{$project}} ) { - my $state = $statepath.'/'.$project.$x.'_totalbandwidth.state'; - open(LT, "$logtail -f ".$log->{'path'}." -o $state |") or die "Can't open $logtail : $!"; - while () { - my $buf = $_; - if($buf eq '') { next } - if(!defined($log->{'regex'}) || $buf =~ m/$log->{'regex'}/) { - if($buf =~ m/(\d+) (\d+)$/) { - $i += $1; - $o += $2; + my @paths = glob $log->{'path'}; + foreach my $path (@paths) { + my $state = $statepath.'/'.$project.$x.'_totalbandwidth.state'; + open(LT, "$logtail -f ".$log->{'path'}." -o $state |") or + die "Can't open $logtail : $!"; + while () { + my $buf = $_; + if($buf eq '') { next } + if(!defined($log->{'regex'}) || $buf =~ m/$log->{'regex'}/) { + if($buf =~ m/(\d+) (\d+)$/) { + $i += $1; + $o += $2; + } } } + close(LT); + $x++; } - close(LT); - $x++; } $x = $i + $o; print $project.".value $x\n"; diff --git a/plugins/apache/apache_byprojects/byprojects_inout_bandwidth b/plugins/apache/apache_byprojects/byprojects_inout_bandwidth index 7e10ad6f..e92800cb 100644 --- a/plugins/apache/apache_byprojects/byprojects_inout_bandwidth +++ b/plugins/apache/apache_byprojects/byprojects_inout_bandwidth @@ -3,30 +3,35 @@ use strict; # # byprojects_inout_bandwidth # -# Perl script to monitor in/out bandwidth *byprojects* (e.g. vhost) from multiple files and/or regex. +# Perl script to monitor in/out bandwidth *byprojects* (e.g. vhost) from +# multiple files and/or regex. # # Danny Fullerton # Mantor Organization -# This work is licensed under a Creative Commons Attribution 3.0 Unported License. +# This work is licensed under a MIT license. # # You need logtail (https://www.fourmilab.ch/webtools/logtail/) # -# mod_logio apache module (https://httpd.apache.org/docs/2.0/mod/mod_logio.html). -# Your logformat should look like this "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" +# mod_logio apache module (https://httpd.apache.org/docs/2.0/mod/mod_logio.html) +# Your logformat should look like this: +# "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" # where %I is input and %O is output. # -# Log can be gathered from multiple sources by simply specifying multiple log filename -# and/or a log filename and a regex. -# - 'prod' => [ {'path' => '/home/prod/log/access.log'} ], -# Prod graph will be using everything in /home/prod/log/access.log -# - 'test' => [ {'path' => '/var/log/access.log', 'regex' => '"[A-Z]+ /test/'}, -# {'path' => '/home/test/log/access.log'} ], -# Test graph will be using everything in /home/test/log/access.log and stuff that match -# '"[A-Z] /test/' in /var/log/access.log such as '"GET /test/' +# Log can be gathered from multiple sources by simply specifying multiple log +# filename or using wildcards (glob). File content can be selected using regex. +# +# - 'prod' => [ {'path' => '/home/prod/log/access.log'} ], +# Prod graph will be using everything in /home/prod/log/access.log +# +# - 'test' => [ {'path' => '/var/log/access.log', 'regex' => '"[A-Z]+ /test/'}, +# {'path' => '/home/test/log/access*.log'} ], +# Test graph will be using everything file matching /home/test/log/access*.log +# and stuff that match the expression '"[A-Z] /test/' in /var/log/access.log +# such as '"GET /test/' my $server = 'Apache'; -my $statepath = '/usr/local/var/munin/plugin-state'; # where logtail will save the state +my $statepath = '/usr/local/var/munin/plugin-state'; my $logtail = '/usr/local/bin/logtail'; my %logs = ( @@ -55,7 +60,8 @@ if(defined($ARGV[0])) { print "graph_args --base 1000\n"; print "graph_vlabel bits per \${graph_period} in (-) / out (+)\n"; print "graph_category $server\n"; - print "graph_info This graph show $server in/out bandwidth used by various projects.\n"; + print "graph_info This graph show $server in/out bandwidth used by various"\ + " projects.\n"; while ((my $project, my @files) = each(%logs)) { print "i".$project.".label $project\n"; print "i".$project.".type GAUGE\n"; @@ -75,20 +81,24 @@ foreach my $project ( keys %logs ) { my $o = 0; my $x = 0; foreach my $log ( @{$logs{$project}} ) { - my $state = $statepath.'/'.$project.$x.'_inoutbandwidth.state'; - open(LT, "$logtail -f ".$log->{'path'}." -o $state |") or die "Can't open $logtail : $!"; - while () { - my $buf = $_; - if($buf eq '') { next } - if(!defined($log->{'regex'}) || $buf =~ m/$log->{'regex'}/) { - if($buf =~ m/(\d+) (\d+)$/) { - $i += $1; - $o += $2; + my @paths = glob $log->{'path'}; + foreach my $path (@paths) { + my $state = $statepath.'/'.$project.$x.'_inoutbandwidth.state'; + open(LT, "$logtail -f ".$log->{'path'}." -o $state |") or + die "Can't open $logtail : $!"; + while () { + my $buf = $_; + if($buf eq '') { next } + if(!defined($log->{'regex'}) || $buf =~ m/$log->{'regex'}/) { + if($buf =~ m/(\d+) (\d+)$/) { + $i += $1; + $o += $2; + } } } + close(LT); + $x++; } - close(LT); - $x++; } print "i".$project.".value $i\n"; print "o".$project.".value $o\n"; diff --git a/plugins/nginx/nginx_byprojects/LICENSE.txt b/plugins/nginx/nginx_byprojects/LICENSE.txt new file mode 100644 index 00000000..95c558f6 --- /dev/null +++ b/plugins/nginx/nginx_byprojects/LICENSE.txt @@ -0,0 +1,19 @@ +Copyright (c) 2012-2013, Danny Fullerton, danny at mantor dot org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/plugins/nginx/nginx_byprojects/README.md b/plugins/nginx/nginx_byprojects/README.md index 45fb8218..6dbb4840 100644 --- a/plugins/nginx/nginx_byprojects/README.md +++ b/plugins/nginx/nginx_byprojects/README.md @@ -29,7 +29,7 @@ Multiple logs can be used for the same project/vhost and a regular expression (r ], 'dev' => [ {'path' => '/var/log/httpd/ssl-dev-access.log'}, - {'path' => '/home/dev/log/access.log'} + {'path' => '/home/dev/log/access*.log'} # glob is supported ], 'test' => [ {'path' => '/var/log/access.log', 'regex' => '"[A-Z]+ /test/'}, @@ -42,3 +42,6 @@ In the previous example the prod project graph will be using everything in /home Then link the file just as any other plugins. ln -s /usr/local/sbin/ /usr/local/etc/munin/plugins/ + +## License +MIT diff --git a/plugins/nginx/nginx_byprojects/byprojects_access b/plugins/nginx/nginx_byprojects/byprojects_access index 3c0e33e9..782dfc00 100644 --- a/plugins/nginx/nginx_byprojects/byprojects_access +++ b/plugins/nginx/nginx_byprojects/byprojects_access @@ -3,26 +3,30 @@ use strict; # # byprojects_access # -# Perl script to monitor access *byprojects* (e.g. vhost) from multiple files and/or regex. +# Perl script to monitor access *byprojects* (e.g. vhost) from multiple files +# and/or regex. # # Danny Fullerton # Mantor Organization -# This work is licensed under a Creative Commons Attribution 3.0 Unported License. +# This work is licensed under a MIT license. # # You need logtail (https://www.fourmilab.ch/webtools/logtail/) # -# Log can be gathered from multiple sources by simply specifying multiple log filename -# and/or a log filename and a regex. -# - 'prod' => [ {'path' => '/home/prod/log/access.log'} ], -# Prod graph will be using everything in /home/prod/log/access.log -# - 'test' => [ {'path' => '/var/log/access.log', 'regex' => '"[A-Z]+ /test/'}, -# {'path' => '/home/test/log/access.log'} ], -# Test graph will be using everything in /home/test/log/access.log and stuff that match -# '"[A-Z] /test/' in /var/log/access.log such as '"GET /test/' +# Log can be gathered from multiple sources by simply specifying multiple log +# filename or using wildcards (glob). File content can be selected using regex. +# +# - 'prod' => [ {'path' => '/home/prod/log/access.log'} ], +# Prod graph will be using everything in /home/prod/log/access.log +# +# - 'test' => [ {'path' => '/var/log/access.log', 'regex' => '"[A-Z]+ /test/'}, +# {'path' => '/home/test/log/access*.log'} ], +# Test graph will be using everything file matching /home/test/log/access*.log +# and stuff that match the expression '"[A-Z] /test/' in /var/log/access.log +# such as '"GET /test/' my $server = 'Nginx'; -my $statepath = '/usr/local/var/munin/plugin-state'; # where logtail will save the state +my $statepath = '/usr/local/var/munin/plugin-state'; my $logtail = '/usr/local/bin/logtail'; my %logs = ( @@ -31,7 +35,7 @@ my %logs = ( ], 'dev' => [ {'path' => '/var/log/httpd/ssl-dev-access.log'}, - {'path' => '/home/dev/log/access.log'} + {'path' => '/home/dev/log/access*.log'} # glob is supported ], 'test' => [ {'path' => '/var/log/access.log', 'regex' => '"[A-Z]+ /test/'}, @@ -55,7 +59,7 @@ if(defined($ARGV[0])) { print "graph_category $server\n"; print "graph_info This graph show $server access by various projects.\n"; while ((my $project, my @files) = each(%logs)) { - print $project.".label $project"; + print $project.".label $project\n"; print $project.".type DERIVE\n"; print $project.".min 0\n"; } @@ -67,13 +71,17 @@ foreach my $project ( keys %logs ) { my $i = 0; my $x = 0; foreach my $log ( @{$logs{$project}} ) { - my $state = $statepath.'/'.$project.$x.'_access.state'; - open(LT, "$logtail -f ".$log->{'path'}." -o $state |") or die "Can't open $logtail : $!"; - while () { - my $buf = $_; - if($buf eq '') { next } - if(!defined($log->{'regex'}) || $buf =~ m/$log->{'regex'}/) { - $i++; + my @paths = glob $log->{'path'}; + foreach my $path (@paths) { + my $state = $statepath.'/'.$project.$x.'_access.state'; + open(LT, "$logtail -f ".$log->{'path'}." -o $state |") or + die "Can't open $logtail: $!"; + while () { + my $buf = $_; + if($buf eq '') { next } + if(!defined($log->{'regex'}) || $buf =~ m/$log->{'regex'}/) { + $i++; + } } } close(LT); diff --git a/plugins/nginx/nginx_byprojects/byprojects_bandwidth b/plugins/nginx/nginx_byprojects/byprojects_bandwidth index dab06228..65842633 100644 --- a/plugins/nginx/nginx_byprojects/byprojects_bandwidth +++ b/plugins/nginx/nginx_byprojects/byprojects_bandwidth @@ -3,31 +3,36 @@ use strict; # # byprojects_bandwidth # -# Perl script to monitor total bandwidth *byprojects* (e.g. vhost) from multiple files and/or regex. +# Perl script to monitor total bandwidth *byprojects* (e.g. vhost) from multiple +# files and/or regex. # # Danny Fullerton # Mantor Organization -# This work is licensed under a Creative Commons Attribution 3.0 Unported License. +# This work is licensed under a MIT license. # # You need logtail (https://www.fourmilab.ch/webtools/logtail/) # -# Your nginx configuration should look like this (i.e. $request_length $body_bytes_sent at the end): +# Your nginx configuration should look like this (i.e. $request_length +# body_bytes_sent at the end): # log_format main '$remote_addr - $remote_user $time_local "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" $request_length $body_bytes_sent'; # -# Log can be gathered from multiple sources by simply specifying multiple log filename -# and/or a log filename and a regex. -# - 'prod' => [ {'path' => '/home/prod/log/access.log'} ], -# Prod graph will be using everything in /home/prod/log/access.log -# - 'test' => [ {'path' => '/var/log/access.log', 'regex' => '"[A-Z]+ /test/'}, -# {'path' => '/home/test/log/access.log'} ], -# Test graph will be using everything in /home/test/log/access.log and stuff that match -# '"[A-Z] /test/' in /var/log/access.log such as '"GET /test/' +# Log can be gathered from multiple sources by simply specifying multiple log +# filename or using wildcards (glob). File content can be selected using regex. +# +# - 'prod' => [ {'path' => '/home/prod/log/access.log'} ], +# Prod graph will be using everything in /home/prod/log/access.log +# +# - 'test' => [ {'path' => '/var/log/access.log', 'regex' => '"[A-Z]+ /test/'}, +# {'path' => '/home/test/log/access*.log'} ], +# Test graph will be using everything file matching /home/test/log/access*.log +# and stuff that match the expression '"[A-Z] /test/' in /var/log/access.log +# such as '"GET /test/' my $server = 'Nginx'; -my $statepath = '/usr/local/var/munin/plugin-state'; # where logtail will save the state +my $statepath = '/usr/local/var/munin/plugin-state'; my $logtail = '/usr/local/bin/logtail'; my %logs = ( @@ -59,7 +64,8 @@ if(defined($ARGV[0])) { print "graph_total Total\n"; print "graph_vlabel Bits\n"; print "graph_category $server\n"; - print "graph_info This graph show $server total bandwidth used by various projects.\n"; + print "graph_info This graph show $server total bandwidth used by various "\ + "projects.\n"; while ((my $project, my @files) = each(%logs)) { print $project.".label $project\n"; print $project.".type GAUGE\n"; @@ -73,20 +79,24 @@ foreach my $project ( keys %logs ) { my $o = 0; my $x = 0; foreach my $log ( @{$logs{$project}} ) { - my $state = $statepath.'/'.$project.$x.'_totalbandwidth.state'; - open(LT, "$logtail -f ".$log->{'path'}." -o $state |") or die "Can't open $logtail : $!"; - while () { - my $buf = $_; - if($buf eq '') { next } - if(!defined($log->{'regex'}) || $buf =~ m/$log->{'regex'}/) { - if($buf =~ m/(\d+) (\d+)$/) { - $i += $1; - $o += $2; + my @paths = glob $log->{'path'}; + foreach my $path (@paths) { + my $state = $statepath.'/'.$project.$x.'_totalbandwidth.state'; + open(LT, "$logtail -f ".$log->{'path'}." -o $state |") or + die "Can't open $logtail : $!"; + while () { + my $buf = $_; + if($buf eq '') { next } + if(!defined($log->{'regex'}) || $buf =~ m/$log->{'regex'}/) { + if($buf =~ m/(\d+) (\d+)$/) { + $i += $1; + $o += $2; + } } } + close(LT); + $x++; } - close(LT); - $x++; } $x = $i + $o; print $project.".value $x\n"; diff --git a/plugins/nginx/nginx_byprojects/byprojects_inout_bandwidth b/plugins/nginx/nginx_byprojects/byprojects_inout_bandwidth index 025c951a..d96ef0f3 100644 --- a/plugins/nginx/nginx_byprojects/byprojects_inout_bandwidth +++ b/plugins/nginx/nginx_byprojects/byprojects_inout_bandwidth @@ -3,31 +3,36 @@ use strict; # # byprojects_inout_bandwidth # -# Perl script to monitor in/out bandwidth *byprojects* (e.g. vhost) from multiple files and/or regex. +# Perl script to monitor in/out bandwidth *byprojects* (e.g. vhost) from +# multiple files and/or regex. # # Danny Fullerton # Mantor Organization -# This work is licensed under a Creative Commons Attribution 3.0 Unported License. +# This work is licensed under a MIT license. # # You need logtail (https://www.fourmilab.ch/webtools/logtail/) # -# Your nginx configuration should look like this (i.e. $request_length $body_bytes_sent at the end): +# Your nginx configuration should look like this (i.e. $request_length +# body_bytes_sent at the end): # log_format main '$remote_addr - $remote_user $time_local "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" $request_length $body_bytes_sent'; # -# Log can be gathered from multiple sources by simply specifying multiple log filename -# and/or a log filename and a regex. -# - 'prod' => [ {'path' => '/home/prod/log/access.log'} ], -# Prod graph will be using everything in /home/prod/log/access.log -# - 'test' => [ {'path' => '/var/log/access.log', 'regex' => '"[A-Z]+ /test/'}, -# {'path' => '/home/test/log/access.log'} ], -# Test graph will be using everything in /home/test/log/access.log and stuff that match -# '"[A-Z] /test/' in /var/log/access.log such as '"GET /test/' +# Log can be gathered from multiple sources by simply specifying multiple log +# filename or using wildcards (glob). File content can be selected using regex. +# +# - 'prod' => [ {'path' => '/home/prod/log/access.log'} ], +# Prod graph will be using everything in /home/prod/log/access.log +# +# - 'test' => [ {'path' => '/var/log/access.log', 'regex' => '"[A-Z]+ /test/'}, +# {'path' => '/home/test/log/access*.log'} ], +# Test graph will be using everything file matching /home/test/log/access*.log +# and stuff that match the expression '"[A-Z] /test/' in /var/log/access.log +# such as '"GET /test/' my $server = 'Nginx'; -my $statepath = '/usr/local/var/munin/plugin-state'; # where logtail will save the state +my $statepath = '/usr/local/var/munin/plugin-state'; my $logtail = '/usr/local/bin/logtail'; my %logs = ( @@ -56,7 +61,8 @@ if(defined($ARGV[0])) { print "graph_args --base 1000\n"; print "graph_vlabel bits per \${graph_period} in (-) / out (+)\n"; print "graph_category $server\n"; - print "graph_info This graph show $server in/out bandwidth used by various projects.\n"; + print "graph_info This graph show $server in/out bandwidth used by various"\ + " projects.\n"; while ((my $project, my @files) = each(%logs)) { print "i".$project.".label $project\n"; print "i".$project.".type GAUGE\n"; @@ -76,20 +82,24 @@ foreach my $project ( keys %logs ) { my $o = 0; my $x = 0; foreach my $log ( @{$logs{$project}} ) { - my $state = $statepath.'/'.$project.$x.'_inoutbandwidth.state'; - open(LT, "$logtail -f ".$log->{'path'}." -o $state |") or die "Can't open $logtail : $!"; - while () { - my $buf = $_; - if($buf eq '') { next } - if(!defined($log->{'regex'}) || $buf =~ m/$log->{'regex'}/) { - if($buf =~ m/(\d+) (\d+)$/) { - $i += $1; - $o += $2; + my @paths = glob $log->{'path'}; + foreach my $path (@paths) { + my $state = $statepath.'/'.$project.$x.'_inoutbandwidth.state'; + open(LT, "$logtail -f ".$log->{'path'}." -o $state |") or + die "Can't open $logtail : $!"; + while () { + my $buf = $_; + if($buf eq '') { next } + if(!defined($log->{'regex'}) || $buf =~ m/$log->{'regex'}/) { + if($buf =~ m/(\d+) (\d+)$/) { + $i += $1; + $o += $2; + } } } + close(LT); + $x++; } - close(LT); - $x++; } print "i".$project.".value $i\n"; print "o".$project.".value $o\n";